>From <[email protected]>:

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


Change subject: [NO ISSUE][COMP] Fix for failing q10 of ch2++
......................................................................

[NO ISSUE][COMP] Fix for failing q10 of ch2++

Change-Id: If5a1040e8b178612986b00b5e2add652cc2b749a
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
M 
asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q10.plan
M 
asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
3 files changed, 86 insertions(+), 80 deletions(-)



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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index b9b35c2..0ad51bc 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -91,6 +91,8 @@

     // for the Array UNNEST optimization. The main list is for each leafInput.
     private List<List<List<ILogicalOperator>>> unnestOpsInfo;
+    private final List<Boolean> realLeafInputs = new ArrayList();
+
     private boolean arrayUnnestPossible = false;
     // The Distinct operators for each DataSourceScan operator (if applicable)
     private HashMap<DataSourceScanOperator, ILogicalOperator> 
dataScanAndGroupByDistinctOps;
@@ -102,7 +104,6 @@
     private ILogicalOperator rootOrderByOp;

     private List<LogicalVariable> resultAndJoinVars = new ArrayList();
-    private final List<Boolean> realLeafInputs = new ArrayList();
     private int numberOfFromTerms;

     private List<Triple<ILogicalOperator, ILogicalOperator, 
List<ILogicalOperator>>> modifyUnnestInfo;
@@ -189,6 +190,7 @@
         if (everyLeafInputDoesNotHaveADataScanOperator(leafInputs)) {
             return cleanUp();
         }
+
         if (LOGGER.isTraceEnabled()) {
             viewInPlan = new ALogicalPlanImpl(opRef).toString(); //useful when 
debugging
         }
@@ -208,8 +210,7 @@
             //realInput 1 = false
             //realInput 2 = false
             //realInput 3 = true (KS2)
-            //realInput 4 = false
-            //Note: The Unnesting code may move UNNEST Ops from the leafInputs 
higher up in the plan.
+            //realInput 4 = false   -- may not be seen because the last unnest 
appears above the join
             //The code is not designed to deal with UNNEST Ops that are not in 
the leafInputs.
             int i = -1;
             int j = -1;
@@ -537,20 +538,21 @@
         for (ILogicalOperator op : unnestOps) {
             UnnestOperator unnestOp = (UnnestOperator) op;
             if (anyVarIsAJoinVar(unnestOp.getVariables())) {
-                unnestOpsInfo.add(new ArrayList<>()); // each leafInput must 
have one entry
                 //not possible to unnest this unnest op. If these variables 
participate in join predicates, then unnestOps cannot be moved above joins
                 continue;
             }
 
             Pair<Boolean, List<ILogicalOperator>> info = 
findAllAssociatedAssingOps(p, unnestOp);
             if (!info.first) {// something 'bad' happened, so this unnestOp 
cannot be unnested
-                unnestOpsInfo.add(new ArrayList<>()); // each leafInput must 
have one entry
                 //not possible to unnest this unnest op. If these variables 
participate in join predicates, then unnestOps cannot be moved above joins
                 continue;
             }
             count++; // found something unnestable
             bigList.add(info.second);
         }
+        if (count == 0) {
+            unnestOpsInfo.add(new ArrayList<>());
+        }
         if (count > 0) {
             arrayUnnestPossible = true;
             unnestOpsInfo.add(bigList);
@@ -565,9 +567,13 @@
             UnnestOperator unnestOp) throws AlgebricksException {
         Pair<Boolean, List<ILogicalOperator>> info = new Pair<>(true, new 
ArrayList<>());
         ILogicalOperator p = leafInput;
+        boolean unnestOpSeen = false;

         List<ILogicalOperator> ops = new ArrayList<>(); //Gather all 
AssignsOps, if any, associated wth this unnestOp
         while (p != null && p.getOperatorTag() != 
LogicalOperatorTag.EMPTYTUPLESOURCE) {
+            if (p == unnestOp) {
+                unnestOpSeen = true;
+            }
             if (p.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
                 AssignOperator aOp = (AssignOperator) p;

@@ -583,7 +589,7 @@
                             LogicalVariable unnestVar = 
unnestOp.getVariables().get(0);
                             if (unnestVar == var) {
                                 if ((anyVarIsAJoinVar(aOp.getVariables())
-                                        || assignVarPresentInLeafInput(aOp, 
leafInput))) {
+                                        || assignVarPresentInLeafInput(aOp, 
leafInput)) || !unnestOpSeen) { // cant handle references inside arrays yet
                                     info.first = false;
                                     return info;
                                 } else {
@@ -599,10 +605,10 @@
         ops.add(unnestOp); // the unnestOp will be the last (and may be the 
only op)
         info.second = ops;

-        /*
-        unnestOpsInfo.add(bigList); // one for each LeafInput. If empty, means 
that there are no array references in this leafInout
-        // also need to add some dummy entries for the fake leafInputs. Add as 
many as unnestOps. This will make the code in setCardsAndSizes happy
-         */
+        // one for each LeafInput. If empty, means that there are no array 
references in this leafInout
+        // also need to add some dummy entries for the fake leafInputs. Add as 
many as unnestOps.
+        // This will make the code in setCardsAndSizes happy
+
         return info;
     }

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 6f38358..7e3d906 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
@@ -1,55 +1,69 @@
-distribute result [$$159] [cardinality: 9.223372036854776E16, doc-size: 1.0, 
op-cost: 0.0, total-cost: 1.25003000009E12]
+distribute result [$$159] [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, 
total-cost: 1.25015E11]
 -- DISTRIBUTE_RESULT  |UNPARTITIONED|
-  exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, 
total-cost: 1.25003000009E12]
+  exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost: 
1.25015E11]
   -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-    limit 20 [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, 
total-cost: 1.25003000009E12]
+    limit 20 [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost: 
1.25015E11]
     -- STREAM_LIMIT  |UNPARTITIONED|
-      assign [$$159] <- [{"c_id": $$c_id, "c_last": $$c_last, "revenue": 
$$175, "c_city": $$c_city, "c_phone": $$c_phone, "n_name": $$n_name}] project: 
[$$159] [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, 
total-cost: 1.25003000009E12]
+      assign [$$159] <- [{"c_id": $$c_id, "c_last": $$c_last, "revenue": 
$$175, "c_city": $$c_city, "c_phone": $$c_phone, "n_name": $$n_name}] project: 
[$$159] [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost: 
1.25015E11]
       -- ASSIGN  |PARTITIONED|
-        exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 
0.0, total-cost: 1.25003000009E12]
+        exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, 
total-cost: 1.25015E11]
         -- SORT_MERGE_EXCHANGE [$$175(DESC) ]  |PARTITIONED|
-          limit 20 [cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 
0.0, total-cost: 1.25003000009E12]
+          limit 20 [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, 
total-cost: 1.25015E11]
           -- STREAM_LIMIT  |PARTITIONED|
-            exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, 
op-cost: 0.0, total-cost: 1.25003000009E12]
+            exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, 
total-cost: 1.25015E11]
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              order (topK: 20) (DESC, $$175) [cardinality: 
9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+              order (topK: 20) (DESC, $$175) [cardinality: 6.25E16, doc-size: 
-3.0, op-cost: 0.0, total-cost: 1.25015E11]
               -- STABLE_SORT [topK: 20] [$$175(DESC)]  |PARTITIONED|
-                exchange [cardinality: 9.223372036854776E16, doc-size: 1.0, 
op-cost: 0.0, total-cost: 1.25003000009E12]
+                exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, 
total-cost: 1.25015E11]
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  group by ([$$c_id := $$184; $$c_last := $$185; $$c_city := 
$$186; $$c_phone := $$187; $$n_name := $$188]) decor ([]) {
-                            aggregate [$$175] <- [agg-global-sql-sum($$183)] 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                  group by ([$$c_id := $$182; $$c_last := $$183; $$c_city := 
$$184; $$c_phone := $$185; $$n_name := $$186]) decor ([]) {
+                            aggregate [$$175] <- [agg-global-sql-sum($$181)] 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                             -- AGGREGATE  |LOCAL|
                               nested tuple source [cardinality: 0.0, doc-size: 
0.0, op-cost: 0.0, total-cost: 0.0]
                               -- NESTED_TUPLE_SOURCE  |LOCAL|
-                         } [cardinality: 9.223372036854776E16, doc-size: 1.0, 
op-cost: 0.0, total-cost: 1.25003000009E12]
-                  -- SORT_GROUP_BY[$$184, $$185, $$186, $$187, $$188]  
|PARTITIONED|
-                    exchange [cardinality: 9.223372036854776E16, doc-size: 
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
-                    -- HASH_PARTITION_EXCHANGE [$$184, $$185, $$186, $$187, 
$$188]  |PARTITIONED|
-                      group by ([$$184 := $$166; $$185 := $$161; $$186 := 
$$162; $$187 := $$163; $$188 := $$164]) decor ([]) {
-                                aggregate [$$183] <- 
[agg-local-sql-sum($$156)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                         } [cardinality: 6.25E16, doc-size: -3.0, op-cost: 
0.0, total-cost: 1.25015E11]
+                  -- SORT_GROUP_BY[$$182, $$183, $$184, $$185, $$186]  
|PARTITIONED|
+                    exchange [cardinality: 6.25E16, doc-size: -3.0, op-cost: 
0.0, total-cost: 1.25015E11]
+                    -- HASH_PARTITION_EXCHANGE [$$182, $$183, $$184, $$185, 
$$186]  |PARTITIONED|
+                      group by ([$$182 := $$166; $$183 := $$161; $$184 := 
$$162; $$185 := $$163; $$186 := $$164]) decor ([]) {
+                                aggregate [$$181] <- 
[agg-local-sql-sum($$156)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                                 -- AGGREGATE  |LOCAL|
                                   nested tuple source [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                   -- NESTED_TUPLE_SOURCE  |LOCAL|
-                             } [cardinality: 9.223372036854776E16, doc-size: 
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+                             } [cardinality: 6.25E16, doc-size: -3.0, op-cost: 
0.0, total-cost: 1.25015E11]
                       -- SORT_GROUP_BY[$$166, $$161, $$162, $$163, $$164]  
|PARTITIONED|
-                        exchange [cardinality: 9.223372036854776E16, doc-size: 
1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+                        exchange [cardinality: 6.25E16, doc-size: -3.0, 
op-cost: 0.0, total-cost: 1.25015E11]
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          project ([$$156, $$166, $$161, $$162, $$163, $$164]) 
[cardinality: 9.223372036854776E16, doc-size: 1.0, op-cost: 0.0, total-cost: 
1.25003000009E12]
+                          project ([$$156, $$166, $$161, $$162, $$163, $$164]) 
[cardinality: 6.25E16, doc-size: -3.0, op-cost: 0.0, total-cost: 1.25015E11]
                           -- STREAM_PROJECT  |PARTITIONED|
-                            exchange [cardinality: 9.223372036854776E16, 
doc-size: 1.0, op-cost: 0.0, total-cost: 1.25003000009E12]
+                            exchange [cardinality: 6.25E16, doc-size: -3.0, 
op-cost: 0.0, total-cost: 1.25015E11]
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              join (eq($$176, $$177)) [cardinality: 
9.223372036854776E16, doc-size: 1.0, op-cost: 1.250004E12, total-cost: 
1.25003000009E12]
+                              join (eq($$176, $$177)) [cardinality: 6.25E16, 
doc-size: -3.0, op-cost: 1.25004E11, total-cost: 1.25015E11]
                               -- HYBRID_HASH_JOIN [$$177][$$176]  |PARTITIONED|
-                                exchange [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
+                                exchange [cardinality: 1.25E11, doc-size: 
-2.0, op-cost: 0.0, total-cost: 6000000.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  project ([$$156, $$166, $$161, $$162, $$163, 
$$177]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 
2.100009E7]
+                                  project ([$$156, $$166, $$161, $$162, $$163, 
$$177]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 
6000000.0]
                                   -- STREAM_PROJECT  |PARTITIONED|
-                                    exchange [cardinality: 1.25E12, doc-size: 
2.0, op-cost: 0.0, total-cost: 2.100009E7]
+                                    exchange [cardinality: 1.25E11, doc-size: 
-2.0, op-cost: 0.0, total-cost: 6000000.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      join (and(eq($$166, $$170), eq($$171, 
$$172), eq($$173, $$174))) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 
1.4E7, total-cost: 2.100009E7]
-                                      -- HYBRID_HASH_JOIN [$$170, $$172, 
$$174][$$166, $$171, $$173]  |PARTITIONED|
+                                      join (and(eq($$166, $$170), eq($$171, 
$$172), eq($$173, $$174))) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 
2000000.0, total-cost: 6000000.0]
+                                      -- HYBRID_HASH_JOIN [$$166, $$171, 
$$173][$$170, $$172, $$174]  |PARTITIONED|
                                         exchange [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$166, 
$$171, $$173]  |PARTITIONED|
+                                          assign [$$177, $$163, $$162, $$161, 
$$173, $$171, $$166] <- [get-item(string-to-codepoint($$c.getField("c_state")), 
0), $$c.getField("c_phone"), $$c.getField("c_city"), $$c.getField("c_last"), 
$$c.getField("c_w_id"), $$c.getField("c_d_id"), $$c.getField("c_id")] project: 
[$$166, $$161, $$162, $$163, $$177, $$171, $$173] [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+                                          -- ASSIGN  |PARTITIONED|
+                                            project ([$$c]) [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              exchange [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                data-scan []<-[$$168, $$c] <- 
test.customer [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, 
total-cost: 1000000.0]
+                                                -- DATASOURCE_SCAN  
|PARTITIONED|
+                                                  exchange [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
+                                                    empty-tuple-source 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                                    -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
+                                        exchange [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
+                                        -- HASH_PARTITION_EXCHANGE [$$170, 
$$172, $$174]  |PARTITIONED|
                                           assign [$$156] <- 
[$$ol.getField("ol_amount")] project: [$$156, $$170, $$172, $$174] 
[cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
                                           -- ASSIGN  |PARTITIONED|
                                             unnest $$ol <- 
scan-collection($$179) project: [$$174, $$172, $$170, $$ol] [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
@@ -68,20 +82,6 @@
                                                         -- ONE_TO_ONE_EXCHANGE 
 |PARTITIONED|
                                                           empty-tuple-source 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                           -- 
EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                        exchange [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                          assign [$$177, $$163, $$162, $$161, 
$$173, $$171, $$166] <- [get-item(string-to-codepoint($$c.getField("c_state")), 
0), $$c.getField("c_phone"), $$c.getField("c_city"), $$c.getField("c_last"), 
$$c.getField("c_w_id"), $$c.getField("c_d_id"), $$c.getField("c_id")] project: 
[$$166, $$161, $$162, $$163, $$177, $$171, $$173] [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                          -- ASSIGN  |PARTITIONED|
-                                            project ([$$c]) [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              exchange [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                              -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                data-scan []<-[$$168, $$c] <- 
test.customer [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, 
total-cost: 1000000.0]
-                                                -- DATASOURCE_SCAN  
|PARTITIONED|
-                                                  exchange [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                  -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
-                                                    empty-tuple-source 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
-                                                    -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
                                 exchange [cardinality: 1000000.0, doc-size: 
-1.0, op-cost: 0.0, total-cost: 1000000.0]
                                 -- BROADCAST_EXCHANGE  |PARTITIONED|
                                   assign [$$164, $$176] <- 
[$$n.getField("n_name"), $$n.getField("n_nationkey")] project: [$$164, $$176] 
[cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
diff --git 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
index cdead55..9de7f27 100644
--- 
a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q18.plan
@@ -1,55 +1,55 @@
-distribute result [$$169] [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+distribute result [$$169] [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
 -- DISTRIBUTE_RESULT  |UNPARTITIONED|
-  exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 
2.100009E7]
+  exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 
6000000.0]
   -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-    limit 100 [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 
2.100009E7]
+    limit 100 [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 
6000000.0]
     -- STREAM_LIMIT  |UNPARTITIONED|
-      assign [$$169] <- [{"c_last": $$c_last, "o_id": $$c_id, "o_entry_d": 
$$o_entry_d, "o_ol_cnt": $$o_ol_cnt, "$1": $$192}] project: [$$169] 
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+      assign [$$169] <- [{"c_last": $$c_last, "o_id": $$c_id, "o_entry_d": 
$$o_entry_d, "o_ol_cnt": $$o_ol_cnt, "$1": $$192}] project: [$$169] 
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
       -- ASSIGN  |PARTITIONED|
-        project ([$$c_last, $$c_id, $$o_entry_d, $$o_ol_cnt, $$192]) 
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+        project ([$$c_last, $$c_id, $$o_entry_d, $$o_ol_cnt, $$192]) 
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
         -- STREAM_PROJECT  |PARTITIONED|
-          exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+          exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
           -- SORT_MERGE_EXCHANGE [$$193(DESC), $$o_entry_d(ASC) ]  
|PARTITIONED|
-            limit 100 [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+            limit 100 [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
             -- STREAM_LIMIT  |PARTITIONED|
-              exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+              exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                order (topK: 100) (DESC, $$193) (ASC, $$o_entry_d) 
[cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, total-cost: 2.100009E7]
+                order (topK: 100) (DESC, $$193) (ASC, $$o_entry_d) 
[cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, total-cost: 6000000.0]
                 -- STABLE_SORT [topK: 100] [$$193(DESC), $$o_entry_d(ASC)]  
|PARTITIONED|
-                  exchange [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+                  exchange [cardinality: 1.25E11, doc-size: -2.0, op-cost: 
0.0, total-cost: 6000000.0]
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    select (gt($$191, 200)) project: [$$c_last, $$c_id, 
$$o_entry_d, $$o_ol_cnt, $$192, $$193] [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
+                    select (gt($$191, 200)) project: [$$c_last, $$c_id, 
$$o_entry_d, $$o_ol_cnt, $$192, $$193] [cardinality: 1.25E11, doc-size: -2.0, 
op-cost: 0.0, total-cost: 6000000.0]
                     -- STREAM_SELECT  |PARTITIONED|
-                      project ([$$191, $$192, $$193, $$c_id, $$c_last, 
$$o_entry_d, $$o_ol_cnt]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+                      project ([$$191, $$192, $$193, $$c_id, $$c_last, 
$$o_entry_d, $$o_ol_cnt]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
                       -- STREAM_PROJECT  |PARTITIONED|
-                        exchange [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
+                        exchange [cardinality: 1.25E11, doc-size: -2.0, 
op-cost: 0.0, total-cost: 6000000.0]
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          group by ([$$o_id := $$201; $$o_w_id := $$202; 
$$o_d_id := $$203; $$c_id := $$204; $$c_last := $$205; $$o_entry_d := $$206; 
$$o_ol_cnt := $$207]) decor ([]) {
-                                    aggregate [$$191, $$192, $$193] <- 
[agg-global-sql-sum($$198), agg-global-sql-sum($$199), 
agg-global-sql-sum($$200)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                          group by ([$$o_id := $$199; $$o_w_id := $$200; 
$$o_d_id := $$201; $$c_id := $$202; $$c_last := $$203; $$o_entry_d := $$204; 
$$o_ol_cnt := $$205]) decor ([]) {
+                                    aggregate [$$191, $$192, $$193] <- 
[agg-global-sql-sum($$196), agg-global-sql-sum($$197), 
agg-global-sql-sum($$198)] [cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                                     -- AGGREGATE  |LOCAL|
                                       nested tuple source [cardinality: 0.0, 
doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                       -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                 } [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
-                          -- SORT_GROUP_BY[$$201, $$202, $$203, $$204, $$205, 
$$206, $$207]  |PARTITIONED|
-                            exchange [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
-                            -- HASH_PARTITION_EXCHANGE [$$201, $$202, $$203, 
$$204, $$205, $$206, $$207]  |PARTITIONED|
-                              group by ([$$201 := $$175; $$202 := $$183; $$203 
:= $$184; $$204 := $$185; $$205 := $$179; $$206 := $$180; $$207 := $$181]) 
decor ([]) {
-                                        aggregate [$$198, $$199, $$200] <- 
[agg-local-sql-sum($$160), agg-local-sql-sum($$160), agg-local-sql-sum($$160)] 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
+                                 } [cardinality: 1.25E11, doc-size: -2.0, 
op-cost: 0.0, total-cost: 6000000.0]
+                          -- SORT_GROUP_BY[$$199, $$200, $$201, $$202, $$203, 
$$204, $$205]  |PARTITIONED|
+                            exchange [cardinality: 1.25E11, doc-size: -2.0, 
op-cost: 0.0, total-cost: 6000000.0]
+                            -- HASH_PARTITION_EXCHANGE [$$199, $$200, $$201, 
$$202, $$203, $$204, $$205]  |PARTITIONED|
+                              group by ([$$199 := $$175; $$200 := $$183; $$201 
:= $$184; $$202 := $$185; $$203 := $$179; $$204 := $$180; $$205 := $$181]) 
decor ([]) {
+                                        aggregate [$$196, $$197, $$198] <- 
[agg-local-sql-sum($$160), agg-local-sql-sum($$160), agg-local-sql-sum($$160)] 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                         -- AGGREGATE  |LOCAL|
                                           nested tuple source [cardinality: 
0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                     } [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
+                                     } [cardinality: 1.25E11, doc-size: -2.0, 
op-cost: 0.0, total-cost: 6000000.0]
                               -- SORT_GROUP_BY[$$175, $$183, $$184, $$185, 
$$179, $$180, $$181]  |PARTITIONED|
-                                exchange [cardinality: 1.25E12, doc-size: 2.0, 
op-cost: 0.0, total-cost: 2.100009E7]
+                                exchange [cardinality: 1.25E11, doc-size: 
-2.0, op-cost: 0.0, total-cost: 6000000.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  project ([$$160, $$175, $$183, $$184, $$185, 
$$179, $$180, $$181]) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 0.0, 
total-cost: 2.100009E7]
+                                  project ([$$160, $$175, $$183, $$184, $$185, 
$$179, $$180, $$181]) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 0.0, 
total-cost: 6000000.0]
                                   -- STREAM_PROJECT  |PARTITIONED|
-                                    exchange [cardinality: 1.25E12, doc-size: 
2.0, op-cost: 0.0, total-cost: 2.100009E7]
+                                    exchange [cardinality: 1.25E11, doc-size: 
-2.0, op-cost: 0.0, total-cost: 6000000.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      join (and(eq($$185, $$188), eq($$189, 
$$183), eq($$190, $$184))) [cardinality: 1.25E12, doc-size: 2.0, op-cost: 
1.4E7, total-cost: 2.100009E7]
+                                      join (and(eq($$185, $$188), eq($$189, 
$$183), eq($$190, $$184))) [cardinality: 1.25E11, doc-size: -2.0, op-cost: 
2000000.0, total-cost: 6000000.0]
                                       -- HYBRID_HASH_JOIN [$$188, $$183, 
$$184][$$185, $$189, $$190]  |PARTITIONED|
                                         exchange [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$188, 
$$183, $$184]  |PARTITIONED|
                                           assign [$$160] <- 
[$$ol.getField("ol_amount")] project: [$$160, $$175, $$183, $$184, $$180, 
$$181, $$188] [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, 
total-cost: 1000000.0]
                                           -- ASSIGN  |PARTITIONED|
                                             unnest $$ol <- 
scan-collection($$194) project: [$$181, $$180, $$175, $$188, $$183, $$184, 
$$ol] [cardinality: 1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 
1000000.0]
@@ -67,7 +67,7 @@
                                                         empty-tuple-source 
[cardinality: 0.0, doc-size: 0.0, op-cost: 0.0, total-cost: 0.0]
                                                         -- EMPTY_TUPLE_SOURCE  
|PARTITIONED|
                                         exchange [cardinality: 1000000.0, 
doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
-                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$185, 
$$189, $$190]  |PARTITIONED|
                                           assign [$$179, $$190, $$189, $$185] 
<- [$$c.getField("c_last"), $$c.getField("c_d_id"), $$c.getField("c_w_id"), 
$$c.getField("c_id")] project: [$$185, $$179, $$189, $$190] [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]
                                           -- ASSIGN  |PARTITIONED|
                                             project ([$$c]) [cardinality: 
1000000.0, doc-size: -1.0, op-cost: 0.0, total-cost: 1000000.0]

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

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: phoenix
Gerrit-Change-Id: If5a1040e8b178612986b00b5e2add652cc2b749a
Gerrit-Change-Number: 20516
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]

Reply via email to