[ASTERIXDB-2441][COMP] Improve column alias handling in ORDERBY/LIMIT

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Introduce LET clauses for column alias expressions
  instead of inlining them into ORDER BY/LIMIT clauses
- Fix incorrect visitor used in SubstituteGroupbyExpressionWithVariableVisitor
  for rewriting LET clauses after GROUP BY

Change-Id: If925cbb803f2ad5fe955ba343ddc62585589b894
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2905
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>
Contrib: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/309c69c5
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/309c69c5
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/309c69c5

Branch: refs/heads/master
Commit: 309c69c57a4fb79028eeee8efd9e179240299f3d
Parents: adaff3c
Author: Dmitry Lychagin <dmitry.lycha...@couchbase.com>
Authored: Tue Aug 14 22:25:57 2018 -0700
Committer: Dmitry Lychagin <dmitry.lycha...@couchbase.com>
Committed: Wed Aug 15 07:55:26 2018 -0700

----------------------------------------------------------------------
 .../queries/group-by/sugar-06-distinct.sqlpp    |  35 ++++
 .../optimizerts/results/ASTERIXDB-2402.plan     |  38 ++--
 .../results/aggregate/constant-gby-agg.plan     |   6 +-
 .../secondary-equi-join_06.plan                 |   8 +-
 .../optimizerts/results/cust_group_no_agg.plan  |   4 +-
 .../results/gby_partitioning_property_01.plan   |  10 +-
 .../results/group-by/sugar-06-distinct.plan     |  27 +++
 .../results/query-ASTERIXDB-1806.plan           |   6 +-
 .../results/query-ASTERIXDB-2354.plan           |   4 +-
 .../results/query-ASTERIXDB-2408.plan           |  72 ++------
 .../optimizerts/results/query-issue601.plan     |   6 +-
 .../rtree-sidx-idxonly-01-disable-idxonly.plan  |   2 +-
 .../optimizerts/results/subquery/exists.plan    |  20 +--
 .../optimizerts/results/subquery/in.plan        |  10 +-
 .../results/subquery/in_correlated.plan         |  10 +-
 .../results/subquery/not_exists.plan            |  20 +--
 .../results/tpcds/query-ASTERIXDB-1580.plan     | 127 +++++++------
 .../tpcds/query-ASTERIXDB-1581-correlated.plan  |  64 +++----
 .../results/tpcds/query-ASTERIXDB-1581.plan     |  26 +--
 .../optimizerts/results/tpch/q12_shipping.plan  |  12 +-
 .../results/tpch/q12_shipping_broadcast.plan    |  10 +-
 .../results_parser_sqlpp/columnalias.ast        |  42 ++---
 .../results_parser_sqlpp/columnalias3.ast       |  42 ++---
 .../flwor/order-by-13/order-by-13.1.ddl.sqlpp   |  29 +++
 .../order-by-13/order-by-13.2.update.sqlpp      |  36 ++++
 .../flwor/order-by-13/order-by-13.3.query.sqlpp |  25 +++
 .../sugar-06-distinct.9.query.sqlpp             |  26 +++
 .../explain_field_access.1.adm                  |  30 ++--
 .../explain_field_access_closed.1.adm           |  26 +--
 .../results/flwor/order-by-13/order-by-13.3.adm |   4 +
 .../sugar-06-distinct/sugar-06-distinct.9.adm   |   3 +
 .../results_parser_sqlpp/flwor/at06/at06.3.ast  |  42 ++---
 .../tinysocial-suite.24.ast                     |  57 +++---
 .../tinysocial-suite/tinysocial-suite.24.ast    |  57 +++---
 .../resources/runtimets/testsuite_sqlpp.xml     |   5 +
 .../asterix/lang/common/context/Scope.java      |  11 +-
 .../common/rewrites/LangRewritingContext.java   |  13 +-
 .../asterix/lang/sqlpp/clause/SelectBlock.java  |   4 +-
 .../rewrites/SqlppFunctionBodyRewriter.java     |   6 +-
 .../lang/sqlpp/rewrites/SqlppQueryRewriter.java |   6 +-
 .../visitor/InlineColumnAliasVisitor.java       | 176 ++++++++++++++++---
 ...uteGroupbyExpressionWithVariableVisitor.java |  36 ++--
 .../visitor/VariableCheckAndRewriteVisitor.java |   3 +-
 .../SqlppSubstituteExpressionVisitor.java       |  13 +-
 44 files changed, 733 insertions(+), 476 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/sugar-06-distinct.sqlpp
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/sugar-06-distinct.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/sugar-06-distinct.sqlpp
new file mode 100644
index 0000000..d961374
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/sugar-06-distinct.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+DROP DATAVERSE gby IF EXISTS;
+CREATE DATAVERSE gby;
+
+USE gby;
+
+CREATE TYPE EmpType AS {
+  name : string
+};
+
+CREATE DATASET Employee(EmpType) PRIMARY KEY name;
+
+FROM Employee e
+GROUP BY deptno
+SELECT deptno, MAX(DISTINCT salary) salary_agg
+ORDER BY salary_agg DESC
+LIMIT 3;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
index fced7a9..18ec417 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
@@ -5,12 +5,12 @@
               {
                 -- AGGREGATE  |LOCAL|
                   -- ASSIGN  |LOCAL|
-                    -- MICRO_PRE_CLUSTERED_GROUP_BY[$$183]  |LOCAL|
+                    -- MICRO_PRE_CLUSTERED_GROUP_BY[$$184]  |LOCAL|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                             }
-                      -- IN_MEMORY_STABLE_SORT [$$183(ASC)]  |LOCAL|
+                      -- IN_MEMORY_STABLE_SORT [$$184(ASC)]  |LOCAL|
                         -- ASSIGN  |LOCAL|
                           -- UNNEST  |LOCAL|
                             -- SUBPLAN  |LOCAL|
@@ -27,7 +27,7 @@
             -- STREAM_PROJECT  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- INSERT_DELETE  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$167]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$168]  |PARTITIONED|
                     -- ASSIGN  |PARTITIONED|
                       -- STREAM_PROJECT  |PARTITIONED|
                         -- ASSIGN  |PARTITIONED|
@@ -37,28 +37,28 @@
                                 -- ASSIGN  |PARTITIONED|
                                   -- STREAM_PROJECT  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- PRE_CLUSTERED_GROUP_BY[$$221]  
|PARTITIONED|
+                                      -- PRE_CLUSTERED_GROUP_BY[$$222]  
|PARTITIONED|
                                               {
                                                 -- AGGREGATE  |LOCAL|
                                                   -- STREAM_SELECT  |LOCAL|
                                                     -- NESTED_TUPLE_SOURCE  
|LOCAL|
                                               }
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- STABLE_SORT [$$221(ASC)]  
|PARTITIONED|
-                                            -- HASH_PARTITION_EXCHANGE [$$221] 
 |PARTITIONED|
+                                          -- STABLE_SORT [$$222(ASC)]  
|PARTITIONED|
+                                            -- HASH_PARTITION_EXCHANGE [$$222] 
 |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  -- HYBRID_HASH_JOIN 
[$$267][$$190]  |PARTITIONED|
-                                                    -- HASH_PARTITION_EXCHANGE 
[$$267]  |PARTITIONED|
+                                                  -- HYBRID_HASH_JOIN 
[$$268][$$191]  |PARTITIONED|
+                                                    -- HASH_PARTITION_EXCHANGE 
[$$268]  |PARTITIONED|
                                                       -- ASSIGN  |PARTITIONED|
                                                         -- STREAM_PROJECT  
|PARTITIONED|
                                                           -- UNNEST  
|PARTITIONED|
                                                             -- STREAM_PROJECT  
|PARTITIONED|
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
PRE_CLUSTERED_GROUP_BY[$$275]  |PARTITIONED|
+                                                                -- 
PRE_CLUSTERED_GROUP_BY[$$276]  |PARTITIONED|
                                                                         {
                                                                           -- 
AGGREGATE  |LOCAL|
-                                                                            -- 
MICRO_PRE_CLUSTERED_GROUP_BY[$$277, $$279]  |LOCAL|
+                                                                            -- 
MICRO_PRE_CLUSTERED_GROUP_BY[$$278, $$280]  |LOCAL|
                                                                                
     {
                                                                                
       -- AGGREGATE  |LOCAL|
                                                                                
         -- STREAM_SELECT  |LOCAL|
@@ -68,8 +68,8 @@
                                                                                
 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                                                         }
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
STABLE_SORT [$$275(ASC), $$277(ASC), $$279(ASC)]  |PARTITIONED|
-                                                                      -- 
HASH_PARTITION_EXCHANGE [$$275]  |PARTITIONED|
+                                                                    -- 
STABLE_SORT [$$276(ASC), $$278(ASC), $$280(ASC)]  |PARTITIONED|
+                                                                      -- 
HASH_PARTITION_EXCHANGE [$$276]  |PARTITIONED|
                                                                         -- 
UNION_ALL  |PARTITIONED|
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                             -- 
STREAM_PROJECT  |PARTITIONED|
@@ -94,7 +94,7 @@
                                                                                
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                     -- BTREE_SEARCH  |PARTITIONED|
                                                                                
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                                         -- STABLE_SORT [$$289(ASC)]  
|PARTITIONED|
+                                                                               
                                         -- STABLE_SORT [$$290(ASC)]  
|PARTITIONED|
                                                                                
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                             -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                                               -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
@@ -117,7 +117,7 @@
                                                                                
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                                                     -- 
BTREE_SEARCH  |PARTITIONED|
                                                                                
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                                                                         -- 
STABLE_SORT [$$228(ASC)]  |PARTITIONED|
+                                                                               
                                                                         -- 
STABLE_SORT [$$229(ASC)]  |PARTITIONED|
                                                                                
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                                                             -- 
STREAM_PROJECT  |PARTITIONED|
                                                                                
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -145,7 +145,7 @@
                                                                                
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                               -- BTREE_SEARCH  |PARTITIONED|
                                                                                
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                                   -- STABLE_SORT [$$289(ASC)]  |PARTITIONED|
+                                                                               
                                   -- STABLE_SORT [$$290(ASC)]  |PARTITIONED|
                                                                                
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                       -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -168,7 +168,7 @@
                                                                                
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                                               -- BTREE_SEARCH  
|PARTITIONED|
                                                                                
                                                                 -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                                                                   -- 
STABLE_SORT [$$228(ASC)]  |PARTITIONED|
+                                                                               
                                                                   -- 
STABLE_SORT [$$229(ASC)]  |PARTITIONED|
                                                                                
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                                                       -- 
STREAM_PROJECT  |PARTITIONED|
                                                                                
                                                                         -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -176,12 +176,12 @@
                                                                                
                                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                                                               
-- ASSIGN  |PARTITIONED|
                                                                                
                                                                                
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                    -- HASH_PARTITION_EXCHANGE 
[$$190]  |PARTITIONED|
+                                                    -- HASH_PARTITION_EXCHANGE 
[$$191]  |PARTITIONED|
                                                       -- ASSIGN  |PARTITIONED|
                                                         -- STREAM_PROJECT  
|PARTITIONED|
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- 
HYBRID_HASH_JOIN [$$198, $$200][$$192, $$193]  |PARTITIONED|
-                                                              -- 
HASH_PARTITION_EXCHANGE [$$198, $$200]  |PARTITIONED|
+                                                            -- 
HYBRID_HASH_JOIN [$$199, $$201][$$193, $$194]  |PARTITIONED|
+                                                              -- 
HASH_PARTITION_EXCHANGE [$$199, $$201]  |PARTITIONED|
                                                                 -- 
STREAM_PROJECT  |PARTITIONED|
                                                                   -- ASSIGN  
|PARTITIONED|
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
index 59ddab8..88cb592 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- SORT_GROUP_BY[$$39]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$40]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$39]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$35]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$40]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$36]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
index 5163d81..c81b6b0 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
@@ -8,7 +8,7 @@
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- BTREE_SEARCH  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$68(ASC)]  |PARTITIONED|
+                    -- STABLE_SORT [$$69(ASC)]  |PARTITIONED|
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -17,13 +17,13 @@
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ASSIGN  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- SORT_GROUP_BY[$$66]  |PARTITIONED|
+                                      -- SORT_GROUP_BY[$$67]  |PARTITIONED|
                                               {
                                                 -- AGGREGATE  |LOCAL|
                                                   -- NESTED_TUPLE_SOURCE  
|LOCAL|
                                               }
-                                        -- HASH_PARTITION_EXCHANGE [$$66]  
|PARTITIONED|
-                                          -- SORT_GROUP_BY[$$59]  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$67]  
|PARTITIONED|
+                                          -- SORT_GROUP_BY[$$60]  |PARTITIONED|
                                                   {
                                                     -- AGGREGATE  |LOCAL|
                                                       -- NESTED_TUPLE_SOURCE  
|LOCAL|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
index 1e82aa4..cdea343 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
@@ -1,11 +1,11 @@
 -- DISTRIBUTE_RESULT  |PARTITIONED|
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-    -- SORT_GROUP_BY[$$27]  |PARTITIONED|
+    -- SORT_GROUP_BY[$$28]  |PARTITIONED|
             {
               -- AGGREGATE  |LOCAL|
                 -- NESTED_TUPLE_SOURCE  |LOCAL|
             }
-      -- HASH_PARTITION_EXCHANGE [$$27]  |PARTITIONED|
+      -- HASH_PARTITION_EXCHANGE [$$28]  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ASSIGN  |PARTITIONED|
             -- STREAM_PROJECT  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
index 254bf24..1bb5b99 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$60]  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$61]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- SORT_GROUP_BY[$$50]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$51]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -17,8 +17,8 @@
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                   -- STREAM_PROJECT  |PARTITIONED|
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- HYBRID_HASH_JOIN [$$50][$$53]  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$50]  |PARTITIONED|
+                      -- HYBRID_HASH_JOIN [$$51][$$54]  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$51]  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ASSIGN  |PARTITIONED|
                               -- STREAM_PROJECT  |PARTITIONED|
@@ -26,7 +26,7 @@
                                   -- DATASOURCE_SCAN  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$53]  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$54]  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ASSIGN  |PARTITIONED|
                               -- STREAM_PROJECT  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
new file mode 100644
index 0000000..81b8787
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
@@ -0,0 +1,27 @@
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    -- STREAM_LIMIT  |UNPARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- SORT_MERGE_EXCHANGE [$$48(DESC) ]  |PARTITIONED|
+            -- STREAM_LIMIT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [topK: 3] [$$48(DESC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$46]  |PARTITIONED|
+                            {
+                              -- AGGREGATE  |LOCAL|
+                                -- MICRO_PRE_SORTED_DISTINCT_BY  |LOCAL|
+                                  -- IN_MEMORY_STABLE_SORT [$$41(ASC)]  |LOCAL|
+                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                            }
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$46(ASC)]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$46]  |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

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
index 124d677..fef4ae3 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ]  
|PARTITIONED|
-          -- SORT_GROUP_BY[$$148, $$149]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$149, $$150]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$148, $$149]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$116, $$117]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$149, $$150]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$117, $$118]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
index 90d5b09..b255ab2 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
@@ -1,8 +1,8 @@
 -- DISTRIBUTE_RESULT  |PARTITIONED|
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
-      -- SORT_MERGE_EXCHANGE [$$69(ASC), $$70(ASC), $$71(ASC) ]  |PARTITIONED|
-        -- STABLE_SORT [$$69(ASC), $$70(ASC), $$71(ASC)]  |PARTITIONED|
+      -- SORT_MERGE_EXCHANGE [$$70(ASC), $$71(ASC), $$72(ASC) ]  |PARTITIONED|
+        -- STABLE_SORT [$$70(ASC), $$71(ASC), $$72(ASC)]  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
             -- UNION_ALL  |PARTITIONED|
               -- RANDOM_PARTITION_EXCHANGE  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
index e6e3520..640a064 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
@@ -1,68 +1,34 @@
 -- DISTRIBUTE_RESULT  |PARTITIONED|
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
-      -- SORT_MERGE_EXCHANGE [$$49(ASC) ]  |PARTITIONED|
-        -- STABLE_SORT [$$49(ASC)]  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- SORT_MERGE_EXCHANGE [$$39(ASC) ]  |PARTITIONED|
+            -- STABLE_SORT [$$39(ASC)]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- PRE_CLUSTERED_GROUP_BY[$$60]  |PARTITIONED|
-                        {
-                          -- AGGREGATE  |LOCAL|
-                            -- NESTED_TUPLE_SOURCE  |LOCAL|
-                        }
+                -- STREAM_PROJECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$56]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$37]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
                                   -- NESTED_TUPLE_SOURCE  |LOCAL|
                             }
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$56(ASC)]  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$37][$$40]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- HYBRID_HASH_JOIN [$$56][$$52]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- PRE_CLUSTERED_GROUP_BY[$$46]  
|PARTITIONED|
-                                                  {
-                                                    -- AGGREGATE  |LOCAL|
-                                                      -- STREAM_SELECT  |LOCAL|
-                                                        -- NESTED_TUPLE_SOURCE 
 |LOCAL|
-                                                  }
-                                            -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  -- HYBRID_HASH_JOIN 
[$$46][$$50]  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- STREAM_PROJECT  
|PARTITIONED|
-                                                        -- ASSIGN  
|PARTITIONED|
-                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- DATASOURCE_SCAN 
 |PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- REPLICATE  
|PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$50]  |PARTITIONED|
-                                                          -- STREAM_PROJECT  
|PARTITIONED|
-                                                            -- ASSIGN  
|PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
DATASOURCE_SCAN  |PARTITIONED|
-                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$40]  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- REPLICATE  |PARTITIONED|
-                                            -- HASH_PARTITION_EXCHANGE [$$50]  
|PARTITIONED|
-                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                -- ASSIGN  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                    -- DATASOURCE_SCAN  
|PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                        -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
index 8e3ca40..3651eba 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- SORT_GROUP_BY[$$41]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$42]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$41]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$38]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$39]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
index 1b959cb..331d31f 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
@@ -12,7 +12,7 @@
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- BTREE_SEARCH  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$55(ASC)]  |PARTITIONED|
+                            -- STABLE_SORT [$$56(ASC)]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
index 9672972..a010ace 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- SORT_MERGE_EXCHANGE [$$cntrycode(ASC) ]  |PARTITIONED|
-          -- SORT_GROUP_BY[$$162]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$164]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$162]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$139]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$164]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$141]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -21,25 +21,25 @@
                         -- STREAM_SELECT  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- SORT_GROUP_BY[$$159]  |PARTITIONED|
+                              -- SORT_GROUP_BY[$$161]  |PARTITIONED|
                                       {
                                         -- AGGREGATE  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                       }
-                                -- HASH_PARTITION_EXCHANGE [$$159]  
|PARTITIONED|
-                                  -- PRE_CLUSTERED_GROUP_BY[$$153]  
|PARTITIONED|
+                                -- HASH_PARTITION_EXCHANGE [$$161]  
|PARTITIONED|
+                                  -- PRE_CLUSTERED_GROUP_BY[$$155]  
|PARTITIONED|
                                           {
                                             -- AGGREGATE  |LOCAL|
                                               -- STREAM_SELECT  |LOCAL|
                                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- STABLE_SORT [$$153(ASC)]  
|PARTITIONED|
+                                      -- STABLE_SORT [$$155(ASC)]  
|PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- HYBRID_HASH_JOIN 
[$$148][$$145]  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE 
[$$148]  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN 
[$$150][$$147]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$150]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- STREAM_PROJECT  
|PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
@@ -66,7 +66,7 @@
                                                                                
 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE 
[$$145]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$147]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                       -- DATASOURCE_SCAN  
|PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
index 9dcdd24..6567388 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
@@ -2,13 +2,13 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$41(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$41(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$44(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$44(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- STREAM_SELECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$34]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$39]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
@@ -17,7 +17,7 @@
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$34][$$22]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$39][$$29]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- STREAM_SELECT  |PARTITIONED|
@@ -25,7 +25,7 @@
                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$22]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$29]  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ASSIGN  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
index 2d9d64b..bf5fa63 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
@@ -2,13 +2,13 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$46(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$46(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$49(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$49(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- STREAM_SELECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$38]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$43]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
@@ -22,7 +22,7 @@
                                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                             }
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$38][$$37]  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$43][$$42]  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                             -- STREAM_SELECT  |PARTITIONED|
                               -- ASSIGN  |PARTITIONED|
@@ -30,7 +30,7 @@
                                   -- DATASOURCE_SCAN  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$37]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
                             -- STREAM_PROJECT  |PARTITIONED|
                               -- ASSIGN  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
index 170a15b..57e0fa0 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- SORT_MERGE_EXCHANGE [$$cntrycode(ASC) ]  |PARTITIONED|
-          -- SORT_GROUP_BY[$$163]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$165]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$163]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$140]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$165]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$142]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -21,25 +21,25 @@
                         -- STREAM_SELECT  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- SORT_GROUP_BY[$$160]  |PARTITIONED|
+                              -- SORT_GROUP_BY[$$162]  |PARTITIONED|
                                       {
                                         -- AGGREGATE  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                       }
-                                -- HASH_PARTITION_EXCHANGE [$$160]  
|PARTITIONED|
-                                  -- PRE_CLUSTERED_GROUP_BY[$$154]  
|PARTITIONED|
+                                -- HASH_PARTITION_EXCHANGE [$$162]  
|PARTITIONED|
+                                  -- PRE_CLUSTERED_GROUP_BY[$$156]  
|PARTITIONED|
                                           {
                                             -- AGGREGATE  |LOCAL|
                                               -- STREAM_SELECT  |LOCAL|
                                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- STABLE_SORT [$$154(ASC)]  
|PARTITIONED|
+                                      -- STABLE_SORT [$$156(ASC)]  
|PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- HYBRID_HASH_JOIN 
[$$149][$$146]  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE 
[$$149]  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN 
[$$151][$$148]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$151]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- STREAM_PROJECT  
|PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
@@ -66,7 +66,7 @@
                                                                                
 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE 
[$$146]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$148]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                       -- DATASOURCE_SCAN  
|PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
index 0fabd6d..8887588 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
@@ -3,72 +3,71 @@
     -- STREAM_LIMIT  |UNPARTITIONED|
       -- STREAM_PROJECT  |PARTITIONED|
         -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- SORT_MERGE_EXCHANGE [$$113(ASC) ]  |PARTITIONED|
-              -- STREAM_LIMIT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [topK: 100] [$$113(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- STREAM_SELECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- SORT_GROUP_BY[$$123]  |PARTITIONED|
-                                    {
-                                      -- AGGREGATE  |LOCAL|
-                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                    }
-                              -- HASH_PARTITION_EXCHANGE [$$123]  |PARTITIONED|
-                                -- SORT_GROUP_BY[$$101]  |PARTITIONED|
-                                        {
-                                          -- AGGREGATE  |LOCAL|
-                                            -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                        }
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- HYBRID_HASH_JOIN [$$105][$$108]  
|PARTITIONED|
-                                          -- HASH_PARTITION_EXCHANGE [$$105]  
|PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                -- HYBRID_HASH_JOIN 
[$$114][$$107]  |PARTITIONED|
-                                                  -- HASH_PARTITION_EXCHANGE 
[$$114]  |PARTITIONED|
-                                                    -- STREAM_PROJECT  
|PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                        -- HYBRID_HASH_JOIN 
[$$104][$$119]  |PARTITIONED|
-                                                          -- 
HASH_PARTITION_EXCHANGE [$$104]  |PARTITIONED|
-                                                            -- STREAM_PROJECT  
|PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
HYBRID_HASH_JOIN [$$103][$$117]  |PARTITIONED|
-                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- SORT_MERGE_EXCHANGE [$$109(ASC) ]  |PARTITIONED|
+            -- STREAM_LIMIT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [topK: 100] [$$109(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- SORT_GROUP_BY[$$119]  |PARTITIONED|
+                                  {
+                                    -- AGGREGATE  |LOCAL|
+                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                  }
+                            -- HASH_PARTITION_EXCHANGE [$$119]  |PARTITIONED|
+                              -- SORT_GROUP_BY[$$100]  |PARTITIONED|
+                                      {
+                                        -- AGGREGATE  |LOCAL|
+                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                      }
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- HYBRID_HASH_JOIN [$$103][$$106]  
|PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$103]  
|PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                              -- HYBRID_HASH_JOIN 
[$$111][$$105]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$111]  |PARTITIONED|
+                                                  -- STREAM_PROJECT  
|PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN 
[$$102][$$116]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$102]  |PARTITIONED|
+                                                          -- STREAM_PROJECT  
|PARTITIONED|
+                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- 
HYBRID_HASH_JOIN [$$101][$$114]  |PARTITIONED|
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- ASSIGN  
|PARTITIONED|
+                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- 
DATASOURCE_SCAN  |PARTITIONED|
+                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$114]  |PARTITIONED|
+                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
                                                                     -- ASSIGN  
|PARTITIONED|
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- 
DATASOURCE_SCAN  |PARTITIONED|
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                             -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                  -- 
HASH_PARTITION_EXCHANGE [$$117]  |PARTITIONED|
-                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                      -- 
ASSIGN  |PARTITIONED|
-                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- 
DATASOURCE_SCAN  |PARTITIONED|
-                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
-- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                          -- 
HASH_PARTITION_EXCHANGE [$$119]  |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|
-                                                  -- 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  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                -- DATASOURCE_SCAN  
|PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                    -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$116]  |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|
+                                                -- 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  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/309c69c5/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
----------------------------------------------------------------------
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 c27116d..c636836 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
@@ -8,7 +8,7 @@
               -- ASSIGN  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$149]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$152]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- AGGREGATE  |LOCAL|
@@ -20,9 +20,9 @@
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$149][$$150]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$152][$$153]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- PRE_CLUSTERED_GROUP_BY[$$137]  |PARTITIONED|
+                                -- PRE_CLUSTERED_GROUP_BY[$$140]  |PARTITIONED|
                                         {
                                           -- AGGREGATE  |LOCAL|
                                             -- AGGREGATE  |LOCAL|
@@ -32,13 +32,13 @@
                                                     -- NESTED_TUPLE_SOURCE  
|LOCAL|
                                         }
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STABLE_SORT [$$137(ASC)]  |PARTITIONED|
+                                    -- STABLE_SORT [$$140(ASC)]  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- STREAM_PROJECT  |PARTITIONED|
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- HYBRID_HASH_JOIN [$$137][$$138] 
 |PARTITIONED|
+                                            -- HYBRID_HASH_JOIN [$$140][$$141] 
 |PARTITIONED|
                                               -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                -- 
PRE_CLUSTERED_GROUP_BY[$$117]  |PARTITIONED|
+                                                -- 
PRE_CLUSTERED_GROUP_BY[$$120]  |PARTITIONED|
                                                         {
                                                           -- AGGREGATE  |LOCAL|
                                                             -- AGGREGATE  
|LOCAL|
@@ -48,7 +48,7 @@
                                                   -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                     -- STREAM_PROJECT  
|PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                        -- HYBRID_HASH_JOIN 
[$$117][$$127]  |PARTITIONED|
+                                                        -- HYBRID_HASH_JOIN 
[$$120][$$130]  |PARTITIONED|
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                             -- STREAM_PROJECT  
|PARTITIONED|
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -66,7 +66,7 @@
                                                               -- ASSIGN  
|PARTITIONED|
                                                                 -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                   -- REPLICATE 
 |PARTITIONED|
-                                                                    -- 
HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
+                                                                    -- 
HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
                                                                       -- 
ASSIGN  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
                                                                           -- 
ASSIGN  |PARTITIONED|
@@ -78,18 +78,18 @@
                                                                                
       -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                              -- HASH_PARTITION_EXCHANGE 
[$$138]  |PARTITIONED|
+                                              -- HASH_PARTITION_EXCHANGE 
[$$141]  |PARTITIONED|
                                                 -- ASSIGN  |PARTITIONED|
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- HYBRID_HASH_JOIN 
[$$131][$$130]  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$131]  |PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN 
[$$134][$$133]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$134]  |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- ASSIGN  
|PARTITIONED|
                                                               -- 
STREAM_PROJECT  |PARTITIONED|
                                                                 -- 
STREAM_SELECT  |PARTITIONED|
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$139]  |PARTITIONED|
+                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$142]  |PARTITIONED|
                                                                             {
                                                                               
-- AGGREGATE  |LOCAL|
                                                                                
 -- AGGREGATE  |LOCAL|
@@ -99,7 +99,7 @@
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
HYBRID_HASH_JOIN [$$139][$$141]  |PARTITIONED|
+                                                                            -- 
HYBRID_HASH_JOIN [$$142][$$144]  |PARTITIONED|
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
 -- STREAM_PROJECT  |PARTITIONED|
                                                                                
   -- ASSIGN  |PARTITIONED|
@@ -115,7 +115,7 @@
                                                                                
   -- ASSIGN  |PARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
       -- REPLICATE  |PARTITIONED|
-                                                                               
         -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
+                                                                               
         -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
                                                                                
           -- ASSIGN  |PARTITIONED|
                                                                                
             -- STREAM_PROJECT  |PARTITIONED|
                                                                                
               -- ASSIGN  |PARTITIONED|
@@ -127,7 +127,7 @@
                                                                                
                           -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$130]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$133]  |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- ASSIGN  
|PARTITIONED|
                                                               -- 
STREAM_PROJECT  |PARTITIONED|
@@ -140,13 +140,13 @@
                                                                             -- 
DATASOURCE_SCAN  |PARTITIONED|
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$150]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$153]  |PARTITIONED|
                                 -- ASSIGN  |PARTITIONED|
                                   -- STREAM_PROJECT  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- HYBRID_HASH_JOIN [$$133][$$132]  
|PARTITIONED|
-                                        -- HASH_PARTITION_EXCHANGE [$$133]  
|PARTITIONED|
-                                          -- PRE_CLUSTERED_GROUP_BY[$$151]  
|PARTITIONED|
+                                      -- HYBRID_HASH_JOIN [$$136][$$135]  
|PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$136]  
|PARTITIONED|
+                                          -- PRE_CLUSTERED_GROUP_BY[$$154]  
|PARTITIONED|
                                                   {
                                                     -- AGGREGATE  |LOCAL|
                                                       -- AGGREGATE  |LOCAL|
@@ -155,18 +155,18 @@
                                                             -- 
NESTED_TUPLE_SOURCE  |LOCAL|
                                                   }
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- STABLE_SORT [$$151(ASC)]  
|PARTITIONED|
+                                              -- STABLE_SORT [$$154(ASC)]  
|PARTITIONED|
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- HYBRID_HASH_JOIN 
[$$151][$$154]  |PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN 
[$$154][$$157]  |PARTITIONED|
                                                         -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- STREAM_SELECT  
|PARTITIONED|
                                                               -- 
STREAM_PROJECT  |PARTITIONED|
                                                                 -- ASSIGN  
|PARTITIONED|
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$155]  |PARTITIONED|
+                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$158]  |PARTITIONED|
                                                                             {
                                                                               
-- AGGREGATE  |LOCAL|
                                                                                
 -- AGGREGATE  |LOCAL|
@@ -176,7 +176,7 @@
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
HYBRID_HASH_JOIN [$$155][$$156]  |PARTITIONED|
+                                                                            -- 
HYBRID_HASH_JOIN [$$158][$$159]  |PARTITIONED|
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
 -- STREAM_PROJECT  |PARTITIONED|
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -194,7 +194,7 @@
                                                                                
   -- ASSIGN  |PARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
       -- REPLICATE  |PARTITIONED|
-                                                                               
         -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
+                                                                               
         -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
                                                                                
           -- ASSIGN  |PARTITIONED|
                                                                                
             -- STREAM_PROJECT  |PARTITIONED|
                                                                                
               -- ASSIGN  |PARTITIONED|
@@ -206,18 +206,18 @@
                                                                                
                           -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$154]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$157]  |PARTITIONED|
                                                           -- ASSIGN  
|PARTITIONED|
                                                             -- STREAM_PROJECT  
|PARTITIONED|
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
HYBRID_HASH_JOIN [$$168][$$167]  |PARTITIONED|
-                                                                  -- 
HASH_PARTITION_EXCHANGE [$$168]  |PARTITIONED|
+                                                                -- 
HYBRID_HASH_JOIN [$$171][$$170]  |PARTITIONED|
+                                                                  -- 
HASH_PARTITION_EXCHANGE [$$171]  |PARTITIONED|
                                                                     -- 
STREAM_PROJECT  |PARTITIONED|
                                                                       -- 
ASSIGN  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
                                                                           -- 
STREAM_SELECT  |PARTITIONED|
                                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
-- PRE_CLUSTERED_GROUP_BY[$$173]  |PARTITIONED|
+                                                                              
-- PRE_CLUSTERED_GROUP_BY[$$176]  |PARTITIONED|
                                                                                
       {
                                                                                
         -- AGGREGATE  |LOCAL|
                                                                                
           -- AGGREGATE  |LOCAL|
@@ -227,7 +227,7 @@
                                                                                
 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
   -- STREAM_PROJECT  |PARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- HYBRID_HASH_JOIN [$$173][$$174]  |PARTITIONED|
+                                                                               
       -- HYBRID_HASH_JOIN [$$176][$$177]  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
           -- REPLICATE  |PARTITIONED|
                                                                                
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -237,7 +237,7 @@
                                                                                
                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
           -- REPLICATE  |PARTITIONED|
-                                                                               
             -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
+                                                                               
             -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
                                                                                
               -- ASSIGN  |PARTITIONED|
                                                                                
                 -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                   -- ASSIGN  |PARTITIONED|
@@ -249,7 +249,7 @@
                                                                                
                               -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                   -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                  -- 
HASH_PARTITION_EXCHANGE [$$167]  |PARTITIONED|
+                                                                  -- 
HASH_PARTITION_EXCHANGE [$$170]  |PARTITIONED|
                                                                     -- 
STREAM_PROJECT  |PARTITIONED|
                                                                       -- 
ASSIGN  |PARTITIONED|
                                                                         -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -260,7 +260,7 @@
                                                                                
   -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                        -- HASH_PARTITION_EXCHANGE [$$132]  
|PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$135]  
|PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|

Reply via email to