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;
                             }
 

Reply via email to