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 df73054f93fa80f4a400bc671497baab26dff010 Author: Dmitry Lychagin <dmitry.lycha...@couchbase.com> AuthorDate: Fri Feb 5 15:58:19 2021 -0800 [ASTERIXDB-2828][COMP] Error with GROUP BY ROLLUP and WITH - user model changes: no - storage format changes: no - interface changes: no Details: - Fix internal error when WITH clause is used with GROUP BY ROLLUP - Additional testcases for grouping sets Change-Id: Ieb38a50a42f27d74a90d0f848664d4c7549658b0 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9845 Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Dmitry Lychagin <dmitry.lycha...@couchbase.com> Reviewed-by: Ali Alsuliman <ali.al.solai...@gmail.com> --- .../grouping-sets-1/grouping-sets-1.16.query.sqlpp | 25 ++ .../grouping-sets-1/grouping-sets-1.17.query.sqlpp | 35 +++ .../grouping-sets-1/grouping-sets-1.18.query.sqlpp | 27 ++ .../grouping-sets-1/grouping-sets-1.19.query.sqlpp | 29 ++ .../grouping-sets-1/grouping-sets-1.16.adm | 7 + .../grouping-sets-1/grouping-sets-1.17.adm | 7 + .../grouping-sets-1/grouping-sets-1.18.adm | 7 + .../grouping-sets-1/grouping-sets-1.19.adm | 7 + .../grouping-sets-1/grouping-sets-1.16.ast | 156 ++++++++++ .../grouping-sets-1/grouping-sets-1.17.ast | 342 +++++++++++++++++++++ .../grouping-sets-1/grouping-sets-1.18.ast | 193 ++++++++++++ .../grouping-sets-1/grouping-sets-1.19.ast | 208 +++++++++++++ .../rules/subplan/PushSubplanIntoGroupByRule.java | 5 +- 13 files changed, 1047 insertions(+), 1 deletion(-) diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.query.sqlpp new file mode 100644 index 0000000..eb3ffc3 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.query.sqlpp @@ -0,0 +1,25 @@ +/* + * 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. + */ + +use test; + +select two, four, array_sum((select value gi.tenk.ten from g as gi)) as agg_sum +from tenk +group by rollup(two,four) group as g +order by two, four; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.query.sqlpp new file mode 100644 index 0000000..388a9f5 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.query.sqlpp @@ -0,0 +1,35 @@ +/* + * 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. + */ + +use test; + +select two, four, sum(ten) as agg_sum +from ( + select two, four, ten + from tenk + where hundred < 20 + + union all + + select two, four, ten + from tenk + where hundred >= 80 +) x +group by rollup(two,four) group as g +order by two, four; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.query.sqlpp new file mode 100644 index 0000000..4ffb15d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.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. + */ + +use test; + +select two, two + four as two_plus_four, + grouping(two) as grp_two, grouping(two + four) as grp_two_plus_four, + sum(ten) as agg_sum +from tenk +group by rollup(two, two + four) +order by two, two_plus_four; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.query.sqlpp new file mode 100644 index 0000000..3792030 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.query.sqlpp @@ -0,0 +1,29 @@ +/* + * 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. + */ + +use test; + +with total_sum as ( + select value sum(ten) from tenk +)[0] + +select two, four, sum(ten) as agg_sum, total_sum +from tenk +group by rollup(two, four) +order by two, four; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.16.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.16.adm new file mode 100644 index 0000000..13bcff2 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.16.adm @@ -0,0 +1,7 @@ +{ "two": null, "four": null, "agg_sum": 45000 } +{ "two": 0, "four": null, "agg_sum": 20000 } +{ "two": 0, "four": 0, "agg_sum": 10000 } +{ "two": 0, "four": 2, "agg_sum": 10000 } +{ "two": 1, "four": null, "agg_sum": 25000 } +{ "two": 1, "four": 1, "agg_sum": 12500 } +{ "two": 1, "four": 3, "agg_sum": 12500 } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.17.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.17.adm new file mode 100644 index 0000000..d6f49a5 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.17.adm @@ -0,0 +1,7 @@ +{ "two": null, "four": null, "agg_sum": 18000 } +{ "two": 0, "four": null, "agg_sum": 8000 } +{ "two": 0, "four": 0, "agg_sum": 4000 } +{ "two": 0, "four": 2, "agg_sum": 4000 } +{ "two": 1, "four": null, "agg_sum": 10000 } +{ "two": 1, "four": 1, "agg_sum": 5000 } +{ "two": 1, "four": 3, "agg_sum": 5000 } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.18.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.18.adm new file mode 100644 index 0000000..4ff4ee6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.18.adm @@ -0,0 +1,7 @@ +{ "two": null, "two_plus_four": null, "grp_two": 1, "grp_two_plus_four": 1, "agg_sum": 45000 } +{ "two": 0, "two_plus_four": null, "grp_two": 0, "grp_two_plus_four": 1, "agg_sum": 20000 } +{ "two": 0, "two_plus_four": 0, "grp_two": 0, "grp_two_plus_four": 0, "agg_sum": 10000 } +{ "two": 0, "two_plus_four": 2, "grp_two": 0, "grp_two_plus_four": 0, "agg_sum": 10000 } +{ "two": 1, "two_plus_four": null, "grp_two": 0, "grp_two_plus_four": 1, "agg_sum": 25000 } +{ "two": 1, "two_plus_four": 2, "grp_two": 0, "grp_two_plus_four": 0, "agg_sum": 12500 } +{ "two": 1, "two_plus_four": 4, "grp_two": 0, "grp_two_plus_four": 0, "agg_sum": 12500 } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.19.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.19.adm new file mode 100644 index 0000000..e143f9a --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/grouping-sets-1/grouping-sets-1.19.adm @@ -0,0 +1,7 @@ +{ "two": null, "four": null, "agg_sum": 45000, "total_sum": 45000 } +{ "two": 0, "four": null, "agg_sum": 20000, "total_sum": 45000 } +{ "two": 0, "four": 0, "agg_sum": 10000, "total_sum": 45000 } +{ "two": 0, "four": 2, "agg_sum": 10000, "total_sum": 45000 } +{ "two": 1, "four": null, "agg_sum": 25000, "total_sum": 45000 } +{ "two": 1, "four": 1, "agg_sum": 12500, "total_sum": 45000 } +{ "two": 1, "four": 3, "agg_sum": 12500, "total_sum": 45000 } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.ast new file mode 100644 index 0000000..7c286b7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.16.ast @@ -0,0 +1,156 @@ +DataverseUse test +Query: +SELECT ELEMENT [ +Variable [ Name=#1 ] +] +FROM [ ( + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=$gi ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=$gi ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + Variable [ Name=$four ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + GROUP AS Variable [ Name=$g ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=$gi ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=$gi ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + DECOR + Variable [ Name=$four ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=$g ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=$gi ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=$gi ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + GROUPING SET ( + ) + DECOR + Variable [ Name=$two ] + := + LiteralExpr [NULL] + Variable [ Name=$four ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=$g ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + ) + AS Variable [ Name=#1 ] +] +Orderby + FieldAccessor [ + Variable [ Name=#1 ] + Field=two + ] + ASC + FieldAccessor [ + Variable [ Name=#1 ] + Field=four + ] + ASC + diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.ast new file mode 100644 index 0000000..8f1f1de --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.17.ast @@ -0,0 +1,342 @@ +DataverseUse test +Query: +SELECT ELEMENT [ +Variable [ Name=#1 ] +] +FROM [ ( + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#2 ] + Field=x + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=#2 ] + ] + ) + ] + agg_sum + ] + FROM [ ( + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + < + LiteralExpr [LONG] [20] + ] + UNION + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + >= + LiteralExpr [LONG] [80] + ] + ) + AS Variable [ Name=$x ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$x ] + Field=two + ] + Variable [ Name=$four ] + := + FieldAccessor [ + Variable [ Name=$x ] + Field=four + ] + GROUP AS Variable [ Name=$g ] + ( + x:=Variable [ Name=$x ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#3 ] + Field=x + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=#3 ] + ] + ) + ] + agg_sum + ] + FROM [ ( + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + < + LiteralExpr [LONG] [20] + ] + UNION + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + >= + LiteralExpr [LONG] [80] + ] + ) + AS Variable [ Name=$x ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$x ] + Field=two + ] + DECOR + Variable [ Name=$four ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=$g ] + ( + x:=Variable [ Name=$x ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#4 ] + Field=x + ] + Field=ten + ] + ] + FROM [ Variable [ Name=$g ] + AS Variable [ Name=#4 ] + ] + ) + ] + agg_sum + ] + FROM [ ( + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + < + LiteralExpr [LONG] [20] + ] + UNION + SELECT [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + two + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + four + FieldAccessor [ + Variable [ Name=$tenk ] + Field=ten + ] + ten + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Where + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=hundred + ] + >= + LiteralExpr [LONG] [80] + ] + ) + AS Variable [ Name=$x ] + ] + Groupby + GROUPING SET ( + ) + DECOR + Variable [ Name=$two ] + := + LiteralExpr [NULL] + Variable [ Name=$four ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=$g ] + ( + x:=Variable [ Name=$x ] + ) + + ) + AS Variable [ Name=#1 ] +] +Orderby + FieldAccessor [ + Variable [ Name=#1 ] + Field=two + ] + ASC + FieldAccessor [ + Variable [ Name=#1 ] + Field=four + ] + ASC + diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.ast new file mode 100644 index 0000000..26adc91 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.18.ast @@ -0,0 +1,193 @@ +DataverseUse test +Query: +SELECT ELEMENT [ +Variable [ Name=#5 ] +] +FROM [ ( + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=#1 ] + two_plus_four + Variable [ Name=#3 ] + grp_two + Variable [ Name=#4 ] + grp_two_plus_four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#6 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#6 ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + Variable [ Name=#1 ] + := + OperatorExpr [ + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + + + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + ] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + Let Variable [ Name=#3 ] + := + LiteralExpr [LONG] [0] + Let Variable [ Name=#4 ] + := + LiteralExpr [LONG] [0] + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=#1 ] + two_plus_four + Variable [ Name=#3 ] + grp_two + Variable [ Name=#4 ] + grp_two_plus_four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#7 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#7 ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + DECOR + Variable [ Name=#1 ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + Let Variable [ Name=#3 ] + := + LiteralExpr [LONG] [0] + Let Variable [ Name=#4 ] + := + LiteralExpr [LONG] [1] + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=#1 ] + two_plus_four + Variable [ Name=#3 ] + grp_two + Variable [ Name=#4 ] + grp_two_plus_four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#8 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#8 ] + ] + ) + ] + agg_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + GROUPING SET ( + ) + DECOR + Variable [ Name=$two ] + := + LiteralExpr [NULL] + Variable [ Name=#1 ] + := + LiteralExpr [NULL] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + Let Variable [ Name=#3 ] + := + LiteralExpr [LONG] [1] + Let Variable [ Name=#4 ] + := + LiteralExpr [LONG] [1] + ) + AS Variable [ Name=#5 ] +] +Orderby + FieldAccessor [ + Variable [ Name=#5 ] + Field=two + ] + ASC + FieldAccessor [ + Variable [ Name=#5 ] + Field=two_plus_four + ] + ASC + diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.ast new file mode 100644 index 0000000..8112b6f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/group-by/grouping-sets-1/grouping-sets-1.19.ast @@ -0,0 +1,208 @@ +DataverseUse test +Query: +Let Variable [ Name=$total_sum ] + := + IndexAccessor [ + ( + SELECT ELEMENT [ + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#4 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#1 ] + AS Variable [ Name=#4 ] + ] + ) + ] + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Group All + GROUP AS Variable [ Name=#1 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + ) + Index: LiteralExpr [LONG] [0] + ] +SELECT ELEMENT [ +Variable [ Name=#3 ] +] +FROM [ ( + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#5 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#5 ] + ] + ) + ] + agg_sum + Variable [ Name=$total_sum ] + total_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + Variable [ Name=$four ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=four + ] + DECOR + Variable [ Name=$total_sum ] + := + Variable [ Name=$total_sum ] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#6 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#6 ] + ] + ) + ] + agg_sum + Variable [ Name=$total_sum ] + total_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + Variable [ Name=$two ] + := + FieldAccessor [ + Variable [ Name=$tenk ] + Field=two + ] + DECOR + Variable [ Name=$four ] + := + LiteralExpr [NULL] + Variable [ Name=$total_sum ] + := + Variable [ Name=$total_sum ] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + UNION + SELECT [ + Variable [ Name=$two ] + two + Variable [ Name=$four ] + four + FunctionCall asterix.sql-sum@1[ + ( + SELECT ELEMENT [ + FieldAccessor [ + FieldAccessor [ + Variable [ Name=#7 ] + Field=tenk + ] + Field=ten + ] + ] + FROM [ Variable [ Name=#2 ] + AS Variable [ Name=#7 ] + ] + ) + ] + agg_sum + Variable [ Name=$total_sum ] + total_sum + ] + FROM [ FunctionCall asterix.dataset@1[ + LiteralExpr [STRING] [test.tenk] + ] + AS Variable [ Name=$tenk ] + ] + Groupby + GROUPING SET ( + ) + DECOR + Variable [ Name=$two ] + := + LiteralExpr [NULL] + Variable [ Name=$four ] + := + LiteralExpr [NULL] + Variable [ Name=$total_sum ] + := + Variable [ Name=$total_sum ] + GROUP AS Variable [ Name=#2 ] + ( + tenk:=Variable [ Name=$tenk ] + ) + + ) + AS Variable [ Name=#3 ] +] +Orderby + FieldAccessor [ + Variable [ Name=#3 ] + Field=two + ] + ASC + FieldAccessor [ + Variable [ Name=#3 ] + Field=four + ] + ASC + diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java index 4113dbd..e859596 100644 --- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java +++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java @@ -166,7 +166,10 @@ public class PushSubplanIntoGroupByRule implements IAlgebraicRewriteRule { loop_dest_op_nested_plans: for (ILogicalPlan originalDestOpNestedPlan : destOp.getNestedPlans()) { for (Mutable<ILogicalOperator> originalDestOpNestedPlanRootRef : originalDestOpNestedPlan .getRoots()) { - if (downToNts(originalDestOpNestedPlanRootRef) == null) { + boolean nestedPlanShapeOk = originalDestOpNestedPlanRootRef.getValue() + .getOperatorTag() == LogicalOperatorTag.AGGREGATE + && downToNts(originalDestOpNestedPlanRootRef) != null; + if (!nestedPlanShapeOk) { continue; }