You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by al...@apache.org on 2019/08/13 00:37:20 UTC

[asterixdb] branch master updated: [ASTERIXDB-2611][*DB] Fix GroupAll with empty input

This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 45b31ce  [ASTERIXDB-2611][*DB] Fix GroupAll with empty input
45b31ce is described below

commit 45b31ce84c8a5dfda2664c97529710887db8df19
Author: Ali Alsuliman <al...@gmail.com>
AuthorDate: Sun Aug 11 23:51:31 2019 -0700

    [ASTERIXDB-2611][*DB] Fix GroupAll with empty input
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    This patch is to fix the issue with group by all where
    some partitions are empty. The patch in general handles
    propagating outer scope variables through group by all by using
    subplans instead of using decor variables when translating
    the AST.
    
    - changed IsomorphismVariableMappingVisitor to stop re-visiting
      the same nested tuple operator pair again
    - moved getFdColumns() up in hierarchy to be shared by others
    - added a check to prevent group-all with decoration fields
    
    Change-Id: I56916fc60c696f6c702717210f108f2247b2a397
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3521
    Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
---
 .../SqlppExpressionToPlanTranslator.java           |  32 ++-
 .../results/aggregate/query-ASTERIXDB-1626-3.plan  |  31 +--
 .../tpcds/query-ASTERIXDB-1581-correlated.plan     |  28 +-
 .../results/tpcds/query-ASTERIXDB-1581.plan        | 308 +++++++++++----------
 .../group-by-all-ASTERIXDB-2611.01.ddl.sqlpp       |  32 +++
 .../group-by-all-ASTERIXDB-2611.02.update.sqlpp    |  18 ++
 .../group-by-all-ASTERIXDB-2611.03.query.sqlpp     |  26 ++
 .../group-by-all-ASTERIXDB-2611.04.query.sqlpp     |  26 ++
 .../group-by-all-ASTERIXDB-2611.05.query.sqlpp     |  27 ++
 .../group-by-all-ASTERIXDB-2611.06.query.sqlpp     |  27 ++
 .../group-by-all-ASTERIXDB-2611.07.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.08.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.09.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.10.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.11.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.12.query.sqlpp     |  29 ++
 .../group-by-all-ASTERIXDB-2611.13.ddl.sqlpp       |  20 ++
 .../group-by-all-ASTERIXDB-2611.03.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.04.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.05.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.06.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.07.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.08.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.09.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.10.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.11.adm             |   1 +
 .../group-by-all-ASTERIXDB-2611.12.adm             |   1 +
 .../test/resources/runtimets/testsuite_sqlpp.xml   |   5 +
 .../SqlppGroupByAggregationSugarVisitor.java       |  49 ++--
 .../IsomorphismVariableMappingVisitor.java         |  46 +--
 .../physical/AbstractGroupByPOperator.java         |  35 ++-
 .../AbstractPreclusteredGroupByPOperator.java      |  17 --
 .../physical/ExternalGroupByPOperator.java         |  19 +-
 .../MicroPreclusteredGroupByPOperator.java         |   8 +-
 .../physical/PreclusteredGroupByPOperator.java     |   3 +-
 .../operators/physical/SortGroupByPOperator.java   |  18 +-
 .../apache/hyracks/api/exceptions/ErrorCode.java   |   1 +
 .../src/main/resources/errormsg/en.properties      |   1 +
 38 files changed, 684 insertions(+), 277 deletions(-)

diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 988723f..7d7e7fe 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -253,6 +253,31 @@ public class SqlppExpressionToPlanTranslator extends LangExpressionToPlanTransla
     public Pair<ILogicalOperator, LogicalVariable> visit(SelectBlock selectBlock, Mutable<ILogicalOperator> tupSource)
             throws CompilationException {
         Mutable<ILogicalOperator> currentOpRef = tupSource;
+        if (selectBlock.hasGroupbyClause() && selectBlock.getGroupbyClause().isGroupAll()) {
+            // Creates a subplan operator.
+            SourceLocation sourceLoc = selectBlock.getSourceLocation();
+            SubplanOperator subplanOp = new SubplanOperator();
+            subplanOp.getInputs().add(currentOpRef);
+            subplanOp.setSourceLocation(sourceLoc);
+            NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(subplanOp));
+            ntsOp.setSourceLocation(sourceLoc);
+            Mutable<ILogicalOperator> subplanCurrentOpRef = new MutableObject<>(ntsOp);
+            subplanCurrentOpRef = translateFromLetWhereGroupBy(selectBlock, subplanCurrentOpRef);
+            subplanOp.getNestedPlans().add(new ALogicalPlanImpl(subplanCurrentOpRef));
+            currentOpRef = new MutableObject<>(subplanOp);
+        } else {
+            currentOpRef = translateFromLetWhereGroupBy(selectBlock, currentOpRef);
+        }
+        if (selectBlock.hasLetHavingClausesAfterGroupby()) {
+            for (AbstractClause letHavingClause : selectBlock.getLetHavingListAfterGroupby()) {
+                currentOpRef = new MutableObject<>(letHavingClause.accept(this, currentOpRef).first);
+            }
+        }
+        return processSelectClause(selectBlock, currentOpRef);
+    }
+
+    private Mutable<ILogicalOperator> translateFromLetWhereGroupBy(SelectBlock selectBlock,
+            Mutable<ILogicalOperator> currentOpRef) throws CompilationException {
         if (selectBlock.hasFromClause()) {
             currentOpRef = new MutableObject<>(selectBlock.getFromClause().accept(this, currentOpRef).first);
         }
@@ -264,12 +289,7 @@ public class SqlppExpressionToPlanTranslator extends LangExpressionToPlanTransla
         if (selectBlock.hasGroupbyClause()) {
             currentOpRef = new MutableObject<>(selectBlock.getGroupbyClause().accept(this, currentOpRef).first);
         }
-        if (selectBlock.hasLetHavingClausesAfterGroupby()) {
-            for (AbstractClause letHavingClause : selectBlock.getLetHavingListAfterGroupby()) {
-                currentOpRef = new MutableObject<>(letHavingClause.accept(this, currentOpRef).first);
-            }
-        }
-        return processSelectClause(selectBlock, currentOpRef);
+        return currentOpRef;
     }
 
     @Override
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/query-ASTERIXDB-1626-3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/query-ASTERIXDB-1626-3.plan
index b5c2be0..4eeea2f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/query-ASTERIXDB-1626-3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/query-ASTERIXDB-1626-3.plan
@@ -2,23 +2,14 @@
   -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
     -- STREAM_PROJECT  |UNPARTITIONED|
       -- ASSIGN  |UNPARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY(ALL)[]  |UNPARTITIONED|
-                  {
-                    -- AGGREGATE  |LOCAL|
-                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-              -- PRE_CLUSTERED_GROUP_BY(ALL)[]  |PARTITIONED|
-                      {
-                        -- AGGREGATE  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                      }
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ASSIGN  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+        -- AGGREGATE  |UNPARTITIONED|
+          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+            -- AGGREGATE  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- DATASOURCE_SCAN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
index 070af18..2eaaf05 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
@@ -69,7 +69,7 @@
                                                                         -- ASSIGN  |PARTITIONED|
                                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                             -- REPLICATE  |PARTITIONED|
-                                                                              -- HASH_PARTITION_EXCHANGE [$$187]  |PARTITIONED|
+                                                                              -- HASH_PARTITION_EXCHANGE [$$185]  |PARTITIONED|
                                                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                                                   -- ASSIGN  |PARTITIONED|
                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -84,7 +84,7 @@
                                                 -- ASSIGN  |PARTITIONED|
                                                   -- STREAM_PROJECT  |PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- HYBRID_HASH_JOIN [$$144][$$143]  |PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN [$$143][$$142]  |PARTITIONED|
                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                           -- STREAM_PROJECT  |PARTITIONED|
                                                             -- ASSIGN  |PARTITIONED|
@@ -96,7 +96,7 @@
                                                                         -- STREAM_PROJECT  |PARTITIONED|
                                                                           -- STREAM_SELECT  |PARTITIONED|
                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              -- PRE_CLUSTERED_GROUP_BY[$$186]  |PARTITIONED|
+                                                                              -- PRE_CLUSTERED_GROUP_BY[$$184]  |PARTITIONED|
                                                                                       {
                                                                                         -- AGGREGATE  |LOCAL|
                                                                                           -- AGGREGATE  |LOCAL|
@@ -106,7 +106,7 @@
                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                   -- STREAM_PROJECT  |PARTITIONED|
                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                      -- HYBRID_HASH_JOIN [$$186][$$187]  |PARTITIONED|
+                                                                                      -- HYBRID_HASH_JOIN [$$184][$$185]  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                           -- REPLICATE  |PARTITIONED|
                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -116,7 +116,7 @@
                                                                                                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                           -- REPLICATE  |PARTITIONED|
-                                                                                            -- HASH_PARTITION_EXCHANGE [$$187]  |PARTITIONED|
+                                                                                            -- HASH_PARTITION_EXCHANGE [$$185]  |PARTITIONED|
                                                                                               -- STREAM_PROJECT  |PARTITIONED|
                                                                                                 -- ASSIGN  |PARTITIONED|
                                                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -127,7 +127,7 @@
                                                                                                             -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- HASH_PARTITION_EXCHANGE [$$143]  |PARTITIONED|
+                                                        -- HASH_PARTITION_EXCHANGE [$$142]  |PARTITIONED|
                                                           -- STREAM_PROJECT  |PARTITIONED|
                                                             -- ASSIGN  |PARTITIONED|
                                                               -- STREAM_PROJECT  |PARTITIONED|
@@ -144,8 +144,8 @@
                                 -- ASSIGN  |PARTITIONED|
                                   -- STREAM_PROJECT  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- HYBRID_HASH_JOIN [$$146][$$145]  |PARTITIONED|
-                                        -- HASH_PARTITION_EXCHANGE [$$146]  |PARTITIONED|
+                                      -- HYBRID_HASH_JOIN [$$145][$$144]  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$145]  |PARTITIONED|
                                           -- PRE_CLUSTERED_GROUP_BY[$$164]  |PARTITIONED|
                                                   {
                                                     -- AGGREGATE  |LOCAL|
@@ -194,7 +194,7 @@
                                                                                       -- ASSIGN  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                           -- REPLICATE  |PARTITIONED|
-                                                                                            -- HASH_PARTITION_EXCHANGE [$$187]  |PARTITIONED|
+                                                                                            -- HASH_PARTITION_EXCHANGE [$$185]  |PARTITIONED|
                                                                                               -- STREAM_PROJECT  |PARTITIONED|
                                                                                                 -- ASSIGN  |PARTITIONED|
                                                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -218,7 +218,7 @@
                                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                                               -- STREAM_SELECT  |PARTITIONED|
                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                  -- PRE_CLUSTERED_GROUP_BY[$$186]  |PARTITIONED|
+                                                                                  -- PRE_CLUSTERED_GROUP_BY[$$184]  |PARTITIONED|
                                                                                           {
                                                                                             -- AGGREGATE  |LOCAL|
                                                                                               -- AGGREGATE  |LOCAL|
@@ -228,7 +228,7 @@
                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                       -- STREAM_PROJECT  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                          -- HYBRID_HASH_JOIN [$$186][$$187]  |PARTITIONED|
+                                                                                          -- HYBRID_HASH_JOIN [$$184][$$185]  |PARTITIONED|
                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                               -- REPLICATE  |PARTITIONED|
                                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -238,7 +238,7 @@
                                                                                                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                               -- REPLICATE  |PARTITIONED|
-                                                                                                -- HASH_PARTITION_EXCHANGE [$$187]  |PARTITIONED|
+                                                                                                -- HASH_PARTITION_EXCHANGE [$$185]  |PARTITIONED|
                                                                                                   -- STREAM_PROJECT  |PARTITIONED|
                                                                                                     -- ASSIGN  |PARTITIONED|
                                                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -262,7 +262,7 @@
                                                                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                        -- HASH_PARTITION_EXCHANGE [$$145]  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$144]  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|
@@ -274,4 +274,4 @@
                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                             -- DATASOURCE_SCAN  |PARTITIONED|
                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
index 7f894db..80a0089 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
@@ -8,49 +8,45 @@
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- ASSIGN  |PARTITIONED|
                   -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- BROADCAST_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- UNNEST  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- PRE_CLUSTERED_GROUP_BY[$$159]  |PARTITIONED|
+      -- BROADCAST_EXCHANGE  |LOCAL|
+        -- STREAM_PROJECT  |LOCAL|
+          -- ASSIGN  |LOCAL|
+            -- STREAM_PROJECT  |LOCAL|
+              -- UNNEST  |LOCAL|
+                -- STREAM_PROJECT  |LOCAL|
+                  -- ASSIGN  |LOCAL|
+                    -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                      -- PRE_CLUSTERED_GROUP_BY[$$159]  |LOCAL|
                               {
                                 -- AGGREGATE  |LOCAL|
                                   -- AGGREGATE  |LOCAL|
-                                    -- ASSIGN  |LOCAL|
-                                      -- AGGREGATE  |LOCAL|
-                                        -- STREAM_SELECT  |LOCAL|
-                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                    -- STREAM_SELECT  |LOCAL|
+                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
                               }
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- HYBRID_HASH_JOIN [$$159][$$160]  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- PRE_CLUSTERED_GROUP_BY[$$95]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                          -- STREAM_PROJECT  |LOCAL|
+                            -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                              -- HYBRID_HASH_JOIN [$$159][$$160]  |LOCAL|
+                                -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                  -- PRE_CLUSTERED_GROUP_BY[$$95]  |LOCAL|
                                           {
                                             -- AGGREGATE  |LOCAL|
                                               -- AGGREGATE  |LOCAL|
-                                                -- ASSIGN  |LOCAL|
-                                                  -- AGGREGATE  |LOCAL|
-                                                    -- STREAM_SELECT  |LOCAL|
-                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                -- STREAM_SELECT  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- STABLE_SORT [$$95(ASC)]  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- STREAM_PROJECT  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- HYBRID_HASH_JOIN [$$95][$$152]  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                    -- ASSIGN  |PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                        -- REPLICATE  |PARTITIONED|
-                                                          -- HASH_PARTITION_EXCHANGE [$$161]  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                      -- STABLE_SORT [$$95(ASC)]  |LOCAL|
+                                        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                          -- STREAM_PROJECT  |UNPARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                              -- HYBRID_HASH_JOIN [$$95][$$152]  |UNPARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                  -- STREAM_PROJECT  |UNPARTITIONED|
+                                                    -- ASSIGN  |UNPARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                        -- REPLICATE  |UNPARTITIONED|
+                                                          -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                                                             -- STREAM_PROJECT  |UNPARTITIONED|
                                                               -- ASSIGN  |UNPARTITIONED|
                                                                 -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
@@ -63,116 +59,146 @@
                                                                               -- STREAM_SELECT  |PARTITIONED|
                                                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                                                   -- ASSIGN  |PARTITIONED|
+                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                  -- NESTED_LOOP  |UNPARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                      -- STREAM_PROJECT  |UNPARTITIONED|
+                                                        -- ASSIGN  |UNPARTITIONED|
+                                                          -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                            -- REPLICATE  |UNPARTITIONED|
+                                                              -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                -- ASSIGN  |UNPARTITIONED|
+                                                                  -- STREAM_SELECT  |UNPARTITIONED|
+                                                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                      -- REPLICATE  |UNPARTITIONED|
+                                                                        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                          -- AGGREGATE  |UNPARTITIONED|
+                                                                            -- AGGREGATE  |UNPARTITIONED|
+                                                                              -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                                                                -- AGGREGATE  |PARTITIONED|
+                                                                                  -- STREAM_SELECT  |PARTITIONED|
                                                                                     -- STREAM_PROJECT  |PARTITIONED|
-                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE [$$152]  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
+                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                          -- REPLICATE  |PARTITIONED|
+                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                      -- STREAM_PROJECT  |UNPARTITIONED|
+                                                        -- ASSIGN  |UNPARTITIONED|
+                                                          -- AGGREGATE  |UNPARTITIONED|
+                                                            -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                                              -- AGGREGATE  |PARTITIONED|
+                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                  -- STREAM_SELECT  |PARTITIONED|
+                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                      -- ASSIGN  |PARTITIONED|
+                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                          -- ASSIGN  |PARTITIONED|
+                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                  -- NESTED_LOOP  |LOCAL|
+                                    -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                      -- ASSIGN  |LOCAL|
+                                        -- STREAM_PROJECT  |LOCAL|
+                                          -- STREAM_SELECT  |LOCAL|
+                                            -- ASSIGN  |LOCAL|
+                                              -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                                -- PRE_CLUSTERED_GROUP_BY[$$161]  |LOCAL|
+                                                        {
+                                                          -- AGGREGATE  |LOCAL|
+                                                            -- AGGREGATE  |LOCAL|
+                                                              -- STREAM_SELECT  |LOCAL|
+                                                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                        }
+                                                  -- ONE_TO_ONE_EXCHANGE  |LOCAL|
+                                                    -- STABLE_SORT [$$161(ASC)]  |LOCAL|
+                                                      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                        -- STREAM_PROJECT  |UNPARTITIONED|
+                                                          -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                            -- HYBRID_HASH_JOIN [$$161][$$162]  |UNPARTITIONED|
+                                                              -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                -- REPLICATE  |UNPARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                    -- STREAM_PROJECT  |UNPARTITIONED|
+                                                                      -- ASSIGN  |UNPARTITIONED|
+                                                                        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                          -- REPLICATE  |UNPARTITIONED|
+                                                                            -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                              -- AGGREGATE  |UNPARTITIONED|
+                                                                                -- AGGREGATE  |UNPARTITIONED|
+                                                                                  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                                                                    -- AGGREGATE  |PARTITIONED|
+                                                                                      -- STREAM_SELECT  |PARTITIONED|
+                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                              -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                -- REPLICATE  |UNPARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                    -- ASSIGN  |UNPARTITIONED|
+                                                                      -- STREAM_SELECT  |UNPARTITIONED|
+                                                                        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                          -- REPLICATE  |UNPARTITIONED|
+                                                                            -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                              -- AGGREGATE  |UNPARTITIONED|
+                                                                                -- AGGREGATE  |UNPARTITIONED|
+                                                                                  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                                                                    -- AGGREGATE  |PARTITIONED|
+                                                                                      -- STREAM_SELECT  |PARTITIONED|
+                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                      -- STREAM_PROJECT  |UNPARTITIONED|
+                                        -- ASSIGN  |UNPARTITIONED|
+                                          -- AGGREGATE  |UNPARTITIONED|
+                                            -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                              -- AGGREGATE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- STREAM_SELECT  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- STREAM_SELECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
                                                         -- STREAM_PROJECT  |PARTITIONED|
                                                           -- ASSIGN  |PARTITIONED|
-                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                              -- ASSIGN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- REPLICATE  |PARTITIONED|
                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- REPLICATE  |PARTITIONED|
+                                                                  -- STREAM_PROJECT  |PARTITIONED|
                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                      -- DATASOURCE_SCAN  |PARTITIONED|
                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                            -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                              -- STREAM_SELECT  |UNPARTITIONED|
-                                                                                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                  -- REPLICATE  |UNPARTITIONED|
-                                                                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                      -- AGGREGATE  |UNPARTITIONED|
-                                                                                        -- AGGREGATE  |UNPARTITIONED|
-                                                                                          -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-                                                                                            -- AGGREGATE  |PARTITIONED|
-                                                                                              -- STREAM_SELECT  |PARTITIONED|
-                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                -- HASH_PARTITION_EXCHANGE [$$160]  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- STREAM_SELECT  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- STREAM_SELECT  |PARTITIONED|
-                                                        -- ASSIGN  |PARTITIONED|
-                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- PRE_CLUSTERED_GROUP_BY[$$161]  |PARTITIONED|
-                                                                    {
-                                                                      -- AGGREGATE  |LOCAL|
-                                                                        -- AGGREGATE  |LOCAL|
-                                                                          -- AGGREGATE  |LOCAL|
-                                                                            -- STREAM_SELECT  |LOCAL|
-                                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                    }
-                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- STABLE_SORT [$$161(ASC)]  |PARTITIONED|
-                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- HYBRID_HASH_JOIN [$$161][$$162]  |PARTITIONED|
-                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- REPLICATE  |PARTITIONED|
-                                                                              -- HASH_PARTITION_EXCHANGE [$$161]  |PARTITIONED|
-                                                                                -- STREAM_PROJECT  |UNPARTITIONED|
-                                                                                  -- ASSIGN  |UNPARTITIONED|
-                                                                                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                      -- REPLICATE  |UNPARTITIONED|
-                                                                                        -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                          -- AGGREGATE  |UNPARTITIONED|
-                                                                                            -- AGGREGATE  |UNPARTITIONED|
-                                                                                              -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-                                                                                                -- AGGREGATE  |PARTITIONED|
-                                                                                                  -- STREAM_SELECT  |PARTITIONED|
-                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                      -- ASSIGN  |PARTITIONED|
-                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                            -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                          -- HASH_PARTITION_EXCHANGE [$$162]  |PARTITIONED|
-                                                                            -- ASSIGN  |PARTITIONED|
-                                                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                                                -- STREAM_SELECT  |PARTITIONED|
-                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                        -- REPLICATE  |PARTITIONED|
-                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                                                    -- STREAM_SELECT  |UNPARTITIONED|
-                                                                                                      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                                        -- REPLICATE  |UNPARTITIONED|
-                                                                                                          -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                                                            -- AGGREGATE  |UNPARTITIONED|
-                                                                                                              -- AGGREGATE  |UNPARTITIONED|
-                                                                                                                -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-                                                                                                                  -- AGGREGATE  |PARTITIONED|
-                                                                                                                    -- STREAM_SELECT  |PARTITIONED|
-                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                        -- ASSIGN  |PARTITIONED|
-                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.01.ddl.sqlpp
new file mode 100644
index 0000000..3ae1e0f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.01.ddl.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * 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 that variables live after group-by all are properly propagated instead of using decor variables
+ * Expected     : SUCCESS
+ */
+
+drop dataverse TinySocial if exists;
+create dataverse TinySocial;
+
+use TinySocial;
+
+create type FacebookUserType as open { id : bigint };
+create  dataset FacebookUsers(FacebookUserType) primary key id;
+create  dataset GB(FacebookUserType) primary key id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.02.update.sqlpp
new file mode 100644
index 0000000..7220975
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.02.update.sqlpp
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.query.sqlpp
new file mode 100644
index 0000000..93e907b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.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.
+ */
+
+use TinySocial;
+
+SET inline_with "true";
+
+WITH t AS 1
+SELECT count(`friend-ids`), t
+FROM  FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.query.sqlpp
new file mode 100644
index 0000000..469f152
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.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.
+ */
+
+use TinySocial;
+
+SET inline_with "false";
+
+WITH t AS 1
+SELECT count(`friend-ids`), t
+FROM  FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.query.sqlpp
new file mode 100644
index 0000000..32fefd1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.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 TinySocial;
+
+SET inline_with "false";
+
+WITH t AS 1
+SELECT count(`friend-ids`), t
+FROM  FacebookUsers
+where id = t;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.query.sqlpp
new file mode 100644
index 0000000..37be7ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.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 TinySocial;
+
+SET inline_with "true";
+
+WITH t AS 1
+SELECT count(`friend-ids`), t
+FROM  FacebookUsers
+where id = t;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.query.sqlpp
new file mode 100644
index 0000000..0a6881c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.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 TinySocial;
+
+SET inline_with "true";
+
+WITH avgFriendCount AS (
+  SELECT VALUE AVG(ARRAY_COUNT(user.friendIds))
+  FROM GB AS user
+)
+SELECT count(`friend-ids`), avgFriendCount
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.query.sqlpp
new file mode 100644
index 0000000..59ee07d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.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 TinySocial;
+
+SET inline_with "false";
+
+WITH avgFriendCount AS (
+  SELECT VALUE AVG(ARRAY_COUNT(user.friendIds))
+  FROM GB AS user
+)
+SELECT count(`friend-ids`), avgFriendCount
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.query.sqlpp
new file mode 100644
index 0000000..80a011a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.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 TinySocial;
+
+SET inline_with "false";
+
+WITH avgFriendCount AS (
+  SELECT COUNT(user.friendIds)
+  FROM GB AS user
+)
+SELECT count(`friend-ids`), avgFriendCount[0]
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.query.sqlpp
new file mode 100644
index 0000000..afc41e4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.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 TinySocial;
+
+SET inline_with "true";
+
+WITH avgFriendCount AS (
+  SELECT COUNT(user.friendIds)
+  FROM GB AS user
+)
+SELECT count(`friend-ids`), avgFriendCount[0]
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.query.sqlpp
new file mode 100644
index 0000000..ce70c60
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.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 TinySocial;
+
+SET inline_with "true";
+
+WITH avgFriendCount AS (
+  SELECT COUNT(user.friendIds)
+  FROM GB AS user
+)[0]
+SELECT count(`friend-ids`), avgFriendCount
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.query.sqlpp
new file mode 100644
index 0000000..5047f3b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.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 TinySocial;
+
+SET inline_with "false";
+
+WITH avgFriendCount AS (
+  SELECT COUNT(user.friendIds)
+  FROM GB AS user
+)[0]
+SELECT count(`friend-ids`), avgFriendCount
+FROM FacebookUsers;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.13.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.13.ddl.sqlpp
new file mode 100644
index 0000000..5c3905f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.13.ddl.sqlpp
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+drop dataverse TinySocial if exists;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.adm
new file mode 100644
index 0000000..be0fad5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.03.adm
@@ -0,0 +1 @@
+{ "$1": 0, "t": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.adm
new file mode 100644
index 0000000..be0fad5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.04.adm
@@ -0,0 +1 @@
+{ "$1": 0, "t": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.adm
new file mode 100644
index 0000000..be0fad5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.05.adm
@@ -0,0 +1 @@
+{ "$1": 0, "t": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.adm
new file mode 100644
index 0000000..be0fad5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.06.adm
@@ -0,0 +1 @@
+{ "$1": 0, "t": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.adm
new file mode 100644
index 0000000..2302b62
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.07.adm
@@ -0,0 +1 @@
+{ "$1": 0, "avgFriendCount": [ null ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.adm
new file mode 100644
index 0000000..2302b62
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.08.adm
@@ -0,0 +1 @@
+{ "$1": 0, "avgFriendCount": [ null ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.adm
new file mode 100644
index 0000000..e127aed
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.09.adm
@@ -0,0 +1 @@
+{ "$2": 0, "$3": { "$1": 0 } }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.adm
new file mode 100644
index 0000000..e127aed
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.10.adm
@@ -0,0 +1 @@
+{ "$2": 0, "$3": { "$1": 0 } }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.adm
new file mode 100644
index 0000000..c6a0808
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.11.adm
@@ -0,0 +1 @@
+{ "$2": 0, "avgFriendCount": { "$1": 0 } }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.adm
new file mode 100644
index 0000000..c6a0808
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/group-by/group-by-all-ASTERIXDB-2611/group-by-all-ASTERIXDB-2611.12.adm
@@ -0,0 +1 @@
+{ "$2": 0, "avgFriendCount": { "$1": 0 } }
\ 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 0724f45..17f4aee 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -5160,6 +5160,11 @@
         <output-dir compare="Text">redundant-var-in-groupby</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="group-by">
+      <compilation-unit name="group-by-all-ASTERIXDB-2611">
+        <output-dir compare="Text">group-by-all-ASTERIXDB-2611</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="index-join">
     <test-case FilePath="index-join">
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
index 935a100..baf3f46 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
@@ -179,32 +179,33 @@ public class SqlppGroupByAggregationSugarVisitor extends AbstractSqlppExpression
             freeVariables.addAll(freeVariablesInGbyLets);
             freeVariables.removeIf(SqlppVariableUtil::isExternalVariableReference);
 
-            // Gets outer scope variables.
-            Collection<VariableExpr> decorVars = scopeChecker.getCurrentScope().getLiveVariables().keySet();
-            decorVars.removeAll(groupByBindingVars);
-
-            // Only retains used free variables.
-            if (!decorVars.containsAll(freeVariables)) {
-                throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, groupbyClause.getSourceLocation(),
-                        decorVars + ":" + freeVariables);
-            }
-            decorVars.retainAll(freeVariables);
-
-            if (!decorVars.isEmpty()) {
-                // Adds necessary decoration variables for the GROUP BY.
-                // NOTE: we need to include outer binding variables so as they can be evaluated before
-                // the GROUP BY instead of being inlined as part of nested pipepline. The current optimzier
-                // is not able to optimize the latter case. The following query is such an example:
-                // asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11
-                List<GbyVariableExpressionPair> decorList = new ArrayList<>();
-                if (groupbyClause.hasDecorList()) {
-                    decorList.addAll(groupbyClause.getDecorPairList());
+            if (!groupbyClause.isGroupAll()) {
+                // Gets outer scope variables.
+                Collection<VariableExpr> decorVars = scopeChecker.getCurrentScope().getLiveVariables().keySet();
+                decorVars.removeAll(groupByBindingVars);
+                // Only retains used free variables.
+                if (!decorVars.containsAll(freeVariables)) {
+                    throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE,
+                            groupbyClause.getSourceLocation(), decorVars + ":" + freeVariables);
                 }
-                for (VariableExpr var : decorVars) {
-                    decorList.add(new GbyVariableExpressionPair((VariableExpr) SqlppRewriteUtil.deepCopy(var),
-                            (Expression) SqlppRewriteUtil.deepCopy(var)));
+                decorVars.retainAll(freeVariables);
+
+                if (!decorVars.isEmpty()) {
+                    // Adds necessary decoration variables for the GROUP BY.
+                    // NOTE: we need to include outer binding variables so as they can be evaluated before
+                    // the GROUP BY instead of being inlined as part of nested pipepline. The current optimzier
+                    // is not able to optimize the latter case. The following query is such an example:
+                    // asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11
+                    List<GbyVariableExpressionPair> decorList = new ArrayList<>();
+                    if (groupbyClause.hasDecorList()) {
+                        decorList.addAll(groupbyClause.getDecorPairList());
+                    }
+                    for (VariableExpr var : decorVars) {
+                        decorList.add(new GbyVariableExpressionPair((VariableExpr) SqlppRewriteUtil.deepCopy(var),
+                                (Expression) SqlppRewriteUtil.deepCopy(var)));
+                    }
+                    groupbyClause.setDecorPairList(decorList);
                 }
-                groupbyClause.setDecorPairList(decorList);
             }
         } else {
             selectBlock.getSelectClause().accept(this, arg);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
index bfeb83f..fe794c8 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
@@ -19,6 +19,7 @@
 package org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -75,9 +76,10 @@ import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisit
 
 public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisitor<Void, ILogicalOperator> {
 
-    private Map<LogicalVariable, LogicalVariable> variableMapping;
+    private final Map<ILogicalOperator, Set<ILogicalOperator>> alreadyMapped = new HashMap<>();
+    private final Map<LogicalVariable, LogicalVariable> variableMapping;
 
-    public IsomorphismVariableMappingVisitor(Map<LogicalVariable, LogicalVariable> variableMapping) {
+    IsomorphismVariableMappingVisitor(Map<LogicalVariable, LogicalVariable> variableMapping) {
         this.variableMapping = variableMapping;
     }
 
@@ -143,6 +145,15 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito
         if (op.getOperatorTag() != arg.getOperatorTag()) {
             return null;
         }
+        Set<ILogicalOperator> mappedOps = alreadyMapped.get(op);
+        if (mappedOps != null && mappedOps.contains(arg)) {
+            return null;
+        }
+        if (mappedOps == null) {
+            mappedOps = new HashSet<>();
+            alreadyMapped.put(op, mappedOps);
+        }
+        mappedOps.add(arg);
         ILogicalOperator inputToCreator1 = op.getSourceOperator();
         NestedTupleSourceOperator nts = (NestedTupleSourceOperator) arg;
         ILogicalOperator inputToCreator2 = nts.getSourceOperator();
@@ -308,6 +319,19 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito
         return null;
     }
 
+    @Override
+    public Void visitDelegateOperator(DelegateOperator op, ILogicalOperator arg) throws AlgebricksException {
+        mapVariablesStandard(op, arg);
+        return null;
+    }
+
+    @Override
+    public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        mapVariablesStandard(op, arg);
+        return null;
+    }
+
     private void mapChildren(ILogicalOperator op, ILogicalOperator opArg) throws AlgebricksException {
         if (op.getOperatorTag() != opArg.getOperatorTag()) {
             return;
@@ -354,8 +378,8 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito
         }
         AbstractAssignOperator leftOp = (AbstractAssignOperator) left;
         AbstractAssignOperator rightOp = (AbstractAssignOperator) right;
-        List<LogicalVariable> producedVarLeft = new ArrayList<LogicalVariable>();
-        List<LogicalVariable> producedVarRight = new ArrayList<LogicalVariable>();
+        List<LogicalVariable> producedVarLeft = new ArrayList<>();
+        List<LogicalVariable> producedVarRight = new ArrayList<>();
         VariableUtilities.getProducedVariables(left, producedVarLeft);
         VariableUtilities.getProducedVariables(right, producedVarRight);
         mapVariablesForAbstractAssign(producedVarLeft, leftOp.getExpressions(), producedVarRight,
@@ -544,18 +568,4 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito
         }
         return variableMapping.get(right).equals(left);
     }
-
-    @Override
-    public Void visitDelegateOperator(DelegateOperator op, ILogicalOperator arg) throws AlgebricksException {
-        mapVariablesStandard(op, arg);
-        return null;
-    }
-
-    @Override
-    public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        mapVariablesStandard(op, arg);
-        return null;
-    }
-
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractGroupByPOperator.java
index 17c60b9..c63351d 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractGroupByPOperator.java
@@ -21,9 +21,18 @@ package org.apache.hyracks.algebricks.core.algebra.operators.physical;
 
 import java.util.List;
 
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
 import org.apache.hyracks.algebricks.core.algebra.properties.LocalMemoryRequirements;
+import org.apache.hyracks.api.exceptions.ErrorCode;
 
 public abstract class AbstractGroupByPOperator extends AbstractPhysicalOperator {
 
@@ -32,14 +41,36 @@ public abstract class AbstractGroupByPOperator extends AbstractPhysicalOperator
 
     protected List<LogicalVariable> columnList;
 
-    protected AbstractGroupByPOperator(List<LogicalVariable> columnList) {
+    AbstractGroupByPOperator(List<LogicalVariable> columnList) {
         this.columnList = columnList;
     }
 
-    public List<LogicalVariable> getGroupByColumns() {
+    List<LogicalVariable> getGroupByColumns() {
         return columnList;
     }
 
+    int[] getFdColumns(GroupByOperator gby, IOperatorSchema inputSchema) throws AlgebricksException {
+        int numFds = gby.getDecorList().size();
+        int fdColumns[] = new int[numFds];
+        int j = 0;
+        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : gby.getDecorList()) {
+            ILogicalExpression expr = p.second.getValue();
+            if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
+                throw AlgebricksException.create(ErrorCode.EXPR_NOT_NORMALIZED, expr.getSourceLocation());
+            }
+            VariableReferenceExpression v = (VariableReferenceExpression) expr;
+            LogicalVariable decor = v.getVariableReference();
+            fdColumns[j++] = inputSchema.findVariable(decor);
+        }
+        return fdColumns;
+    }
+
+    void checkGroupAll(GroupByOperator groupByOp) throws AlgebricksException {
+        if (groupByOp.isGroupAll() && !groupByOp.getDecorList().isEmpty()) {
+            throw AlgebricksException.create(ErrorCode.GROUP_ALL_DECOR, groupByOp.getSourceLocation());
+        }
+    }
+
     public void setGroupByColumns(List<LogicalVariable> columnList) {
         this.columnList = columnList;
     }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractPreclusteredGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractPreclusteredGroupByPOperator.java
index 70f7e2b..d2cc5d9 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractPreclusteredGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractPreclusteredGroupByPOperator.java
@@ -41,7 +41,6 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceE
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.ExecutionMode;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
 import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
 import org.apache.hyracks.algebricks.core.algebra.properties.ILocalStructuralProperty;
 import org.apache.hyracks.algebricks.core.algebra.properties.ILocalStructuralProperty.PropertyType;
@@ -257,22 +256,6 @@ public abstract class AbstractPreclusteredGroupByPOperator extends AbstractGroup
         return null;
     }
 
-    protected int[] getFdColumns(GroupByOperator gby, IOperatorSchema inputSchema) throws AlgebricksException {
-        int numFds = gby.getDecorList().size();
-        int fdColumns[] = new int[numFds];
-        int j = 0;
-        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : gby.getDecorList()) {
-            ILogicalExpression expr = p.second.getValue();
-            if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
-                throw new AlgebricksException("pre-sorted group-by expects variable references.");
-            }
-            VariableReferenceExpression v = (VariableReferenceExpression) expr;
-            LogicalVariable decor = v.getVariableReference();
-            fdColumns[j++] = inputSchema.findVariable(decor);
-        }
-        return fdColumns;
-    }
-
     private static LogicalVariable getLhsGbyVar(GroupByOperator gby, LogicalVariable var) {
         for (Pair<LogicalVariable, Mutable<ILogicalExpression>> ve : gby.getGroupByList()) {
             ILogicalExpression e = ve.second.getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
index bf0a824..945e36c 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
@@ -32,14 +32,12 @@ import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IPartialAggregationTypeComputer;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.ExecutionMode;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
@@ -122,21 +120,11 @@ public class ExternalGroupByPOperator extends AbstractGroupByPOperator {
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
             throws AlgebricksException {
+        GroupByOperator gby = (GroupByOperator) op;
+        checkGroupAll(gby);
         List<LogicalVariable> gbyCols = getGroupByColumns();
         int keys[] = JobGenHelper.variablesToFieldIndexes(gbyCols, inputSchemas[0]);
-        GroupByOperator gby = (GroupByOperator) op;
-        int numFds = gby.getDecorList().size();
-        int fdColumns[] = new int[numFds];
-        int j = 0;
-        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : gby.getDecorList()) {
-            ILogicalExpression expr = p.second.getValue();
-            if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
-                throw new AlgebricksException("pre-sorted group-by expects variable references.");
-            }
-            VariableReferenceExpression v = (VariableReferenceExpression) expr;
-            LogicalVariable decor = v.getVariableReference();
-            fdColumns[j++] = inputSchemas[0].findVariable(decor);
-        }
+        int fdColumns[] = getFdColumns(gby, inputSchemas[0]);
 
         if (gby.getNestedPlans().size() != 1) {
             throw new AlgebricksException(
@@ -237,6 +225,7 @@ public class ExternalGroupByPOperator extends AbstractGroupByPOperator {
         // Calculates the hash table size (# of unique hash values) based on the budget and a tuple size.
         int frameSize = context.getFrameSize();
         long memoryBudgetInBytes = localMemoryRequirements.getMemoryBudgetInBytes(frameSize);
+        int numFds = gby.getDecorList().size();
         int groupByColumnsCount = gby.getGroupByList().size() + numFds;
         int hashTableSize = ExternalGroupOperatorDescriptor.calculateGroupByTableCardinality(memoryBudgetInBytes,
                 groupByColumnsCount, frameSize);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
index 2d70abe..17da4cd 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
@@ -57,19 +57,19 @@ public class MicroPreclusteredGroupByPOperator extends AbstractPreclusteredGroup
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
             throws AlgebricksException {
-        int keys[] = JobGenHelper.variablesToFieldIndexes(columnList, inputSchemas[0]);
         GroupByOperator gby = (GroupByOperator) op;
-        IVariableTypeEnvironment env = context.getTypeEnvironment(op);
+        checkGroupAll(gby);
+        int keys[] = JobGenHelper.variablesToFieldIndexes(columnList, inputSchemas[0]);
         int fdColumns[] = getFdColumns(gby, inputSchemas[0]);
         // compile subplans and set the gby op. schema accordingly
         AlgebricksPipeline[] subplans = compileSubplans(inputSchemas[0], gby, opSchema, context);
         IAggregatorDescriptorFactory aggregatorFactory =
                 new NestedPlansAccumulatingAggregatorFactory(subplans, keys, fdColumns);
 
+        IVariableTypeEnvironment env = context.getTypeEnvironment(op);
         IBinaryComparatorFactory[] comparatorFactories =
                 JobGenHelper.variablesToAscBinaryComparatorFactories(columnList, env, context);
-        RecordDescriptor recordDescriptor =
-                JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
+        RecordDescriptor recordDescriptor = JobGenHelper.mkRecordDescriptor(env, opSchema, context);
         RecordDescriptor inputRecordDesc = JobGenHelper.mkRecordDescriptor(
                 context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas[0], context);
         int framesLimit = localMemoryRequirements.getMemoryBudgetInFrames();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
index c6b49c2..6c05d85 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
@@ -63,8 +63,9 @@ public class PreclusteredGroupByPOperator extends AbstractPreclusteredGroupByPOp
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
             throws AlgebricksException {
-        int keys[] = JobGenHelper.variablesToFieldIndexes(columnList, inputSchemas[0]);
         GroupByOperator gby = (GroupByOperator) op;
+        checkGroupAll(gby);
+        int keys[] = JobGenHelper.variablesToFieldIndexes(columnList, inputSchemas[0]);
         int fdColumns[] = getFdColumns(gby, inputSchemas[0]);
         // compile subplans and set the gby op. schema accordingly
         AlgebricksPipeline[] subplans = compileSubplans(inputSchemas[0], gby, opSchema, context);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
index 20e197f..7dfc509 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
@@ -32,14 +32,12 @@ import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IPartialAggregationTypeComputer;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
@@ -121,21 +119,11 @@ public class SortGroupByPOperator extends AbstractGroupByPOperator {
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
             throws AlgebricksException {
+        GroupByOperator gby = (GroupByOperator) op;
+        checkGroupAll(gby);
         List<LogicalVariable> gbyCols = getGroupByColumns();
         int keys[] = JobGenHelper.variablesToFieldIndexes(gbyCols, inputSchemas[0]);
-        GroupByOperator gby = (GroupByOperator) op;
-        int numFds = gby.getDecorList().size();
-        int fdColumns[] = new int[numFds];
-        int j = 0;
-        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : gby.getDecorList()) {
-            ILogicalExpression expr = p.second.getValue();
-            if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
-                throw new AlgebricksException("Sort group-by expects variable references.");
-            }
-            VariableReferenceExpression v = (VariableReferenceExpression) expr;
-            LogicalVariable decor = v.getVariableReference();
-            fdColumns[j++] = inputSchemas[0].findVariable(decor);
-        }
+        int fdColumns[] = getFdColumns(gby, inputSchemas[0]);
 
         if (gby.getNestedPlans().size() != 1) {
             throw new AlgebricksException(
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
index dd16ae2..8aebccf 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
@@ -165,6 +165,7 @@ public class ErrorCode {
     public static final int OPERATOR_NOT_IMPLEMENTED = 10005;
     public static final int INAPPLICABLE_HINT = 10006;
     public static final int CROSS_PRODUCT_JOIN = 10007;
+    public static final int GROUP_ALL_DECOR = 10008;
 
     private static class Holder {
         private static final Map<Integer, String> errorMessageMap;
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
index 69ad48c..68a6418 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
@@ -147,3 +147,4 @@
 10005 = Operator is not implemented: %1$s
 10006 = Could not apply %1$s hint: %2$s
 10007 = Encountered a cross product join
+10008 = Inappropriate use of group by all with decor variables
\ No newline at end of file