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

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

commit ba9ce920e091dab0e5a6c0dff13b219ad7f046e2
Author: Vijay Sarathy <[email protected]>
AuthorDate: Thu Jul 18 09:03:29 2024 -0700

    [ASTERIXDB-3462][COMP] Incorrect cardinality estimation with multicolumn 
PK-PK self joins
    
    Ext-ref: MB-62752
    Change-Id: Iabf1d151d996546c24feed5b8c1a23ef401b8054
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18492
    Reviewed-by: <[email protected]>
    Reviewed-by: Vijay Sarathy <[email protected]>
    Tested-by: Jenkins <[email protected]>
    (cherry picked from commit 0670ae1b2fd9a3b74ca91716b5b299535846d42e)
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18523
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Vijay Sarathy <[email protected]>
---
 .../asterix/optimizer/rules/cbo/JoinEnum.java      | 16 ++++--
 .../optimizerts/results_cbo/ch2/ch2_q10.plan       | 20 +++----
 .../optimizerts/results_cbo/ch2/ch2_q21.plan       | 62 ++++++++++----------
 .../optimizerts/results_cbo/ch2/ch2_q5.plan        | 64 ++++++++++-----------
 .../optimizerts/results_cbo/ch2/ch2_q7.plan        | 66 +++++++++++-----------
 .../optimizerts/results_cbo/ch2/ch2_q8.plan        | 66 +++++++++++-----------
 6 files changed, 149 insertions(+), 145 deletions(-)

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
index e842b7b1ec..4fa4873c5b 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
@@ -526,12 +526,16 @@ public class JoinEnum {
     private void markCompositeJoinPredicates() {
         // can use dataSetBits??? This will be simpler.
         for (int i = 0; i < joinConditions.size() - 1; i++) {
-            for (int j = i + 1; j < joinConditions.size(); j++) {
-                if (joinConditions.get(i).datasetBits == 
joinConditions.get(j).datasetBits) {
-                    joinConditions.get(i).selectivity = 1.0 / 
smallerDatasetSize(joinConditions.get(i).datasetBits);
-                    // 1/P will be the selectivity of the composite clause
-                    joinConditions.get(j).partOfComposite = true;
-                    joinConditions.get(j).selectivity = 1.0;
+            JoinCondition jcI = joinConditions.get(i);
+            if (jcI.comparisonType == JoinCondition.comparisonOp.OP_EQ && 
!jcI.partOfComposite) {
+                for (int j = i + 1; j < joinConditions.size(); j++) {
+                    JoinCondition jcJ = joinConditions.get(j);
+                    if (jcJ.comparisonType == JoinCondition.comparisonOp.OP_EQ 
&& jcI.datasetBits == jcJ.datasetBits) {
+                        jcI.selectivity = 1.0 / 
smallerDatasetSize(jcI.datasetBits);
+                        // 1/P will be the selectivity of the composite clause
+                        jcJ.partOfComposite = true;
+                        jcJ.selectivity = 1.0;
+                    }
                 }
             }
         }
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
index 30c69fb835..453e13845b 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
@@ -22,16 +22,8 @@
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                             -- STREAM_PROJECT  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- HYBRID_HASH_JOIN [$$176][$$177]  
|PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- DATASOURCE_SCAN (test.nation)  
|PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- HYBRID_HASH_JOIN [$$177][$$176]  
|PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$177]  
|PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- HYBRID_HASH_JOIN [$$166, $$171, 
$$173][$$170, $$172, $$174]  |PARTITIONED|
@@ -57,3 +49,11 @@
                                                                 -- 
DATASOURCE_SCAN (test.orders)  |PARTITIONED|
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$176]  
|PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- DATASOURCE_SCAN (test.nation)  
|PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
index ea3a322fcb..689bec38a5 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q21.plan
@@ -37,42 +37,16 @@
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- HYBRID_HASH_JOIN 
[$$354][$$365]  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN 
[$$365][$$354]  |PARTITIONED|
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  -- STREAM_PROJECT  
|PARTITIONED|
-                                                    -- STREAM_SELECT  
|PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
-                                                        -- STREAM_PROJECT  
|PARTITIONED|
-                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- DATASOURCE_SCAN 
(test.nation)  |PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- BROADCAST_EXCHANGE  
|PARTITIONED|
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- HYBRID_HASH_JOIN 
[$$355][$$366]  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          -- STREAM_PROJECT  
|PARTITIONED|
-                                                            -- ASSIGN  
|PARTITIONED|
-                                                              -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- 
DATASOURCE_SCAN (test.supplier)  |PARTITIONED|
-                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN 
[$$366][$$355]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$366]  |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- 
HYBRID_HASH_JOIN [$$351, $$350][$$352, $$362]  |PARTITIONED|
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- ASSIGN  
|PARTITIONED|
-                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                      -- 
ASSIGN  |PARTITIONED|
-                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
DATASOURCE_SCAN (test.stock)  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                              -- 
HYBRID_HASH_JOIN [$$352, $$362][$$351, $$350]  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$352, $$362]  |PARTITIONED|
                                                                   -- 
STREAM_PROJECT  |PARTITIONED|
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                       -- 
NESTED_LOOP  |PARTITIONED|
@@ -114,3 +88,29 @@
                                                                                
                       -- DATASOURCE_SCAN (test.orders)  |PARTITIONED|
                                                                                
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$351, $$350]  |PARTITIONED|
+                                                                  -- ASSIGN  
|PARTITIONED|
+                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                      -- 
ASSIGN  |PARTITIONED|
+                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
DATASOURCE_SCAN (test.stock)  |PARTITIONED|
+                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$355]  |PARTITIONED|
+                                                          -- STREAM_PROJECT  
|PARTITIONED|
+                                                            -- ASSIGN  
|PARTITIONED|
+                                                              -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- 
DATASOURCE_SCAN (test.supplier)  |PARTITIONED|
+                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                                  -- STREAM_PROJECT  
|PARTITIONED|
+                                                    -- STREAM_SELECT  
|PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- STREAM_PROJECT  
|PARTITIONED|
+                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                            -- DATASOURCE_SCAN 
(test.nation)  |PARTITIONED|
+                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan
index 0ce1d15d5f..8de5d0d6de 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q5.plan
@@ -29,35 +29,27 @@
                                         -- STREAM_PROJECT  |PARTITIONED|
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                             -- HYBRID_HASH_JOIN [$$256][$$257] 
 |PARTITIONED|
-                                              -- HASH_PARTITION_EXCHANGE 
[$$256]  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                 -- STREAM_PROJECT  
|PARTITIONED|
                                                   -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                    -- HYBRID_HASH_JOIN 
[$$274][$$258]  |PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                        -- STREAM_PROJECT  
|PARTITIONED|
-                                                          -- ASSIGN  
|PARTITIONED|
-                                                            -- STREAM_PROJECT  
|PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
DATASOURCE_SCAN (test.nation)  |PARTITIONED|
-                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                      -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                                    -- HYBRID_HASH_JOIN 
[$$258][$$274]  |PARTITIONED|
+                                                      -- 
HASH_PARTITION_EXCHANGE [$$258]  |PARTITIONED|
                                                         -- STREAM_PROJECT  
|PARTITIONED|
                                                           -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- 
HYBRID_HASH_JOIN [$$245, $$246][$$254, $$281]  |PARTITIONED|
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                  -- ASSIGN  
|PARTITIONED|
-                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                      -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- 
DATASOURCE_SCAN (test.stock)  |PARTITIONED|
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                              -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                            -- 
HYBRID_HASH_JOIN [$$260, $$254, $$263][$$276, $$277, $$278]  |PARTITIONED|
+                                                              -- 
HASH_PARTITION_EXCHANGE [$$260, $$254, $$263]  |PARTITIONED|
                                                                 -- 
STREAM_PROJECT  |PARTITIONED|
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- 
HYBRID_HASH_JOIN [$$260, $$254, $$263][$$276, $$277, $$278]  |PARTITIONED|
-                                                                      -- 
HASH_PARTITION_EXCHANGE [$$260, $$254, $$263]  |PARTITIONED|
+                                                                    -- 
HYBRID_HASH_JOIN [$$245, $$246][$$254, $$281]  |PARTITIONED|
+                                                                      -- 
HASH_PARTITION_EXCHANGE [$$245, $$246]  |PARTITIONED|
+                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                          -- 
ASSIGN  |PARTITIONED|
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
 -- DATASOURCE_SCAN (test.stock)  |PARTITIONED|
+                                                                               
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                      -- 
HASH_PARTITION_EXCHANGE [$$254, $$281]  |PARTITIONED|
                                                                         -- 
STREAM_PROJECT  |PARTITIONED|
                                                                           -- 
ASSIGN  |PARTITIONED|
                                                                             -- 
STREAM_PROJECT  |PARTITIONED|
@@ -71,15 +63,23 @@
                                                                                
             -- DATASOURCE_SCAN (test.orders)  |PARTITIONED|
                                                                                
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                      -- 
HASH_PARTITION_EXCHANGE [$$276, $$277, $$278]  |PARTITIONED|
-                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
ASSIGN  |PARTITIONED|
-                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- DATASOURCE_SCAN (test.customer)  |PARTITIONED|
-                                                                               
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                              -- HASH_PARTITION_EXCHANGE 
[$$257]  |PARTITIONED|
+                                                              -- 
HASH_PARTITION_EXCHANGE [$$276, $$277, $$278]  |PARTITIONED|
+                                                                -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ASSIGN  
|PARTITIONED|
+                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                      -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- 
DATASOURCE_SCAN (test.customer)  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                      -- 
HASH_PARTITION_EXCHANGE [$$274]  |PARTITIONED|
+                                                        -- STREAM_PROJECT  
|PARTITIONED|
+                                                          -- ASSIGN  
|PARTITIONED|
+                                                            -- STREAM_PROJECT  
|PARTITIONED|
+                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- 
DATASOURCE_SCAN (test.nation)  |PARTITIONED|
+                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                              -- BROADCAST_EXCHANGE  
|PARTITIONED|
                                                 -- STREAM_PROJECT  
|PARTITIONED|
                                                   -- STREAM_SELECT  
|PARTITIONED|
                                                     -- ASSIGN  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
index 1ae72b1960..9640d4dff4 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
@@ -29,34 +29,24 @@
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                              -- HYBRID_HASH_JOIN 
[$$304][$$288]  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  -- REPLICATE  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- STREAM_PROJECT  
|PARTITIONED|
-                                                        -- ASSIGN  
|PARTITIONED|
-                                                          -- STREAM_PROJECT  
|PARTITIONED|
-                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- 
DATASOURCE_SCAN (test.nation)  |PARTITIONED|
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                              -- HYBRID_HASH_JOIN 
[$$288][$$304]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$288]  |PARTITIONED|
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      -- HYBRID_HASH_JOIN 
[$$275, $$276][$$310, $$311]  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          -- STREAM_PROJECT  
|PARTITIONED|
-                                                            -- ASSIGN  
|PARTITIONED|
-                                                              -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- 
DATASOURCE_SCAN (test.stock)  |PARTITIONED|
-                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- BROADCAST_EXCHANGE  
|PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN 
[$$291, $$293, $$295][$$305, $$306, $$307]  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$291, $$293, $$295]  |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- 
HYBRID_HASH_JOIN [$$291, $$293, $$295][$$305, $$306, $$307]  |PARTITIONED|
-                                                                -- 
HASH_PARTITION_EXCHANGE [$$291, $$293, $$295]  |PARTITIONED|
+                                                              -- 
HYBRID_HASH_JOIN [$$275, $$276][$$310, $$311]  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$275, $$276]  |PARTITIONED|
+                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                    -- ASSIGN  
|PARTITIONED|
+                                                                      -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- 
DATASOURCE_SCAN (test.stock)  |PARTITIONED|
+                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                              
-- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$310, $$311]  |PARTITIONED|
                                                                   -- 
STREAM_PROJECT  |PARTITIONED|
                                                                     -- 
STREAM_SELECT  |PARTITIONED|
                                                                       -- 
STREAM_PROJECT  |PARTITIONED|
@@ -70,15 +60,25 @@
                                                                                
       -- DATASOURCE_SCAN (test.orders)  |PARTITIONED|
                                                                                
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                -- 
HASH_PARTITION_EXCHANGE [$$305, $$306, $$307]  |PARTITIONED|
-                                                                  -- ASSIGN  
|PARTITIONED|
-                                                                    -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                      -- 
ASSIGN  |PARTITIONED|
-                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
DATASOURCE_SCAN (test.customer)  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                        -- 
HASH_PARTITION_EXCHANGE [$$305, $$306, $$307]  |PARTITIONED|
+                                                          -- ASSIGN  
|PARTITIONED|
+                                                            -- STREAM_PROJECT  
|PARTITIONED|
+                                                              -- ASSIGN  
|PARTITIONED|
+                                                                -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                  -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- 
DATASOURCE_SCAN (test.customer)  |PARTITIONED|
+                                                                      -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE 
[$$304]  |PARTITIONED|
+                                                  -- REPLICATE  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                      -- STREAM_PROJECT  
|PARTITIONED|
+                                                        -- ASSIGN  
|PARTITIONED|
+                                                          -- STREAM_PROJECT  
|PARTITIONED|
+                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- 
DATASOURCE_SCAN (test.nation)  |PARTITIONED|
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                         -- BROADCAST_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan
index 63d7b2dfd6..4223541036 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q8.plan
@@ -34,36 +34,27 @@
                                                   -- STREAM_PROJECT  
|PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                                       -- HYBRID_HASH_JOIN 
[$$311][$$331]  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$311]  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- 
HYBRID_HASH_JOIN [$$324][$$306]  |PARTITIONED|
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                    -- 
STREAM_SELECT  |PARTITIONED|
-                                                                      -- 
ASSIGN  |PARTITIONED|
-                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            -- 
DATASOURCE_SCAN (test.item)  |PARTITIONED|
-                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                              -- 
HYBRID_HASH_JOIN [$$306][$$324]  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$306]  |PARTITIONED|
                                                                   -- 
STREAM_PROJECT  |PARTITIONED|
                                                                     -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                      -- 
HYBRID_HASH_JOIN [$$296, $$295][$$306, $$336]  |PARTITIONED|
-                                                                        -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                            -- 
ASSIGN  |PARTITIONED|
-                                                                              
-- STREAM_PROJECT  |PARTITIONED|
-                                                                               
 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
   -- DATASOURCE_SCAN (test.stock)  |PARTITIONED|
-                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                        -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                      -- 
HYBRID_HASH_JOIN [$$313, $$315, $$317][$$333, $$334, $$332]  |PARTITIONED|
+                                                                        -- 
HASH_PARTITION_EXCHANGE [$$313, $$315, $$317]  |PARTITIONED|
                                                                           -- 
STREAM_PROJECT  |PARTITIONED|
                                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
-- HYBRID_HASH_JOIN [$$313, $$315, $$317][$$333, $$334, $$332]  |PARTITIONED|
-                                                                               
 -- HASH_PARTITION_EXCHANGE [$$313, $$315, $$317]  |PARTITIONED|
+                                                                              
-- HYBRID_HASH_JOIN [$$296, $$295][$$306, $$336]  |PARTITIONED|
+                                                                               
 -- HASH_PARTITION_EXCHANGE [$$296, $$295]  |PARTITIONED|
+                                                                               
   -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
     -- ASSIGN  |PARTITIONED|
+                                                                               
       -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
           -- DATASOURCE_SCAN (test.stock)  |PARTITIONED|
+                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
 -- HASH_PARTITION_EXCHANGE [$$306, $$336]  |PARTITIONED|
                                                                                
   -- STREAM_SELECT  |PARTITIONED|
                                                                                
     -- STREAM_PROJECT  |PARTITIONED|
                                                                                
       -- ASSIGN  |PARTITIONED|
@@ -77,15 +68,24 @@
                                                                                
                       -- DATASOURCE_SCAN (test.orders)  |PARTITIONED|
                                                                                
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                               
 -- HASH_PARTITION_EXCHANGE [$$333, $$334, $$332]  |PARTITIONED|
-                                                                               
   -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
     -- ASSIGN  |PARTITIONED|
-                                                                               
       -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
           -- DATASOURCE_SCAN (test.customer)  |PARTITIONED|
-                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                        -- 
HASH_PARTITION_EXCHANGE [$$331]  |PARTITIONED|
+                                                                        -- 
HASH_PARTITION_EXCHANGE [$$333, $$334, $$332]  |PARTITIONED|
+                                                                          -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                            -- 
ASSIGN  |PARTITIONED|
+                                                                              
-- STREAM_PROJECT  |PARTITIONED|
+                                                                               
 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
   -- DATASOURCE_SCAN (test.customer)  |PARTITIONED|
+                                                                               
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- 
HASH_PARTITION_EXCHANGE [$$324]  |PARTITIONED|
+                                                                  -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                    -- 
STREAM_SELECT  |PARTITIONED|
+                                                                      -- 
ASSIGN  |PARTITIONED|
+                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- 
DATASOURCE_SCAN (test.item)  |PARTITIONED|
+                                                                              
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                        -- BROADCAST_EXCHANGE  
|PARTITIONED|
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             -- ASSIGN  
|PARTITIONED|
                                                               -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|


Reply via email to