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

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


The following commit(s) were added to refs/heads/master by this push:
     new 1bde525d5e [ASTERIXDB-3488][COMP] Unnest factor computed incorrectly 
in some cases
1bde525d5e is described below

commit 1bde525d5ee03c12de7f194998239bd5a78a80ef
Author: murali4104 <[email protected]>
AuthorDate: Tue Aug 20 17:12:53 2024 -0700

    [ASTERIXDB-3488][COMP] Unnest factor computed incorrectly in some cases
    
    Change-Id: I1fd1302eb22a24d7b60a4ae328a3ab485540f13d
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18703
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Vijay Sarathy <[email protected]>
---
 .../asterix/optimizer/rules/cbo/JoinNode.java      |  4 +-
 .../apache/asterix/optimizer/rules/cbo/Stats.java  |  8 +--
 .../column/filter/subplan/subplan.042.plan         | 66 +++++++++++-----------
 .../column/filter/subplan/subplan.062.plan         | 56 +++++++++---------
 4 files changed, 67 insertions(+), 67 deletions(-)

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 b988ad9b7a..26707e11cc 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
@@ -300,10 +300,10 @@ public class JoinNode {
         parent.getInputs().get(0).setValue(deepCopyofScan);
         finalDatasetCard = origDatasetCard = idxDetails.getSourceCardinality();
         sampleCard = Math.min(idxDetails.getSampleCardinalityTarget(), 
origDatasetCard);
-        boolean unnest = joinEnum.findUnnestOp(selOp);
+        boolean unnest = joinEnum.findUnnestOp(leafInput);
         if (unnest) {
             ILogicalExpression saveExpr = selOp.getCondition().getValue();
-            double unnestSampleCard = 
joinEnum.stats.computeUnnestedOriginalCardinality(selOp);
+            double unnestSampleCard = 
joinEnum.stats.computeUnnestedOriginalCardinality(leafInput);
             selOp.getCondition().setValue(saveExpr); // restore the expression
             unnestFactor = unnestSampleCard / sampleCard;
             sampleCard = unnestSampleCard;
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
index 06a3c4bdb5..c6f274f47e 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
@@ -538,11 +538,11 @@ public class Stats {
         return record.numberOfFields();
     }
 
-    public double computeUnnestedOriginalCardinality(SelectOperator selOp) 
throws AlgebricksException {
+    public double computeUnnestedOriginalCardinality(ILogicalOperator op) 
throws AlgebricksException {
         // Replace ALL SELECTS with TRUE, restore them after running the 
sampling query.
-        List<ILogicalExpression> selExprs = 
storeSelectConditionsAndMakeThemTrue(selOp, null);
-        List<List<IAObject>> result = runSamplingQuery(optCtx, selOp);
-        restoreAllSelectConditions(selOp, selExprs, null);
+        List<ILogicalExpression> selExprs = 
storeSelectConditionsAndMakeThemTrue(op, null);
+        List<List<IAObject>> result = runSamplingQuery(optCtx, op);
+        restoreAllSelectConditions(op, selExprs, null);
         return findPredicateCardinality(result, false);
     }
 
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
index 7fe9bcc850..642871803d 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
@@ -1,72 +1,72 @@
-distribute result [$$70] [cardinality: 6.0, op-cost: 0.0, total-cost: 28.6]
+distribute result [$$70] [cardinality: 6.0, op-cost: 0.0, total-cost: 23.6]
 -- DISTRIBUTE_RESULT  |UNPARTITIONED|
-  exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 28.6]
+  exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 23.6]
   -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
-    aggregate [$$70] <- [agg-sql-sum($$76)] [cardinality: 6.0, op-cost: 0.0, 
total-cost: 28.6]
+    aggregate [$$70] <- [agg-sql-sum($$76)] [cardinality: 6.0, op-cost: 0.0, 
total-cost: 23.6]
     -- AGGREGATE  |UNPARTITIONED|
-      exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 28.6]
+      exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 23.6]
       -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-        aggregate [$$76] <- [agg-sql-count(1)] [cardinality: 6.0, op-cost: 
0.0, total-cost: 28.6]
+        aggregate [$$76] <- [agg-sql-count(1)] [cardinality: 6.0, op-cost: 
0.0, total-cost: 23.6]
         -- AGGREGATE  |PARTITIONED|
-          exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 28.6]
+          exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 23.6]
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            join (or(eq($$71, "7"), neq($$69, 0))) [cardinality: 6.0, op-cost: 
12.6, total-cost: 28.6]
+            join (or(eq($$71, "7"), neq($$69, 0))) [cardinality: 6.0, op-cost: 
12.6, total-cost: 23.6]
             -- NESTED_LOOP  |PARTITIONED|
-              exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
+              exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 1.0]
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                project ([$$71]) [cardinality: 6.0, op-cost: 0.0, total-cost: 
6.0]
+                project ([$$71]) [cardinality: 1.0, op-cost: 0.0, total-cost: 
1.0]
                 -- STREAM_PROJECT  |PARTITIONED|
-                  assign [$$71] <- 
[$$p.getField("arrayOrObject").getField("text")] [cardinality: 6.0, op-cost: 
0.0, total-cost: 6.0]
+                  assign [$$71] <- 
[$$p.getField("arrayOrObject").getField("text")] [cardinality: 1.0, op-cost: 
0.0, total-cost: 1.0]
                   -- ASSIGN  |PARTITIONED|
-                    project ([$$p]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                    project ([$$p]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                     -- STREAM_PROJECT  |PARTITIONED|
-                      assign [$$p] <- [$$b2] [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                      assign [$$p] <- [$$b2] [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                       -- ASSIGN  |PARTITIONED|
-                        exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 
6.0]
+                        exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 
1.0]
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          replicate [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                          replicate [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                           -- REPLICATE  |PARTITIONED|
-                            exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                            exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              project ([$$b2]) [cardinality: 6.0, op-cost: 
0.0, total-cost: 6.0]
+                              project ([$$b2]) [cardinality: 1.0, op-cost: 
0.0, total-cost: 1.0]
                               -- STREAM_PROJECT  |PARTITIONED|
-                                exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                                exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  data-scan []<-[$$68, $$b2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) 
[cardinality: 6.0, op-cost: 6.0, total-cost: 6.0]
+                                  data-scan []<-[$$68, $$b2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) 
[cardinality: 1.0, op-cost: 1.0, total-cost: 1.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: 1.0, op-cost: 4.0, total-cost: 10.0]
+              exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 5.0]
               -- BROADCAST_EXCHANGE  |PARTITIONED|
-                aggregate [$$69] <- [agg-sum($$75)] [cardinality: 1.0, 
op-cost: 0.0, total-cost: 6.0]
+                aggregate [$$69] <- [agg-sum($$75)] [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
                 -- AGGREGATE  |UNPARTITIONED|
-                  exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 10.0]
+                  exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 5.0]
                   -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-                    aggregate [$$75] <- [agg-count(1)] [cardinality: 1.0, 
op-cost: 0.0, total-cost: 6.0]
+                    aggregate [$$75] <- [agg-count(1)] [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
                     -- AGGREGATE  |PARTITIONED|
-                      select (eq($$ao.getField("text"), "1")) [cardinality: 
1.0, op-cost: 0.0, total-cost: 6.0]
+                      select (eq($$ao.getField("text"), "1")) [cardinality: 
1.0, op-cost: 0.0, total-cost: 1.0]
                       -- STREAM_SELECT  |PARTITIONED|
-                        project ([$$ao]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                        project ([$$ao]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                         -- STREAM_PROJECT  |PARTITIONED|
-                          unnest $$ao <- scan-collection($$72) [cardinality: 
6.0, op-cost: 0.0, total-cost: 6.0]
+                          unnest $$ao <- scan-collection($$72) [cardinality: 
1.0, op-cost: 0.0, total-cost: 1.0]
                           -- UNNEST  |PARTITIONED|
-                            project ([$$72]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                            project ([$$72]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                             -- STREAM_PROJECT  |PARTITIONED|
-                              assign [$$72] <- 
[$$b2.getField("arrayOrObject")] [cardinality: 6.0, op-cost: 0.0, total-cost: 
6.0]
+                              assign [$$72] <- 
[$$b2.getField("arrayOrObject")] [cardinality: 1.0, op-cost: 0.0, total-cost: 
1.0]
                               -- ASSIGN  |PARTITIONED|
-                                exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                                exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  replicate [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                                  replicate [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                                   -- REPLICATE  |PARTITIONED|
-                                    exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                                    exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      project ([$$b2]) [cardinality: 6.0, 
op-cost: 0.0, total-cost: 6.0]
+                                      project ([$$b2]) [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
                                       -- STREAM_PROJECT  |PARTITIONED|
-                                        exchange [cardinality: 6.0, op-cost: 
4.0, total-cost: 10.0]
+                                        exchange [cardinality: 1.0, op-cost: 
4.0, total-cost: 5.0]
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          data-scan []<-[$$68, $$b2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) 
[cardinality: 6.0, op-cost: 6.0, total-cost: 6.0]
+                                          data-scan []<-[$$68, $$b2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) 
[cardinality: 1.0, op-cost: 1.0, total-cost: 1.0]
                                           -- DATASOURCE_SCAN  |PARTITIONED|
                                             exchange [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
                                             -- ONE_TO_ONE_EXCHANGE  
|PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.062.plan
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.062.plan
index 70f874e510..345fc1225e 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.062.plan
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.062.plan
@@ -1,8 +1,8 @@
-distribute result [$$63] [cardinality: 2.1, op-cost: 0.0, total-cost: 20.41]
+distribute result [$$63] [cardinality: 2.1, op-cost: 0.0, total-cost: 15.41]
 -- DISTRIBUTE_RESULT  |PARTITIONED|
-  exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 20.41]
+  exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 15.41]
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-    join (true) [cardinality: 2.1, op-cost: 4.41, total-cost: 20.41]
+    join (true) [cardinality: 2.1, op-cost: 4.41, total-cost: 15.41]
     -- NESTED_LOOP  |PARTITIONED|
       exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 6.0]
       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -10,59 +10,59 @@ distribute result [$$63] [cardinality: 2.1, op-cost: 0.0, 
total-cost: 20.41]
         -- STREAM_PROJECT  |PARTITIONED|
           select (eq($$p.getField("arrayOrObject").getField("text"), "7")) 
[cardinality: 1.0, op-cost: 0.0, total-cost: 6.0]
           -- STREAM_SELECT  |PARTITIONED|
-            project ([$$p]) [cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
+            project ([$$p]) [cardinality: 1.0, op-cost: 0.0, total-cost: 1.0]
             -- STREAM_PROJECT  |PARTITIONED|
-              assign [$$p] <- [$$p2] [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+              assign [$$p] <- [$$p2] [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
               -- ASSIGN  |PARTITIONED|
-                exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
+                exchange [cardinality: 1.0, op-cost: 0.0, total-cost: 1.0]
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  replicate [cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
+                  replicate [cardinality: 1.0, op-cost: 0.0, total-cost: 1.0]
                   -- REPLICATE  |PARTITIONED|
-                    exchange [cardinality: 6.0, op-cost: 4.0, total-cost: 10.0]
+                    exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 5.0]
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      project ([$$p2]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                      project ([$$p2]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                       -- STREAM_PROJECT  |PARTITIONED|
-                        exchange [cardinality: 6.0, op-cost: 4.0, total-cost: 
10.0]
+                        exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 
5.0]
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          data-scan []<-[$$62, $$p2] <- test.ColumnDataset 
project ({arrayOrObject:<[{text:any}],{text:any}>}) filter on: 
or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "1"), 
le(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "2"))) 
range-filter on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getFi [...]
+                          data-scan []<-[$$62, $$p2] <- test.ColumnDataset 
project ({arrayOrObject:<[{text:any}],{text:any}>}) filter on: 
or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "1"), 
le(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "2"))) 
range-filter on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getFi [...]
                           -- 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: 1.0, op-cost: 4.0, total-cost: 10.0]
+      exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 5.0]
       -- BROADCAST_EXCHANGE  |PARTITIONED|
-        aggregate [$$63] <- [agg-sql-sum($$67)] [cardinality: 1.0, op-cost: 
0.0, total-cost: 6.0]
+        aggregate [$$63] <- [agg-sql-sum($$67)] [cardinality: 1.0, op-cost: 
0.0, total-cost: 1.0]
         -- AGGREGATE  |UNPARTITIONED|
-          exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 10.0]
+          exchange [cardinality: 1.0, op-cost: 4.0, total-cost: 5.0]
           -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-            aggregate [$$67] <- [agg-sql-count(1)] [cardinality: 1.0, op-cost: 
0.0, total-cost: 6.0]
+            aggregate [$$67] <- [agg-sql-count(1)] [cardinality: 1.0, op-cost: 
0.0, total-cost: 1.0]
             -- AGGREGATE  |PARTITIONED|
-              select (and(ge($$60, "1"), le($$60, "2"))) [cardinality: 1.0, 
op-cost: 0.0, total-cost: 6.0]
+              select (and(ge($$60, "1"), le($$60, "2"))) [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
               -- STREAM_SELECT  |PARTITIONED|
-                project ([$$60]) [cardinality: 6.0, op-cost: 0.0, total-cost: 
6.0]
+                project ([$$60]) [cardinality: 1.0, op-cost: 0.0, total-cost: 
1.0]
                 -- STREAM_PROJECT  |PARTITIONED|
-                  assign [$$60] <- [$$ao.getField("text")] [cardinality: 6.0, 
op-cost: 0.0, total-cost: 6.0]
+                  assign [$$60] <- [$$ao.getField("text")] [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
                   -- ASSIGN  |PARTITIONED|
-                    project ([$$ao]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                    project ([$$ao]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                     -- STREAM_PROJECT  |PARTITIONED|
-                      unnest $$ao <- scan-collection($$65) [cardinality: 6.0, 
op-cost: 0.0, total-cost: 6.0]
+                      unnest $$ao <- scan-collection($$65) [cardinality: 1.0, 
op-cost: 0.0, total-cost: 1.0]
                       -- UNNEST  |PARTITIONED|
-                        project ([$$65]) [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                        project ([$$65]) [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                         -- STREAM_PROJECT  |PARTITIONED|
-                          assign [$$65] <- [$$p2.getField("arrayOrObject")] 
[cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
+                          assign [$$65] <- [$$p2.getField("arrayOrObject")] 
[cardinality: 1.0, op-cost: 0.0, total-cost: 1.0]
                           -- ASSIGN  |PARTITIONED|
-                            exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                            exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              replicate [cardinality: 6.0, op-cost: 0.0, 
total-cost: 6.0]
+                              replicate [cardinality: 1.0, op-cost: 0.0, 
total-cost: 1.0]
                               -- REPLICATE  |PARTITIONED|
-                                exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                                exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  project ([$$p2]) [cardinality: 6.0, op-cost: 
0.0, total-cost: 6.0]
+                                  project ([$$p2]) [cardinality: 1.0, op-cost: 
0.0, total-cost: 1.0]
                                   -- STREAM_PROJECT  |PARTITIONED|
-                                    exchange [cardinality: 6.0, op-cost: 4.0, 
total-cost: 10.0]
+                                    exchange [cardinality: 1.0, op-cost: 4.0, 
total-cost: 5.0]
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      data-scan []<-[$$62, $$p2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) filter 
on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "1"), 
le(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "2"))) 
range-filter on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObj [...]
+                                      data-scan []<-[$$62, $$p2] <- 
test.ColumnDataset project ({arrayOrObject:<[{text:any}],{text:any}>}) filter 
on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "1"), 
le(scan-collection($$p2.getField("arrayOrObject")).getField("text"), "2"))) 
range-filter on: or(eq($$p2.getField("arrayOrObject").getField("text"), "7"), 
and(ge(scan-collection($$p2.getField("arrayOrObj [...]
                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                         exchange [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|

Reply via email to