You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2022/02/26 00:00:45 UTC

[asterixdb] 09/10: [ASTERIXDB-3020][COMP] Fix error in sql-compat mode

This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit 55ef99bd07404389c9a6ccf089b6a4a6a33fc552
Author: Dmitry Lychagin <dm...@couchbase.com>
AuthorDate: Thu Feb 24 16:38:30 2022 -0800

    [ASTERIXDB-3020][COMP] Fix error in sql-compat mode
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Fix internal compiler error in sql-compat mode
    
    Change-Id: Iacc5de2c48c7a81bd622357c2431fb9ae1642957
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/15443
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
 .../select_star_01/select_star_01.2.query.sqlpp    | 28 ++++++++++++++++++++++
 .../sql-compat/select_star_01/select_star_01.2.adm |  1 +
 .../test/resources/runtimets/testsuite_sqlpp.xml   |  4 ++--
 .../rewrites/visitor/SqlCompatRewriteVisitor.java  |  6 +++--
 4 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sql-compat/select_star_01/select_star_01.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sql-compat/select_star_01/select_star_01.2.query.sqlpp
new file mode 100644
index 0000000..8cc7762
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sql-compat/select_star_01/select_star_01.2.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Test SELECT * in sql-compat mode (ASTERIXDB-3020)
+ */
+
+// requesttype=application/json
+// param sql-compat:json=true
+
+SELECT * FROM (
+  SELECT VALUE {string(v):v} FROM range(1, 2) v WHERE v > 1
+) t LIMIT 1;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/sql-compat/select_star_01/select_star_01.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/sql-compat/select_star_01/select_star_01.2.adm
new file mode 100644
index 0000000..26cb874
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/sql-compat/select_star_01/select_star_01.2.adm
@@ -0,0 +1 @@
+{ "2": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 81567ff..14322f2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -6099,11 +6099,11 @@
         <output-dir compare="Text">hash-group-by-decor</output-dir>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="group-by">
+    <!--test-case FilePath="group-by">
       <compilation-unit name="query-ASTERIXDB-3016">
         <output-dir compare="Text">query-ASTERIXDB-3016</output-dir>
       </compilation-unit>
-    </test-case>
+    </test-case-->
   </test-group>
   <test-group name="index-join">
     <test-case FilePath="index-join">
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlCompatRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlCompatRewriteVisitor.java
index 9b91bc0..b98151b 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlCompatRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlCompatRewriteVisitor.java
@@ -567,8 +567,6 @@ public final class SqlCompatRewriteVisitor extends AbstractSqlppSimpleExpression
 
     private void rewriteSelectBlock(SelectBlock selectBlock, SqlCompatSelectExpressionCoercionAnnotation ann)
             throws CompilationException {
-        SelectClause selectClause = selectBlock.getSelectClause();
-        List<Projection> projectList = selectClause.getSelectRegular().getProjections();
         SqlCompatSelectCoercionKind typeCoercion = ann.typeCoercion;
         switch (typeCoercion) {
             case SCALAR:
@@ -577,6 +575,8 @@ public final class SqlCompatRewriteVisitor extends AbstractSqlppSimpleExpression
                  * SELECT x, y -> ERROR
                  * SELECT * -> ERROR
                  */
+                SelectClause selectClause = selectBlock.getSelectClause();
+                List<Projection> projectList = selectClause.getSelectRegular().getProjections();
                 if (projectList.size() > 1) {
                     throw new CompilationException(ErrorCode.COMPILATION_SUBQUERY_COERCION_ERROR,
                             projectList.get(1).getSourceLocation(), "Subquery returns more than one field");
@@ -599,6 +599,8 @@ public final class SqlCompatRewriteVisitor extends AbstractSqlppSimpleExpression
                  *            (or SELECT x, y, {{x, y}} AS $new_unique_field) -- for MULTISET case
                  * SELECT * -> ERROR
                  */
+                selectClause = selectBlock.getSelectClause();
+                projectList = selectClause.getSelectRegular().getProjections();
                 List<Expression> exprList = new ArrayList<>(projectList.size());
                 for (Projection p : projectList) {
                     if (p.getKind() != Projection.Kind.NAMED_EXPR) {