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 6dc926a670be8fe0ebaf9f72ca9416cd4aabfbde Author: Dmitry Lychagin <[email protected]> AuthorDate: Wed May 27 18:58:03 2020 -0700 [NO ISSUE][COMP] Eliminate OR if argument is TRUE/FALSE - user model changes: no - storage format changes: no - interface changes: no Details: - Eliminate disjunction if one argument is TRUE or FALSE as follows: OR(TRUE,x) -> TRUE; OR(FALSE,x) -> x Change-Id: I896c323da437bdbc822a8484b9981ae909a4b805 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/6523 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../optimizer/rules/ConstantFoldingRule.java | 60 +++++++++++++++++++--- .../statement-params-index-01.sqlpp | 54 +++++++++++++++++++ .../statement-params-index-02.sqlpp | 54 +++++++++++++++++++ .../statement-params-index-01.plan | 19 +++++++ .../statement-params-index-02.plan | 30 +++++++++++ .../constant_folding.2.query.sqlpp | 26 ++++++++++ .../constant_folding.3.query.sqlpp | 26 ++++++++++ .../constant_folding.4.query.sqlpp | 26 ++++++++++ .../constant_folding.5.query.sqlpp | 26 ++++++++++ .../constant_folding.6.query.sqlpp | 26 ++++++++++ .../constant_folding.7.query.sqlpp | 26 ++++++++++ .../statement-params/index_01/index_01.1.ddl.sqlpp | 41 +++++++++++++++ .../index_01/index_01.2.update.sqlpp | 26 ++++++++++ .../index_01/index_01.3.query.sqlpp | 36 +++++++++++++ .../index_01/index_01.4.query.sqlpp | 36 +++++++++++++ .../misc/constant_folding/constant_folding.2.adm | 4 ++ .../misc/constant_folding/constant_folding.3.adm | 18 +++++++ .../misc/constant_folding/constant_folding.4.adm | 4 ++ .../misc/constant_folding/constant_folding.5.adm | 18 +++++++ .../misc/constant_folding/constant_folding.6.adm | 18 +++++++ .../misc/constant_folding/constant_folding.7.adm | 18 +++++++ .../statement-params/index_01/index_01.3.adm | 8 +++ .../statement-params/index_01/index_01.4.adm | 1 + .../test/resources/runtimets/testsuite_sqlpp.xml | 5 ++ 24 files changed, 600 insertions(+), 6 deletions(-) diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java index 494b1b4..47e0373 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java @@ -70,6 +70,7 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractLogicalExp import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.ExpressionRuntimeProvider; +import org.apache.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue; import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.StatefulFunctionCallExpression; @@ -204,7 +205,21 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule { public Pair<Boolean, ILogicalExpression> visitScalarFunctionCallExpression(ScalarFunctionCallExpression expr, Void arg) throws AlgebricksException { boolean changed = constantFoldArgs(expr, arg); - if (!allArgsConstant(expr) || !expr.isFunctional() || !canConstantFold(expr)) { + List<Mutable<ILogicalExpression>> argList = expr.getArguments(); + int argConstantCount = countConstantArgs(argList); + if (argConstantCount != argList.size()) { + if (argConstantCount > 0 && expr.getFunctionIdentifier().equals(BuiltinFunctions.OR) + && expr.isFunctional()) { + if (foldOrArgs(expr)) { + ILogicalExpression changedExpr = + expr.getArguments().size() == 1 ? expr.getArguments().get(0).getValue() : expr; + return new Pair<>(true, changedExpr); + } + } + return new Pair<>(changed, expr); + } + + if (!expr.isFunctional() || !canConstantFold(expr)) { return new Pair<>(changed, expr); } @@ -348,13 +363,14 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule { return false; } - private boolean allArgsConstant(AbstractFunctionCallExpression expr) { - for (Mutable<ILogicalExpression> r : expr.getArguments()) { - if (r.getValue().getExpressionTag() != LogicalExpressionTag.CONSTANT) { - return false; + private int countConstantArgs(List<Mutable<ILogicalExpression>> argList) { + int n = 0; + for (Mutable<ILogicalExpression> r : argList) { + if (r.getValue().getExpressionTag() == LogicalExpressionTag.CONSTANT) { + n++; } } - return true; + return n; } private boolean canConstantFold(ScalarFunctionCallExpression function) throws AlgebricksException { @@ -391,5 +407,37 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule { } return true; } + + private boolean foldOrArgs(ScalarFunctionCallExpression expr) { + // or(true,x,y) -> true; or(false,x,y) -> or(x,y) + boolean changed = false; + List<Mutable<ILogicalExpression>> argList = expr.getArguments(); + Iterator<Mutable<ILogicalExpression>> argIter = argList.iterator(); + Mutable<ILogicalExpression> argFalse = null; + while (argIter.hasNext()) { + Mutable<ILogicalExpression> argExprRef = argIter.next(); + ILogicalExpression argExpr = argExprRef.getValue(); + if (argExpr.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + continue; + } + ConstantExpression cExpr = (ConstantExpression) argExpr; + IAlgebricksConstantValue cValue = cExpr.getValue(); + if (cValue.isTrue()) { + // or(true,x,y) -> true; + argList.clear(); + argList.add(argExprRef); + return true; + } else if (cValue.isFalse()) { + // remove 'false' from arg list, but save the expression. + argFalse = argExprRef; + argIter.remove(); + changed = true; + } + } + if (argList.isEmpty() && argFalse != null) { + argList.add(argFalse); + } + return changed; + } } } diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-01.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-01.sqlpp new file mode 100644 index 0000000..bde8e75 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-01.sqlpp @@ -0,0 +1,54 @@ +/* + * 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 that BTree index is used in query plan + */ + +// requesttype=application/json + +// param $p_fname:json="Julio" +// param $p_lname:json=null + +drop dataverse test if exists; +create dataverse test; + +use test; + +create type test.Emp as + closed { + id : bigint, + fname : string, + lname : string, + age : bigint, + dept : string +}; + +create dataset employee(Emp) primary key id; + +create index idx_employee_fname on employee (fname) type btree; + +create index idx_employee_lname on employee (lname) type btree; + +select l.id, l.fname, l.lname, l.age +from employee as l +where + ($p_fname is null or l.fname = $p_fname ) + and + ($p_lname is null or l.lname = $p_lname) +order by l.id; diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-02.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-02.sqlpp new file mode 100644 index 0000000..e74acc5 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/statement-params/statement-params-index-02.sqlpp @@ -0,0 +1,54 @@ +/* + * 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 that BTree index is used in query plan + */ + +// requesttype=application/json + +// param $p_fname:json="Julio" +// param $p_lname:json="Isa" + +drop dataverse test if exists; +create dataverse test; + +use test; + +create type test.Emp as + closed { + id : bigint, + fname : string, + lname : string, + age : bigint, + dept : string +}; + +create dataset employee(Emp) primary key id; + +create index idx_employee_fname on employee (fname) type btree; + +create index idx_employee_lname on employee (lname) type btree; + +select l.id, l.fname, l.lname, l.age +from employee as l +where + ($p_fname is null or l.fname = $p_fname ) + and + ($p_lname is null or l.lname = $p_lname) +order by l.id; diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-01.plan new file mode 100644 index 0000000..0f02160 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-01.plan @@ -0,0 +1,19 @@ +-- DISTRIBUTE_RESULT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- SORT_MERGE_EXCHANGE [$$28(ASC) ] |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- BTREE_SEARCH |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STABLE_SORT [$$36(ASC)] |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- BTREE_SEARCH |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-02.plan new file mode 100644 index 0000000..1a1db2c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-index-02.plan @@ -0,0 +1,30 @@ +-- DISTRIBUTE_RESULT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- SORT_MERGE_EXCHANGE [$$29(ASC) ] |PARTITIONED| + -- STREAM_SELECT |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- BTREE_SEARCH |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- INTERSECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STABLE_SORT [$$36(ASC)] |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- BTREE_SEARCH |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STABLE_SORT [$$40(ASC)] |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- STREAM_PROJECT |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- BTREE_SEARCH |PARTITIONED| + -- ONE_TO_ONE_EXCHANGE |PARTITIONED| + -- ASSIGN |PARTITIONED| + -- EMPTY_TUPLE_SOURCE |PARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.2.query.sqlpp new file mode 100644 index 0000000..83c3779 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.2.query.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: testing constant folding of OR with one TRUE argument + */ + +select value true or x<=2 +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.3.query.sqlpp new file mode 100644 index 0000000..85a77fe --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.3.query.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: testing constant folding of OR with one TRUE argument + */ + +explain select value true or x<=2 +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.4.query.sqlpp new file mode 100644 index 0000000..efb543f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.4.query.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: testing constant folding of OR with one FALSE argument + */ + +select value false or x<=2 +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.5.query.sqlpp new file mode 100644 index 0000000..4283fa6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.5.query.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: testing constant folding of OR with one FALSE argument + */ + +explain select value false or x<=2 +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.6.query.sqlpp new file mode 100644 index 0000000..b4b7c36 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.6.query.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: No constant folding of OR with non TRUE/FALSE argument + */ + +explain select value null or x<=2 +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.7.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.7.query.sqlpp new file mode 100644 index 0000000..517a996 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/constant_folding/constant_folding.7.query.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: No constant folding of OR with a non functional argument + */ + +explain select value true or get_year(current_date()) < x +from range(1, 4) x +order by x; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.1.ddl.sqlpp new file mode 100644 index 0000000..7515b0b --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.1.ddl.sqlpp @@ -0,0 +1,41 @@ +/* + * 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 that BTree index is used in query plan + */ + +drop dataverse test if exists; +create dataverse test; + +use test; + +create type test.Emp as + closed { + id : bigint, + fname : string, + lname : string, + age : bigint, + dept : string +}; + +create dataset employee(Emp) primary key id; + +create index idx_employee_fname on employee (fname) type btree; + +create index idx_employee_lname on employee (lname) type btree; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.2.update.sqlpp new file mode 100644 index 0000000..eef17c1 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.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 that BTree index is used in query plan + */ + +use test; + +load dataset employee using localfs ((`path`=`asterix_nc1://data/names.adm`),(`format`=`delimited-text`),(`delimiter`=`|`)); + diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.3.query.sqlpp new file mode 100644 index 0000000..aae6b95 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.3.query.sqlpp @@ -0,0 +1,36 @@ +/* + * 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 that BTree index is used in this query plan + */ + +// requesttype=application/json + +// param $p_fname:json="Julio" +// param $p_lname:json=null + +use test; + +select l.id, l.fname, l.lname, l.age +from employee as l +where + ($p_fname is null or l.fname = $p_fname ) + and + ($p_lname is null or l.lname = $p_lname) +order by l.id; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.4.query.sqlpp new file mode 100644 index 0000000..2b1c77c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/statement-params/index_01/index_01.4.query.sqlpp @@ -0,0 +1,36 @@ +/* + * 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 that BTree index is used in this query plan + */ + +// requesttype=application/json + +// param $p_fname:json="Julio" +// param $p_lname:json="Isa" + +use test; + +select l.id, l.fname, l.lname, l.age +from employee as l +where + ($p_fname is null or l.fname = $p_fname ) + and + ($p_lname is null or l.lname = $p_lname) +order by l.id; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.2.adm new file mode 100644 index 0000000..4b1e4bc --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.2.adm @@ -0,0 +1,4 @@ +true +true +true +true \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.3.adm new file mode 100644 index 0000000..5b24cb2 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.3.adm @@ -0,0 +1,18 @@ +distribute result [$$13] +-- DISTRIBUTE_RESULT |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + assign [$$13] <- [TRUE] + -- ASSIGN |UNPARTITIONED| + project ([]) + -- STREAM_PROJECT |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + order (ASC, $$x) + -- STABLE_SORT [$$x(ASC)] |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + unnest $$x <- range(1, 4) + -- UNNEST |UNPARTITIONED| + empty-tuple-source + -- EMPTY_TUPLE_SOURCE |UNPARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.4.adm new file mode 100644 index 0000000..5d73c0d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.4.adm @@ -0,0 +1,4 @@ +true +true +false +false \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.5.adm new file mode 100644 index 0000000..d3f67c2 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.5.adm @@ -0,0 +1,18 @@ +distribute result [$$13] +-- DISTRIBUTE_RESULT |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + project ([$$13]) + -- STREAM_PROJECT |UNPARTITIONED| + assign [$$13] <- [le($$x, 2)] + -- ASSIGN |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + order (ASC, $$x) + -- STABLE_SORT [$$x(ASC)] |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + unnest $$x <- range(1, 4) + -- UNNEST |UNPARTITIONED| + empty-tuple-source + -- EMPTY_TUPLE_SOURCE |UNPARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.6.adm new file mode 100644 index 0000000..77dc263 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.6.adm @@ -0,0 +1,18 @@ +distribute result [$$13] +-- DISTRIBUTE_RESULT |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + project ([$$13]) + -- STREAM_PROJECT |UNPARTITIONED| + assign [$$13] <- [or(null, le($$x, 2))] + -- ASSIGN |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + order (ASC, $$x) + -- STABLE_SORT [$$x(ASC)] |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + unnest $$x <- range(1, 4) + -- UNNEST |UNPARTITIONED| + empty-tuple-source + -- EMPTY_TUPLE_SOURCE |UNPARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.7.adm new file mode 100644 index 0000000..0fe9557 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/constant_folding/constant_folding.7.adm @@ -0,0 +1,18 @@ +distribute result [$$15] +-- DISTRIBUTE_RESULT |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + project ([$$15]) + -- STREAM_PROJECT |UNPARTITIONED| + assign [$$15] <- [or(TRUE, lt(get-year(current-date()), $$x))] + -- ASSIGN |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + order (ASC, $$x) + -- STABLE_SORT [$$x(ASC)] |UNPARTITIONED| + exchange + -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED| + unnest $$x <- range(1, 4) + -- UNNEST |UNPARTITIONED| + empty-tuple-source + -- EMPTY_TUPLE_SOURCE |UNPARTITIONED| \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.3.adm new file mode 100644 index 0000000..0881670 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.3.adm @@ -0,0 +1,8 @@ +{ "id": 299, "fname": "Julio", "lname": "Iorio", "age": 37 } +{ "id": 514, "fname": "Julio", "lname": "Ruben", "age": 41 } +{ "id": 671, "fname": "Julio", "lname": "Vanpatten", "age": 30 } +{ "id": 741, "fname": "Julio", "lname": "Mattocks", "age": 38 } +{ "id": 881, "fname": "Julio", "lname": "Isa", "age": 38 } +{ "id": 1418, "fname": "Julio", "lname": "Damore", "age": 27 } +{ "id": 1430, "fname": "Julio", "lname": "Barkett", "age": 39 } +{ "id": 8338, "fname": "Julio", "lname": "Bosket", "age": 28 } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.4.adm new file mode 100644 index 0000000..87c7773 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/statement-params/index_01/index_01.4.adm @@ -0,0 +1 @@ +{ "id": 881, "fname": "Julio", "lname": "Isa", "age": 38 } \ 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 63773dd..51ac565 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -8725,6 +8725,11 @@ </test-group> <test-group name="statement-params"> <test-case FilePath="statement-params"> + <compilation-unit name="index_01"> + <output-dir compare="Text">index_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="statement-params"> <compilation-unit name="mixed_01"> <output-dir compare="Text">mixed_01</output-dir> </compilation-unit>
