>From <[email protected]>:

[email protected] has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19377 )


Change subject: [ASTERIXDB-3558][COMP] Allow Cartesian products at all levels 
if outer joins are present
......................................................................

[ASTERIXDB-3558][COMP] Allow Cartesian products at all levels if outer joins 
are present

Change-Id: I1adb17bbf4348d8b495f88eb452cdcd18575f765
---
M 
asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/tpch/query-plans/query-plans.04.plan
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
2 files changed, 117 insertions(+), 136 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/77/19377/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index bc4709e..f044272 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -1333,7 +1333,7 @@
         List<Integer> newJoinConditions = this.getNewJoinConditionsOnly(); // 
these will be a subset of applicable join conditions.
         if ((newJoinConditions.size() == 0) && joinEnum.connectedJoinGraph) {
             // at least one plan must be there at each level as the graph is 
fully connected.
-            if (leftJn.cardinality * rightJn.cardinality > 10000.0 && level > 
joinEnum.cboFullEnumLevel) {
+            if (leftJn.cardinality * rightJn.cardinality > 10000.0 && level > 
joinEnum.cboFullEnumLevel && !joinEnum.outerJoin) {
                 return;
             }
         }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/tpch/query-plans/query-plans.04.plan
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/tpch/query-plans/query-plans.04.plan
index 66fe341..d2c7c52 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/tpch/query-plans/query-plans.04.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/tpch/query-plans/query-plans.04.plan
@@ -38,159 +38,137 @@
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                       join (and(eq($$250, $$203), eq($$202, 
$$231))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                       -- HYBRID_HASH_JOIN [$$250, 
$$231][$$203, $$202]  |PARTITIONED|
-                                        exchange [cardinality: 37.63, op-cost: 
0.0, total-cost: 20000.0]
+                                        exchange [cardinality: 30.16, op-cost: 
0.0, total-cost: 264479.97]
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          assign [$$231] <- [get-item($$181, 
0)] project: [$$250, $$244, $$231] [cardinality: 37.63, op-cost: 0.0, 
total-cost: 20000.0]
+                                          assign [$$231] <- [get-item($$181, 
0)] project: [$$250, $$244, $$231] [cardinality: 30.16, op-cost: 0.0, 
total-cost: 264479.97]
                                           -- ASSIGN  |PARTITIONED|
-                                            exchange [cardinality: 37.63, 
op-cost: 0.0, total-cost: 20000.0]
+                                            exchange [cardinality: 30.16, 
op-cost: 0.0, total-cost: 264479.97]
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
                                               group by ([$$250 := $$200]) 
decor ([$$244]) {
                                                         aggregate [$$181] <- 
[listify($$215)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                         -- AGGREGATE  |LOCAL|
                                                           aggregate [$$215] <- 
[agg-sql-min($$208)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                           -- AGGREGATE  |LOCAL|
-                                                            select 
(not(is-missing($$249))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                            -- STREAM_SELECT  
|LOCAL|
-                                                              nested tuple 
source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                              -- 
NESTED_TUPLE_SOURCE  |LOCAL|
-                                                     } [cardinality: 0.0, 
op-cost: 0.0, total-cost: 20000.0]
+                                                            nested tuple 
source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                            -- 
NESTED_TUPLE_SOURCE  |LOCAL|
+                                                     } [cardinality: 0.0, 
op-cost: 0.0, total-cost: 264479.97]
                                               -- PRE_CLUSTERED_GROUP_BY[$$200] 
 |PARTITIONED|
-                                                exchange [cardinality: 37.63, 
op-cost: 0.0, total-cost: 20000.0]
+                                                exchange [cardinality: 30.16, 
op-cost: 0.0, total-cost: 264479.97]
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  order (ASC, $$200) 
[cardinality: 37.63, op-cost: 0.0, total-cost: 20000.0]
+                                                  order (ASC, $$200) 
[cardinality: 30.16, op-cost: 0.0, total-cost: 264479.97]
                                                   -- STABLE_SORT [$$200(ASC)]  
|PARTITIONED|
-                                                    exchange [cardinality: 
37.63, op-cost: 0.0, total-cost: 20000.0]
-                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                      project ([$$244, $$208, 
$$249, $$200]) [cardinality: 37.63, op-cost: 0.0, total-cost: 20000.0]
+                                                    exchange [cardinality: 
30.16, op-cost: 0.0, total-cost: 264479.97]
+                                                    -- HASH_PARTITION_EXCHANGE 
[$$200]  |PARTITIONED|
+                                                      project ([$$244, $$208, 
$$200]) [cardinality: 30.16, op-cost: 0.0, total-cost: 264479.97]
                                                       -- STREAM_PROJECT  
|PARTITIONED|
-                                                        exchange [cardinality: 
37.63, op-cost: 0.0, total-cost: 20000.0]
+                                                        exchange [cardinality: 
30.16, op-cost: 0.0, total-cost: 264479.97]
                                                         -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          left outer join 
(eq($$207, $$200)) [cardinality: 30.16, op-cost: 16067.92, total-cost: 394475.1]
-                                                          -- HYBRID_HASH_JOIN 
[$$200][$$207]  |PARTITIONED|
-                                                            exchange 
[cardinality: 37.63, op-cost: 0.0, total-cost: 20000.0]
-                                                            -- 
HASH_PARTITION_EXCHANGE [$$200]  |PARTITIONED|
-                                                              select 
(and(eq($$p.getField(5), 37), like($$p.getField(4), "%COPPER"))) project: 
[$$244, $$200] [cardinality: 37.63, op-cost: 0.0, total-cost: 20000.0]
-                                                              -- STREAM_SELECT 
 |PARTITIONED|
-                                                                assign [$$244] 
<- [$$p.getField(2)] [cardinality: 20000.0, op-cost: 0.0, total-cost: 20000.0]
-                                                                -- ASSIGN  
|PARTITIONED|
-                                                                  exchange 
[cardinality: 20000.0, op-cost: 0.0, total-cost: 20000.0]
+                                                          join (and(eq($$218, 
$$213), eq($$223, $$212))) [cardinality: 30.16, op-cost: 250.8, total-cost: 
264479.97]
+                                                          -- HYBRID_HASH_JOIN 
[$$213, $$223][$$218, $$212]  |PARTITIONED|
+                                                            exchange 
[cardinality: 987.0, op-cost: 0.0, total-cost: 1000.0]
+                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              assign [$$223] 
<- [$$s2.getField(3)] project: [$$244, $$208, $$200, $$213, $$223] 
[cardinality: 987.0, op-cost: 0.0, total-cost: 1000.0]
+                                                              -- ASSIGN  
|PARTITIONED|
+                                                                project 
([$$208, $$213, $$244, $$200, $$s2]) [cardinality: 987.0, op-cost: 0.0, 
total-cost: 1000.0]
+                                                                -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                  exchange 
[cardinality: 987.0, op-cost: 0.0, total-cost: 1000.0]
                                                                   -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    data-scan 
[]<-[$$200, $$p] <- tpch.part [cardinality: 20000.0, op-cost: 20000.0, 
total-cost: 20000.0]
-                                                                    -- 
DATASOURCE_SCAN  |PARTITIONED|
+                                                                    unnest-map 
[$$211, $$s2] <- index-search("supplier", 0, "Default", "tpch", "supplier", 
true, true, 1, $$210, 1, $$210, true, true, true) [cardinality: 987.0, op-cost: 
1000.0, total-cost: 1000.0]
+                                                                    -- 
BTREE_SEARCH  |PARTITIONED|
                                                                       exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                       -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        
empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                        -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                            exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                            -- 
HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                              project ([$$208, 
$$249, $$207]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                              -- 
STREAM_PROJECT  |PARTITIONED|
-                                                                exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  join 
(eq($$207, $$209)) [cardinality: 16030.29, op-cost: 36033.87, total-cost: 
342339.25]
-                                                                  -- 
HYBRID_HASH_JOIN [$$209][$$207]  |PARTITIONED|
-                                                                    exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                    -- 
HASH_PARTITION_EXCHANGE [$$209]  |PARTITIONED|
-                                                                      assign 
[$$249] <- [true] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                      -- 
ASSIGN  |PARTITIONED|
-                                                                        
project ([$$208, $$209]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                        -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                        order 
(ASC, $$210) [cardinality: 987.0, op-cost: 1000.0, total-cost: 1000.0]
+                                                                        -- 
STABLE_SORT [$$210(ASC)]  |PARTITIONED|
                                                                           
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                            
join (eq($$218, $$213)) [cardinality: 16015.05, op-cost: 80079.26, total-cost: 
250271.52]
-                                                                            -- 
HYBRID_HASH_JOIN [$$218][$$213]  |PARTITIONED|
+                                                                          -- 
HASH_PARTITION_EXCHANGE [$$210]  |PARTITIONED|
+                                                                            
project ([$$208, $$210, $$213, $$244, $$200]) [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                                                                            -- 
STREAM_PROJECT  |PARTITIONED|
                                                                               
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                               
-- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
 project ([$$208, $$209, $$218]) [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
-                                                                               
 -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
 join (eq($$207, $$209)) [cardinality: 150.8, op-cost: 80225.92, total-cost: 
262744.94]
+                                                                               
 -- HYBRID_HASH_JOIN [$$209][$$207]  |PARTITIONED|
                                                                                
   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                                
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
     join (eq($$211, $$210)) [cardinality: 80075.26, op-cost: 84023.26, 
total-cost: 170183.26]
-                                                                               
     -- HYBRID_HASH_JOIN [$$210][$$211]  |PARTITIONED|
-                                                                               
       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
     replicate [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
+                                                                               
     -- REPLICATE  |PARTITIONED|
+                                                                               
       exchange [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                                                
       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
         replicate [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
-                                                                               
         -- REPLICATE  |PARTITIONED|
+                                                                               
         project ([$$208, $$210, $$209]) [cardinality: 80000.0, op-cost: 0.0, 
total-cost: 80000.0]
+                                                                               
         -- STREAM_PROJECT  |PARTITIONED|
                                                                                
           exchange [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                                                
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
             project ([$$208, $$209, $$210]) [cardinality: 80000.0, op-cost: 
0.0, total-cost: 80000.0]
-                                                                               
             -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
               exchange [cardinality: 80000.0, op-cost: 0.0, total-cost: 
80000.0]
+                                                                               
             data-scan []<-[$$208, $$209, $$210, $$ps2] <- tpch.partsupp 
[cardinality: 80000.0, op-cost: 80000.0, total-cost: 80000.0]
+                                                                               
             -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                                
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                 data-scan []<-[$$208, $$209, $$210, $$ps2] <- tpch.partsupp 
[cardinality: 80000.0, op-cost: 80000.0, total-cost: 80000.0]
+                                                                               
                 empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                                                                               
                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
   -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
     left outer join (eq($$207, $$200)) [cardinality: 37.67, op-cost: 20169.33, 
total-cost: 102368.36]
+                                                                               
     -- HYBRID_HASH_JOIN [$$207][$$200]  |PARTITIONED|
+                                                                               
       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
         join (true) [cardinality: 20018.81, op-cost: 42039.51, total-cost: 
62048.51]
+                                                                               
         -- NESTED_LOOP  |PARTITIONED|
+                                                                               
           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
             project ([$$207]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
             -- STREAM_PROJECT  |PARTITIONED|
+                                                                               
               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                 data-scan []<-[$$207, $$p2] <- tpch.part [cardinality: 
20000.0, op-cost: 20000.0, total-cost: 20000.0]
                                                                                
                 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                
                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                                
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                
                     empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                                                                                
                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                               
           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
           -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                               
             replicate [cardinality: 1.0, op-cost: 0.0, total-cost: 5.0]
+                                                                               
             -- REPLICATE  |PARTITIONED|
+                                                                               
               exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 5.0]
+                                                                               
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                 select (eq($$r2.getField(1), "EUROPE")) project: [$$213] 
[cardinality: 1.0, op-cost: 0.0, total-cost: 5.0]
+                                                                               
                 -- STREAM_SELECT  |PARTITIONED|
+                                                                               
                   exchange [cardinality: 5.0, op-cost: 0.0, total-cost: 5.0]
+                                                                               
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                     data-scan []<-[$$213, $$r2] <- tpch.region [cardinality: 
5.0, op-cost: 5.0, total-cost: 5.0]
+                                                                               
                     -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
+                                                                               
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                         empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                                                                               
                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                
       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                                
       -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                               
         project ([$$218, $$211]) [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
-                                                                               
         -- STREAM_PROJECT  |PARTITIONED|
-                                                                               
           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
             join (eq($$223, $$212)) [cardinality: 987.0, op-cost: 1087.0, 
total-cost: 2212.0]
-                                                                               
             -- HYBRID_HASH_JOIN [$$223][$$212]  |PARTITIONED|
-                                                                               
               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                 assign [$$223] <- [$$s2.getField(3)] project: [$$211, $$223] 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
                 -- ASSIGN  |PARTITIONED|
-                                                                               
                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                     replicate [cardinality: 1000.0, op-cost: 0.0, total-cost: 
1000.0]
-                                                                               
                     -- REPLICATE  |PARTITIONED|
-                                                                               
                       exchange [cardinality: 1000.0, op-cost: 3948.0, 
total-cost: 4948.0]
-                                                                               
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                         data-scan []<-[$$211, $$s2] <- tpch.supplier 
[cardinality: 1000.0, op-cost: 1000.0, total-cost: 1000.0]
-                                                                               
                         -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                               
                           exchange [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
-                                                                               
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                             empty-tuple-source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
-                                                                               
                             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                               
               exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
               -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                               
                 assign [$$218] <- [$$n2.getField(2)] project: [$$218, $$212] 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
                 -- ASSIGN  |PARTITIONED|
-                                                                               
                   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                     replicate [cardinality: 25.0, op-cost: 0.0, total-cost: 
25.0]
-                                                                               
                     -- REPLICATE  |PARTITIONED|
-                                                                               
                       exchange [cardinality: 25.0, op-cost: 0.0, total-cost: 
25.0]
-                                                                               
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                         data-scan []<-[$$212, $$n2] <- tpch.nation 
[cardinality: 25.0, op-cost: 25.0, total-cost: 25.0]
-                                                                               
                         -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                               
                           exchange [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
-                                                                               
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
                             empty-tuple-source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
-                                                                               
                             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                              
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                              
-- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                               
 replicate [cardinality: 1.0, op-cost: 0.0, total-cost: 5.0]
-                                                                               
 -- REPLICATE  |PARTITIONED|
-                                                                               
   exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 5.0]
-                                                                               
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
     select (eq($$r2.getField(1), "EUROPE")) project: [$$213] [cardinality: 
1.0, op-cost: 0.0, total-cost: 5.0]
-                                                                               
     -- STREAM_SELECT  |PARTITIONED|
-                                                                               
       exchange [cardinality: 5.0, op-cost: 0.0, total-cost: 5.0]
-                                                                               
       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
         data-scan []<-[$$213, $$r2] <- tpch.region [cardinality: 5.0, op-cost: 
5.0, total-cost: 5.0]
-                                                                               
         -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                               
           exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                               
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                               
             empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
-                                                                               
             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                    exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                    -- 
HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                                      project 
([$$207]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                      -- 
STREAM_PROJECT  |PARTITIONED|
+                                                                               
         select (and(eq($$p.getField(5), 37), like($$p.getField(4), 
"%COPPER"))) project: [$$244, $$200] [cardinality: 37.63, op-cost: 0.0, 
total-cost: 20000.0]
+                                                                               
         -- STREAM_SELECT  |PARTITIONED|
+                                                                               
           assign [$$244] <- [$$p.getField(2)] [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                                                                               
           -- ASSIGN  |PARTITIONED|
+                                                                               
             exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
               data-scan []<-[$$200, $$p] <- tpch.part [cardinality: 20000.0, 
op-cost: 20000.0, total-cost: 20000.0]
+                                                                               
               -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                               
                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                               
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                               
                   empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                                                                               
                   -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                            exchange 
[cardinality: 25.0, op-cost: 100.0, total-cost: 125.0]
+                                                            -- 
BROADCAST_EXCHANGE  |PARTITIONED|
+                                                              assign [$$218] 
<- [$$n2.getField(2)] project: [$$218, $$212] [cardinality: 25.0, op-cost: 0.0, 
total-cost: 25.0]
+                                                              -- ASSIGN  
|PARTITIONED|
+                                                                exchange 
[cardinality: 25.0, op-cost: 100.0, total-cost: 125.0]
+                                                                -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  replicate 
[cardinality: 25.0, op-cost: 0.0, total-cost: 25.0]
+                                                                  -- REPLICATE 
 |PARTITIONED|
+                                                                    exchange 
[cardinality: 25.0, op-cost: 0.0, total-cost: 25.0]
+                                                                    -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      
data-scan []<-[$$212, $$n2] <- tpch.nation [cardinality: 25.0, op-cost: 25.0, 
total-cost: 25.0]
+                                                                      -- 
DATASOURCE_SCAN  |PARTITIONED|
                                                                         
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                                         -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          
data-scan []<-[$$207, $$p2] <- tpch.part [cardinality: 20000.0, op-cost: 
20000.0, total-cost: 20000.0]
-                                                                          -- 
DATASOURCE_SCAN  |PARTITIONED|
-                                                                            
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                            -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              
empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                              
-- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                          
empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                         exchange [cardinality: 80075.26, 
op-cost: 0.0, total-cost: 168971.26]
                                         -- HASH_PARTITION_EXCHANGE [$$203]  
|PARTITIONED|
                                           project ([$$237, $$239, $$245, 
$$246, $$247, $$225, $$203, $$202]) [cardinality: 80075.26, op-cost: 0.0, 
total-cost: 168971.26]
@@ -201,7 +179,7 @@
                                               -- HYBRID_HASH_JOIN 
[$$204][$$201]  |PARTITIONED|
                                                 exchange [cardinality: 
80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                 -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                  assign [$$202, $$203, $$204] 
<- [$$208, $$209, $$210] project: [$$202, $$203, $$204] [cardinality: 80000.0, 
op-cost: 0.0, total-cost: 80000.0]
+                                                  assign [$$202, $$204, $$203] 
<- [$$208, $$210, $$209] project: [$$202, $$204, $$203] [cardinality: 80000.0, 
op-cost: 0.0, total-cost: 80000.0]
                                                   -- ASSIGN  |PARTITIONED|
                                                     exchange [cardinality: 
80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                     -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
@@ -209,7 +187,7 @@
                                                       -- REPLICATE  
|PARTITIONED|
                                                         exchange [cardinality: 
80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                         -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
-                                                          project ([$$208, 
$$209, $$210]) [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
+                                                          project ([$$208, 
$$210, $$209]) [cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                           -- STREAM_PROJECT  
|PARTITIONED|
                                                             exchange 
[cardinality: 80000.0, op-cost: 0.0, total-cost: 80000.0]
                                                             -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -223,20 +201,14 @@
                                                 -- BROADCAST_EXCHANGE  
|PARTITIONED|
                                                   assign [$$247, $$246, $$245, 
$$237, $$239, $$225] <- [$$s.getField(6), $$s.getField(4), $$s.getField(2), 
$$s.getField(5), $$s.getField(1), $$s.getField(3)] project: [$$237, $$239, 
$$245, $$246, $$247, $$225, $$201] [cardinality: 1000.0, op-cost: 0.0, 
total-cost: 1000.0]
                                                   -- ASSIGN  |PARTITIONED|
-                                                    assign [$$201, $$s] <- 
[$$211, $$s2] project: [$$201, $$s] [cardinality: 1000.0, op-cost: 0.0, 
total-cost: 1000.0]
-                                                    -- ASSIGN  |PARTITIONED|
-                                                      exchange [cardinality: 
1000.0, op-cost: 3948.0, total-cost: 4948.0]
-                                                      -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                        replicate 
[cardinality: 1000.0, op-cost: 0.0, total-cost: 1000.0]
-                                                        -- REPLICATE  
|PARTITIONED|
-                                                          exchange 
[cardinality: 1000.0, op-cost: 3948.0, total-cost: 4948.0]
-                                                          -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            data-scan 
[]<-[$$211, $$s2] <- tpch.supplier [cardinality: 1000.0, op-cost: 1000.0, 
total-cost: 1000.0]
-                                                            -- DATASOURCE_SCAN 
 |PARTITIONED|
-                                                              exchange 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                              -- 
ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                
empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                                -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                    exchange [cardinality: 
1000.0, op-cost: 3948.0, total-cost: 4948.0]
+                                                    -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                      data-scan []<-[$$201, 
$$s] <- tpch.supplier [cardinality: 1000.0, op-cost: 1000.0, total-cost: 1000.0]
+                                                      -- DATASOURCE_SCAN  
|PARTITIONED|
+                                                        exchange [cardinality: 
0.0, op-cost: 0.0, total-cost: 0.0]
+                                                        -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
+                                                          empty-tuple-source 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                          -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                 exchange [cardinality: 25.0, op-cost: 0.0, 
total-cost: 25.0]
                                 -- HASH_PARTITION_EXCHANGE [$$205]  
|PARTITIONED|
                                   assign [$$238, $$221] <- [$$n.getField(1), 
$$n.getField(2)] project: [$$238, $$221, $$205] [cardinality: 25.0, op-cost: 
0.0, total-cost: 25.0]

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19377
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I1adb17bbf4348d8b495f88eb452cdcd18575f765
Gerrit-Change-Number: 19377
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]
Gerrit-MessageType: newchange

Reply via email to