Dmitry Lychagin has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/3306
Change subject: [ASTERIXDB-2537][COMP] Incorrect free variables for QuantifiedExpression ...................................................................... [ASTERIXDB-2537][COMP] Incorrect free variables for QuantifiedExpression - user model changes: no - storage format changes: no - interface changes: no Details: - Variables bound by a QuantifiedExpression should be excluded when computing free variables for that expression Change-Id: If5d0470b0742baa24e3d383bc4aa617a4c6fdd99 --- A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/suagr-09.1.ddl.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.2.update.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.3.query.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/sugar-09/sugar-09.3.adm M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java 7 files changed, 125 insertions(+), 2 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/06/3306/1 diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/suagr-09.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/suagr-09.1.ddl.sqlpp new file mode 100644 index 0000000..ff71d84 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/suagr-09.1.ddl.sqlpp @@ -0,0 +1,50 @@ +/* + * 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. + */ + +/* + * Description: Test quantified expression inside SQL aggregate + */ + +drop dataverse test if exists; +create dataverse test; + +use test; + +create type test.AddressType as + closed { + number : bigint, + street : string, + city : string +}; + +create type test.CustomerType as + closed { + cid : bigint, + name : string, + age : bigint?, + address : AddressType?, + interests : {{string}}, + children : [{ + name : string, + age : bigint? + } +] +}; + +create dataset Customers(CustomerType) primary key cid; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.2.update.sqlpp new file mode 100644 index 0000000..2a47e36 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.2.update.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ + +/* + * Description: Test quantified expression inside SQL aggregate + */ + +use test; + +load dataset Customers using localfs ((`path`=`asterix_nc1://data/semistructured/co1k/customer.adm`),(`format`=`adm`)); \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.3.query.sqlpp new file mode 100644 index 0000000..1f0af57 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-09/sugar-09.3.query.sqlpp @@ -0,0 +1,27 @@ +/* + * 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. + */ + +/* + * Description: Test quantified expression inside SQL aggregate + */ + +use test; + +SELECT VALUE SUM(CASE WHEN (SOME a IN interests SATISFIES a LIKE '%Cooking%' END) THEN 1 ELSE 0 END) +FROM Customers \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/sugar-09/sugar-09.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/sugar-09/sugar-09.3.adm new file mode 100644 index 0000000..c147342 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/sugar-09/sugar-09.3.adm @@ -0,0 +1 @@ +81 \ 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 3ab1ff9..124ae13 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -3165,6 +3165,11 @@ </compilation-unit> </test-case> <test-case FilePath="group-by"> + <compilation-unit name="sugar-09"> + <output-dir compare="Text">sugar-09</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="group-by"> <compilation-unit name="null"> <output-dir compare="Text">null</output-dir> </compilation-unit> diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java index 14dfaeb..28c9b73 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java +++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java @@ -29,7 +29,9 @@ import org.apache.asterix.lang.common.clause.GroupbyClause; import org.apache.asterix.lang.common.clause.LetClause; import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair; +import org.apache.asterix.lang.common.expression.QuantifiedExpression; import org.apache.asterix.lang.common.expression.VariableExpr; +import org.apache.asterix.lang.common.struct.QuantifiedPair; import org.apache.asterix.lang.common.struct.VarIdentifier; import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause; import org.apache.asterix.lang.sqlpp.clause.FromClause; @@ -167,4 +169,12 @@ return bindingVars; } + public static List<VariableExpr> getBindingVariables(QuantifiedExpression qe) { + List<QuantifiedPair> quantifiedList = qe.getQuantifiedList(); + List<VariableExpr> bindingVars = new ArrayList<>(quantifiedList.size()); + for (QuantifiedPair qp : quantifiedList) { + bindingVars.add(qp.getVarExpr()); + } + return bindingVars; + } } diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java index b754533..6945103 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java +++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java @@ -373,10 +373,14 @@ @Override public Void visit(QuantifiedExpression qe, Collection<VariableExpr> freeVars) throws CompilationException { + Collection<VariableExpr> qeBindingVars = SqlppVariableUtil.getBindingVariables(qe); + Collection<VariableExpr> qeFreeVars = new HashSet<>(); for (QuantifiedPair pair : qe.getQuantifiedList()) { - pair.getExpr().accept(this, freeVars); + pair.getExpr().accept(this, qeFreeVars); } - qe.getSatisfiesExpr().accept(this, freeVars); + qe.getSatisfiesExpr().accept(this, qeFreeVars); + qeFreeVars.removeAll(qeBindingVars); + freeVars.addAll(qeFreeVars); return null; } -- To view, visit https://asterix-gerrit.ics.uci.edu/3306 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If5d0470b0742baa24e3d383bc4aa617a4c6fdd99 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: stabilization-f69489 Gerrit-Owner: Dmitry Lychagin <[email protected]>
