[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 <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
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..e8595962 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 @@
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;
}