Dmitry Lychagin has submitted this change and it was merged.

Change subject: [ASTERIXDB-2174] Fix partitioning improvement of group by
......................................................................


[ASTERIXDB-2174] Fix partitioning improvement of group by

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

Details:
- Fix the improvement of partitioning propagation of group by
introduced by https://asterix-gerrit.ics.uci.edu/#/c/2176/.
- The problem is that we cannot modify the partitioning property of the
input operator directly, since that property is owned by the input.
Otherwise, the property of the child operator would be modified even
before the group by operator, and this caused some tests regarding
common sub operator extration to fail (introducing REPLICATE).

Change-Id: I81a74ab1242772c790175414281e3f200537b386
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2966
Sonar-Qube: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>
---
M 
asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization-above-join.plan
M 
asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
M 
asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractPreclusteredGroupByPOperator.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/BroadcastPartitioningProperty.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/IPartitioningProperty.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/OrderedPartitionedProperty.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/RandomPartitioningProperty.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/UnorderedPartitionedProperty.java
9 files changed, 211 insertions(+), 173 deletions(-)

Approvals:
  Anon. E. Moose #1000171: 
  Jenkins: Verified; No violations found; Verified
  Dmitry Lychagin: Looks good to me, approved



diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization-above-join.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization-above-join.plan
index 22bc323..a81a142 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization-above-join.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization-above-join.plan
@@ -32,26 +32,26 @@
                                               -- STREAM_PROJECT  |PARTITIONED|
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                   -- HYBRID_HASH_JOIN 
[$$prefixTokenLeft][$$prefixTokenRight]  |PARTITIONED|
-                                                    -- HASH_PARTITION_EXCHANGE 
[$$prefixTokenLeft]  |PARTITIONED|
-                                                      -- UNNEST  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          -- 
PRE_CLUSTERED_GROUP_BY[$$95]  |PARTITIONED|
-                                                                  {
-                                                                    -- 
AGGREGATE  |LOCAL|
-                                                                      -- 
STREAM_SELECT  |LOCAL|
-                                                                        -- 
NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                  }
-                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- STABLE_SORT 
[$$95(ASC), $$i(ASC)]  |PARTITIONED|
-                                                                -- 
HASH_PARTITION_EXCHANGE [$$95]  |PARTITIONED|
-                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
HYBRID_HASH_JOIN [$$tokenUnranked][$$tokenGroupped]  |PARTITIONED|
-                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                            -- 
ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                      -- STREAM_PROJECT  
|PARTITIONED|
+                                                        -- ASSIGN  
|PARTITIONED|
+                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                            -- REPLICATE  
|PARTITIONED|
+                                                              -- 
HASH_PARTITION_EXCHANGE [$$prefixTokenRight]  |PARTITIONED|
+                                                                -- UNNEST  
|PARTITIONED|
+                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$97]  |PARTITIONED|
+                                                                            {
+                                                                              
-- AGGREGATE  |LOCAL|
+                                                                               
 -- STREAM_SELECT  |LOCAL|
+                                                                               
   -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                            }
+                                                                      -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- 
STABLE_SORT [$$97(ASC), $$i(ASC)]  |PARTITIONED|
+                                                                          -- 
HASH_PARTITION_EXCHANGE [$$97]  |PARTITIONED|
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- REPLICATE  |PARTITIONED|
+                                                                               
 -- HYBRID_HASH_JOIN [$$tokenUnranked][$$tokenGroupped]  |PARTITIONED|
                                                                                
   -- HASH_PARTITION_EXCHANGE [$$tokenUnranked]  |PARTITIONED|
                                                                                
     -- STREAM_PROJECT  |PARTITIONED|
                                                                                
       -- UNNEST  |PARTITIONED|
@@ -62,24 +62,19 @@
                                                                                
                 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                        -- 
HASH_PARTITION_EXCHANGE [$$tokenGroupped]  |PARTITIONED|
-                                                                          -- 
ASSIGN  |PARTITIONED|
-                                                                            -- 
RUNNING_AGGREGATE  |PARTITIONED|
-                                                                              
-- STREAM_PROJECT  |PARTITIONED|
-                                                                               
 -- SORT_MERGE_EXCHANGE [$$99(ASC), $$tokenGroupped(ASC) ]  |PARTITIONED|
-                                                                               
   -- STABLE_SORT [$$99(ASC), $$tokenGroupped(ASC)]  |PARTITIONED|
-                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- SORT_GROUP_BY[$$128]  |PARTITIONED|
-                                                                               
               {
-                                                                               
                 -- AGGREGATE  |LOCAL|
-                                                                               
                   -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                               
               }
-                                                                               
         -- HASH_PARTITION_EXCHANGE [$$128]  |PARTITIONED|
-                                                                               
           -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
             -- ASSIGN  |PARTITIONED|
+                                                                               
   -- HASH_PARTITION_EXCHANGE [$$tokenGroupped]  |PARTITIONED|
+                                                                               
     -- ASSIGN  |PARTITIONED|
+                                                                               
       -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                               
         -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
           -- SORT_MERGE_EXCHANGE [$$102(ASC), $$tokenGroupped(ASC) ]  
|PARTITIONED|
+                                                                               
             -- STABLE_SORT [$$102(ASC), $$tokenGroupped(ASC)]  |PARTITIONED|
                                                                                
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                 -- REPLICATE  |PARTITIONED|
-                                                                               
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                 -- SORT_GROUP_BY[$$130]  |PARTITIONED|
+                                                                               
                         {
+                                                                               
                           -- AGGREGATE  |LOCAL|
+                                                                               
                             -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                               
                         }
+                                                                               
                   -- HASH_PARTITION_EXCHANGE [$$130]  |PARTITIONED|
                                                                                
                     -- SORT_GROUP_BY[$$token]  |PARTITIONED|
                                                                                
                             {
                                                                                
                               -- AGGREGATE  |LOCAL|
@@ -97,23 +92,23 @@
                                                                                
                                         -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                                             -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
-                                                    -- HASH_PARTITION_EXCHANGE 
[$$prefixTokenRight]  |PARTITIONED|
-                                                      -- UNNEST  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          -- 
PRE_CLUSTERED_GROUP_BY[$$97]  |PARTITIONED|
-                                                                  {
-                                                                    -- 
AGGREGATE  |LOCAL|
-                                                                      -- 
STREAM_SELECT  |LOCAL|
-                                                                        -- 
NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                  }
+                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                      -- REPLICATE  
|PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$prefixTokenRight]  |PARTITIONED|
+                                                          -- UNNEST  
|PARTITIONED|
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- STABLE_SORT 
[$$97(ASC), $$i(ASC)]  |PARTITIONED|
-                                                                -- 
HASH_PARTITION_EXCHANGE [$$97]  |PARTITIONED|
-                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
HYBRID_HASH_JOIN [$$tokenUnranked][$$tokenGroupped]  |PARTITIONED|
+                                                              -- 
PRE_CLUSTERED_GROUP_BY[$$97]  |PARTITIONED|
+                                                                      {
+                                                                        -- 
AGGREGATE  |LOCAL|
+                                                                          -- 
STREAM_SELECT  |LOCAL|
+                                                                            -- 
NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                      }
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- 
STABLE_SORT [$$97(ASC), $$i(ASC)]  |PARTITIONED|
+                                                                    -- 
HASH_PARTITION_EXCHANGE [$$97]  |PARTITIONED|
+                                                                      -- 
STREAM_PROJECT  |PARTITIONED|
                                                                         -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- 
REPLICATE  |PARTITIONED|
+                                                                          -- 
HYBRID_HASH_JOIN [$$tokenUnranked][$$tokenGroupped]  |PARTITIONED|
                                                                             -- 
HASH_PARTITION_EXCHANGE [$$tokenUnranked]  |PARTITIONED|
                                                                               
-- STREAM_PROJECT  |PARTITIONED|
                                                                                
 -- UNNEST  |PARTITIONED|
@@ -124,21 +119,19 @@
                                                                                
           -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                        -- 
HASH_PARTITION_EXCHANGE [$$tokenGroupped]  |PARTITIONED|
-                                                                          -- 
ASSIGN  |PARTITIONED|
-                                                                            -- 
RUNNING_AGGREGATE  |PARTITIONED|
-                                                                              
-- STREAM_PROJECT  |PARTITIONED|
-                                                                               
 -- SORT_MERGE_EXCHANGE [$$102(ASC), $$tokenGroupped(ASC) ]  |PARTITIONED|
-                                                                               
   -- STABLE_SORT [$$102(ASC), $$tokenGroupped(ASC)]  |PARTITIONED|
-                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- SORT_GROUP_BY[$$130]  |PARTITIONED|
-                                                                               
               {
-                                                                               
                 -- AGGREGATE  |LOCAL|
-                                                                               
                   -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                               
               }
-                                                                               
         -- HASH_PARTITION_EXCHANGE [$$130]  |PARTITIONED|
-                                                                               
           -- REPLICATE  |PARTITIONED|
-                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
HASH_PARTITION_EXCHANGE [$$tokenGroupped]  |PARTITIONED|
+                                                                              
-- ASSIGN  |PARTITIONED|
+                                                                               
 -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                               
   -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
     -- SORT_MERGE_EXCHANGE [$$102(ASC), $$tokenGroupped(ASC) ]  |PARTITIONED|
+                                                                               
       -- STABLE_SORT [$$102(ASC), $$tokenGroupped(ASC)]  |PARTITIONED|
+                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
           -- SORT_GROUP_BY[$$130]  |PARTITIONED|
+                                                                               
                   {
+                                                                               
                     -- AGGREGATE  |LOCAL|
+                                                                               
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                               
                   }
+                                                                               
             -- HASH_PARTITION_EXCHANGE [$$130]  |PARTITIONED|
                                                                                
               -- SORT_GROUP_BY[$$token]  |PARTITIONED|
                                                                                
                       {
                                                                                
                         -- AGGREGATE  |LOCAL|
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 c636836..fff35d0 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
@@ -51,16 +51,19 @@
                                                         -- HYBRID_HASH_JOIN 
[$$120][$$130]  |PARTITIONED|
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                             -- STREAM_PROJECT  
|PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                  -- ASSIGN  
|PARTITIONED|
+                                                              -- ASSIGN  
|PARTITIONED|
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- REPLICATE 
 |PARTITIONED|
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
REPLICATE  |PARTITIONED|
-                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- 
BTREE_SEARCH  |PARTITIONED|
-                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
-- ASSIGN  |PARTITIONED|
-                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                      -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                        -- 
ASSIGN  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
REPLICATE  |PARTITIONED|
+                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
 -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
     -- ASSIGN  |PARTITIONED|
+                                                                               
       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                             -- STREAM_PROJECT  
|PARTITIONED|
                                                               -- ASSIGN  
|PARTITIONED|
@@ -83,50 +86,49 @@
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                       -- HYBRID_HASH_JOIN 
[$$134][$$133]  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$134]  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- ASSIGN  
|PARTITIONED|
-                                                              -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                -- 
STREAM_SELECT  |PARTITIONED|
-                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
PRE_CLUSTERED_GROUP_BY[$$142]  |PARTITIONED|
-                                                                            {
-                                                                              
-- AGGREGATE  |LOCAL|
-                                                                               
 -- AGGREGATE  |LOCAL|
-                                                                               
   -- STREAM_SELECT  |LOCAL|
-                                                                               
     -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                            }
-                                                                      -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- REPLICATE  
|PARTITIONED|
+                                                                  -- 
HASH_PARTITION_EXCHANGE [$$171]  |PARTITIONED|
+                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                      -- 
ASSIGN  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
HYBRID_HASH_JOIN [$$142][$$144]  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
   -- ASSIGN  |PARTITIONED|
+                                                                          -- 
STREAM_SELECT  |PARTITIONED|
+                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                              
-- PRE_CLUSTERED_GROUP_BY[$$176]  |PARTITIONED|
+                                                                               
       {
+                                                                               
         -- AGGREGATE  |LOCAL|
+                                                                               
           -- AGGREGATE  |LOCAL|
+                                                                               
             -- STREAM_SELECT  |LOCAL|
+                                                                               
               -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                               
       }
+                                                                               
 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
   -- STREAM_PROJECT  |PARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- REPLICATE  |PARTITIONED|
+                                                                               
       -- HYBRID_HASH_JOIN [$$176][$$177]  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
           -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
           -- REPLICATE  |PARTITIONED|
                                                                                
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
               -- ASSIGN  |PARTITIONED|
-                                                                               
                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
   -- ASSIGN  |PARTITIONED|
-                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- REPLICATE  |PARTITIONED|
-                                                                               
         -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
-                                                                               
           -- ASSIGN  |PARTITIONED|
-                                                                               
             -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
               -- ASSIGN  |PARTITIONED|
+                                                                               
               -- BTREE_SEARCH  |PARTITIONED|
                                                                                
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                   -- REPLICATE  |PARTITIONED|
+                                                                               
                   -- ASSIGN  |PARTITIONED|
+                                                                               
                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
           -- REPLICATE  |PARTITIONED|
+                                                                               
             -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
+                                                                               
               -- ASSIGN  |PARTITIONED|
+                                                                               
                 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                   -- ASSIGN  |PARTITIONED|
                                                                                
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                       -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                       -- REPLICATE  |PARTITIONED|
                                                                                
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                           -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                           -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
                               -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                   -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                         -- 
HASH_PARTITION_EXCHANGE [$$133]  |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- ASSIGN  
|PARTITIONED|
@@ -178,7 +180,7 @@
                                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                             -- 
HYBRID_HASH_JOIN [$$158][$$159]  |PARTITIONED|
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
 -- REPLICATE  |PARTITIONED|
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
     -- STREAM_PROJECT  |PARTITIONED|
                                                                                
       -- ASSIGN  |PARTITIONED|
@@ -211,44 +213,46 @@
                                                             -- STREAM_PROJECT  
|PARTITIONED|
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                 -- 
HYBRID_HASH_JOIN [$$171][$$170]  |PARTITIONED|
-                                                                  -- 
HASH_PARTITION_EXCHANGE [$$171]  |PARTITIONED|
-                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                      -- 
ASSIGN  |PARTITIONED|
+                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- 
REPLICATE  |PARTITIONED|
+                                                                      -- 
HASH_PARTITION_EXCHANGE [$$171]  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
STREAM_SELECT  |PARTITIONED|
-                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
-- PRE_CLUSTERED_GROUP_BY[$$176]  |PARTITIONED|
-                                                                               
       {
-                                                                               
         -- AGGREGATE  |LOCAL|
-                                                                               
           -- AGGREGATE  |LOCAL|
-                                                                               
             -- STREAM_SELECT  |LOCAL|
-                                                                               
               -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                               
       }
+                                                                          -- 
ASSIGN  |PARTITIONED|
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                              
-- STREAM_SELECT  |PARTITIONED|
                                                                                
 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
   -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
   -- PRE_CLUSTERED_GROUP_BY[$$176]  |PARTITIONED|
+                                                                               
           {
+                                                                               
             -- AGGREGATE  |LOCAL|
+                                                                               
               -- AGGREGATE  |LOCAL|
+                                                                               
                 -- STREAM_SELECT  |LOCAL|
+                                                                               
                   -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                               
           }
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- HYBRID_HASH_JOIN [$$176][$$177]  |PARTITIONED|
+                                                                               
       -- STREAM_PROJECT  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
           -- REPLICATE  |PARTITIONED|
+                                                                               
           -- HYBRID_HASH_JOIN [$$176][$$177]  |PARTITIONED|
                                                                                
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
               -- BTREE_SEARCH  |PARTITIONED|
+                                                                               
               -- REPLICATE  |PARTITIONED|
                                                                                
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                   -- ASSIGN  |PARTITIONED|
-                                                                               
                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
           -- REPLICATE  |PARTITIONED|
-                                                                               
             -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
-                                                                               
               -- ASSIGN  |PARTITIONED|
-                                                                               
                 -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
                   -- ASSIGN  |PARTITIONED|
+                                                                               
                   -- BTREE_SEARCH  |PARTITIONED|
                                                                                
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                       -- REPLICATE  |PARTITIONED|
+                                                                               
                       -- ASSIGN  |PARTITIONED|
+                                                                               
                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
               -- REPLICATE  |PARTITIONED|
+                                                                               
                 -- HASH_PARTITION_EXCHANGE [$$177]  |PARTITIONED|
+                                                                               
                   -- ASSIGN  |PARTITIONED|
+                                                                               
                     -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                       -- ASSIGN  |PARTITIONED|
                                                                                
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                           -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                           -- REPLICATE  |PARTITIONED|
                                                                                
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                               -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                               -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                                   -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
                                   -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                   -- 
HASH_PARTITION_EXCHANGE [$$170]  |PARTITIONED|
                                                                     -- 
STREAM_PROJECT  |PARTITIONED|
                                                                       -- 
ASSIGN  |PARTITIONED|
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 38d0b5f..d0afd76 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
@@ -45,24 +45,29 @@
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                               -- HYBRID_HASH_JOIN 
[$$85][$$142]  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE 
[$$85]  |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_PROJECT  |PARTITIONED|
-                                                                      -- 
STREAM_SELECT  |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|
+                                                    -- ASSIGN  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                        -- REPLICATE  
|PARTITIONED|
+                                                          -- 
HASH_PARTITION_EXCHANGE [$$151]  |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_PROJECT  |PARTITIONED|
+                                                                               
 -- STREAM_SELECT  |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 
[$$142]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- STREAM_PROJECT  
|PARTITIONED|
@@ -122,24 +127,26 @@
                                                                     -- 
STREAM_PROJECT  |PARTITIONED|
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- 
HYBRID_HASH_JOIN [$$151][$$152]  |PARTITIONED|
-                                                                          -- 
HASH_PARTITION_EXCHANGE [$$151]  |PARTITIONED|
-                                                                            -- 
STREAM_PROJECT  |UNPARTITIONED|
-                                                                              
-- ASSIGN  |UNPARTITIONED|
-                                                                               
 -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                               
   -- REPLICATE  |UNPARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
REPLICATE  |PARTITIONED|
+                                                                              
-- HASH_PARTITION_EXCHANGE [$$151]  |PARTITIONED|
+                                                                               
 -- STREAM_PROJECT  |UNPARTITIONED|
+                                                                               
   -- ASSIGN  |UNPARTITIONED|
                                                                                
     -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-                                                                               
       -- AGGREGATE  |UNPARTITIONED|
-                                                                               
         -- AGGREGATE  |UNPARTITIONED|
-                                                                               
           -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-                                                                               
             -- AGGREGATE  |PARTITIONED|
-                                                                               
               -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
                 -- STREAM_SELECT  |PARTITIONED|
-                                                                               
                   -- ASSIGN  |PARTITIONED|
-                                                                               
                     -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                         -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
       -- REPLICATE  |UNPARTITIONED|
+                                                                               
         -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+                                                                               
           -- AGGREGATE  |UNPARTITIONED|
+                                                                               
             -- AGGREGATE  |UNPARTITIONED|
+                                                                               
               -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
+                                                                               
                 -- AGGREGATE  |PARTITIONED|
+                                                                               
                   -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
                     -- STREAM_SELECT  |PARTITIONED|
+                                                                               
                       -- ASSIGN  |PARTITIONED|
+                                                                               
                         -- STREAM_PROJECT  |PARTITIONED|
                                                                                
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
                             -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                           -- 
HASH_PARTITION_EXCHANGE [$$152]  |PARTITIONED|
                                                                             -- 
ASSIGN  |PARTITIONED|
                                                                               
-- STREAM_PROJECT  |PARTITIONED|
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 64e50ed..c18d76c 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
@@ -89,6 +89,10 @@
         IPartitioningProperty pp = childProp.getPartitioningProperty();
         Map<LogicalVariable, LogicalVariable> ppSubstMap = 
computePartitioningPropertySubstitutionMap(gby, pp);
         if (ppSubstMap != null) {
+            // We cannot modify pp directly, since it is owned by the input 
operator.
+            // Otherwise, the partitioning property would be modified even 
before this group by operator,
+            // which will be undesirable.
+            pp = pp.clonePartitioningProperty();
             pp.substituteColumnVars(ppSubstMap);
         }
         List<ILocalStructuralProperty> childLocals = 
childProp.getLocalProperties();
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/BroadcastPartitioningProperty.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/BroadcastPartitioningProperty.java
index bc6a45d..3e78fd2 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/BroadcastPartitioningProperty.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/BroadcastPartitioningProperty.java
@@ -60,6 +60,12 @@
 
     @Override
     public void substituteColumnVars(Map<LogicalVariable, LogicalVariable> 
varMap) {
+
+    }
+
+    @Override
+    public IPartitioningProperty clonePartitioningProperty() {
+        return new BroadcastPartitioningProperty(domain);
     }
 
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/IPartitioningProperty.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/IPartitioningProperty.java
index f41d197..5164192 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/IPartitioningProperty.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/IPartitioningProperty.java
@@ -77,6 +77,8 @@
     void setNodeDomain(INodeDomain domain);
 
     void substituteColumnVars(Map<LogicalVariable, LogicalVariable> varMap);
+
+    IPartitioningProperty clonePartitioningProperty();
 }
 
 class UnpartitionedProperty implements IPartitioningProperty {
@@ -116,4 +118,9 @@
     public void substituteColumnVars(Map<LogicalVariable, LogicalVariable> 
variableMap) {
         // No partition columns are maintained for UNPARTITIONED.
     }
+
+    @Override
+    public IPartitioningProperty clonePartitioningProperty() {
+        return new UnpartitionedProperty();
+    }
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/OrderedPartitionedProperty.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/OrderedPartitionedProperty.java
index 23c8273..b5a2bb5 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/OrderedPartitionedProperty.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/OrderedPartitionedProperty.java
@@ -28,7 +28,7 @@
 
 public class OrderedPartitionedProperty implements IPartitioningProperty {
 
-    private List<OrderColumn> orderColumns;
+    private final List<OrderColumn> orderColumns;
     private INodeDomain domain;
 
     public OrderedPartitionedProperty(List<OrderColumn> orderColumns, 
INodeDomain domain) {
@@ -92,4 +92,9 @@
         }
     }
 
+    @Override
+    public IPartitioningProperty clonePartitioningProperty() {
+        return new OrderedPartitionedProperty(new ArrayList<>(orderColumns), 
domain);
+    }
+
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/RandomPartitioningProperty.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/RandomPartitioningProperty.java
index bbd835c..951a031 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/RandomPartitioningProperty.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/RandomPartitioningProperty.java
@@ -65,6 +65,12 @@
 
     @Override
     public void substituteColumnVars(Map<LogicalVariable, LogicalVariable> 
varMap) {
+
+    }
+
+    @Override
+    public IPartitioningProperty clonePartitioningProperty() {
+        return new RandomPartitioningProperty(domain);
     }
 
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/UnorderedPartitionedProperty.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/UnorderedPartitionedProperty.java
index f59638c..e07cf15 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/UnorderedPartitionedProperty.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/UnorderedPartitionedProperty.java
@@ -19,6 +19,7 @@
 package org.apache.hyracks.algebricks.core.algebra.properties;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -77,4 +78,9 @@
         });
     }
 
+    @Override
+    public IPartitioningProperty clonePartitioningProperty() {
+        return new UnorderedPartitionedProperty(new HashSet<>(columnSet), 
domain);
+    }
+
 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2966
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I81a74ab1242772c790175414281e3f200537b386
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: stabilization-f69489
Gerrit-Owner: Luo Chen <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Dmitry Lychagin <[email protected]>
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Taewoo Kim <[email protected]>
Gerrit-Reviewer: Till Westmann <[email protected]>

Reply via email to