Revert "[ASTERIXDB-3573][COMP] Do not pull predicates out of join condition"
This reverts commit a08dd5bfce1bd82c49d2f1240e94484825de862c.
Reason for revert: performance regression in some queries with complex join condition (e.g. CH2 Q19).
Ext-ref: MB-65642
Change-Id: I9036a302d30c65f4596ff2a6d2ea6d16a8af3921
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19703
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
index e8182f0..d786e9d 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
@@ -137,6 +137,7 @@
import org.apache.hyracks.algebricks.rewriter.rules.IntroduceProjectsRule;
import org.apache.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule;
import org.apache.hyracks.algebricks.rewriter.rules.PopulateResultMetadataRule;
+import org.apache.hyracks.algebricks.rewriter.rules.PullSelectOutOfEqJoin;
import org.apache.hyracks.algebricks.rewriter.rules.PushGroupByIntoSortRule;
import org.apache.hyracks.algebricks.rewriter.rules.PushMapOperatorDownThroughProductRule;
import org.apache.hyracks.algebricks.rewriter.rules.PushNestedOrderByUnderPreSortedGroupByRule;
@@ -394,6 +395,7 @@
public static List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection(
SetAsterixPhysicalOperatorsRule.CostMethodsFactory cmf) {
List<IAlgebraicRewriteRule> physicalRewritesAllLevels = new LinkedList<>();
+ physicalRewritesAllLevels.add(new PullSelectOutOfEqJoin());
physicalRewritesAllLevels.add(new ExtractBatchableExternalFunctionCallsRule());
//Turned off the following rule for now not to change OptimizerTest results.
physicalRewritesAllLevels.add(new SetupCommitExtensionOpRule());
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/keep_pred_in_join.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/optimizerts/queries/keep_pred_in_join.sqlpp
rename to asterixdb/asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries_sqlpp/keep_pred_in_join.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries_sqlpp/pull_select_above_eq_join.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/optimizerts/queries_sqlpp/keep_pred_in_join.sqlpp
rename to asterixdb/asterix-app/src/test/resources/optimizerts/queries_sqlpp/pull_select_above_eq_join.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q17.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q17.plan
index 1f8e277..1df6122 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q17.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q17.plan
@@ -10,101 +10,103 @@
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
aggregate [$$164] <- [agg-local-sql-sum($$141)]
-- AGGREGATE |PARTITIONED|
- project ([$$141])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(lt($$150, $$154), eq($$152, $$i_id)))
- -- HYBRID_HASH_JOIN [$$i_id][$$152] |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$$i_id := $$163]) decor ([]) {
- aggregate [$$154] <- [agg-global-sql-avg($$162)]
- -- AGGREGATE |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- PRE_CLUSTERED_GROUP_BY[$$163] |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$$163 := $$146]) decor ([]) {
- aggregate [$$162] <- [agg-local-sql-avg($$122)]
- -- AGGREGATE |LOCAL|
- nested tuple source
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- SORT_GROUP_BY[$$146] |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$122, $$146])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (eq($$156, $$146))
- -- HYBRID_HASH_JOIN [$$146][$$156] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$146] |PARTITIONED|
- select (like($$i.getField("i_data"), "%b")) project: [$$146]
- -- STREAM_SELECT |PARTITIONED|
- assign [$$146] <- [$$i.getField("i_id")]
- -- ASSIGN |PARTITIONED|
- project ([$$i])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$147, $$i] <- test.item
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$156] |PARTITIONED|
- assign [$$122, $$156] <- [$$ol1.getField("ol_quantity"), $$ol1.getField("ol_i_id")] project: [$$122, $$156]
- -- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- replicate
- -- REPLICATE |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest $$ol1 <- scan-collection($$158) project: [$$ol1]
- -- UNNEST |PARTITIONED|
- assign [$$158] <- [$$o1.getField("o_orderline")] project: [$$158]
- -- ASSIGN |PARTITIONED|
- project ([$$o1])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$148, $$o1] <- test.orders
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
- assign [$$141, $$152, $$150] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_i_id"), $$ol.getField("ol_quantity")] project: [$$141, $$150, $$152]
- -- ASSIGN |PARTITIONED|
- assign [$$ol] <- [$$ol1] project: [$$ol]
- -- ASSIGN |PARTITIONED|
+ select (lt($$150, $$154)) project: [$$141]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$154, $$141, $$150])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$152, $$i_id))
+ -- HYBRID_HASH_JOIN [$$i_id][$$152] |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ group by ([$$i_id := $$163]) decor ([]) {
+ aggregate [$$154] <- [agg-global-sql-avg($$162)]
+ -- AGGREGATE |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- PRE_CLUSTERED_GROUP_BY[$$163] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- replicate
- -- REPLICATE |PARTITIONED|
+ group by ([$$163 := $$146]) decor ([]) {
+ aggregate [$$162] <- [agg-local-sql-avg($$122)]
+ -- AGGREGATE |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- SORT_GROUP_BY[$$146] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest $$ol1 <- scan-collection($$158) project: [$$ol1]
- -- UNNEST |PARTITIONED|
- assign [$$158] <- [$$o1.getField("o_orderline")] project: [$$158]
- -- ASSIGN |PARTITIONED|
- project ([$$o1])
- -- STREAM_PROJECT |PARTITIONED|
+ project ([$$122, $$146])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$156, $$146))
+ -- HYBRID_HASH_JOIN [$$146][$$156] |PARTITIONED|
exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$148, $$o1] <- test.orders
- -- DATASOURCE_SCAN |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$146] |PARTITIONED|
+ select (like($$i.getField("i_data"), "%b")) project: [$$146]
+ -- STREAM_SELECT |PARTITIONED|
+ assign [$$146] <- [$$i.getField("i_id")]
+ -- ASSIGN |PARTITIONED|
+ project ([$$i])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$147, $$i] <- test.item
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$156] |PARTITIONED|
+ assign [$$122, $$156] <- [$$ol1.getField("ol_quantity"), $$ol1.getField("ol_i_id")] project: [$$122, $$156]
+ -- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ replicate
+ -- REPLICATE |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ unnest $$ol1 <- scan-collection($$158) project: [$$ol1]
+ -- UNNEST |PARTITIONED|
+ assign [$$158] <- [$$o1.getField("o_orderline")] project: [$$158]
+ -- ASSIGN |PARTITIONED|
+ project ([$$o1])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$148, $$o1] <- test.orders
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
+ assign [$$141, $$152, $$150] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_i_id"), $$ol.getField("ol_quantity")] project: [$$141, $$150, $$152]
+ -- ASSIGN |PARTITIONED|
+ assign [$$ol] <- [$$ol1] project: [$$ol]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ replicate
+ -- REPLICATE |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ unnest $$ol1 <- scan-collection($$158) project: [$$ol1]
+ -- UNNEST |PARTITIONED|
+ assign [$$158] <- [$$o1.getField("o_orderline")] project: [$$158]
+ -- ASSIGN |PARTITIONED|
+ project ([$$o1])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$148, $$o1] <- test.orders
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q19.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q19.plan
index 79884f6..d12f3d6 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q19.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q19.plan
@@ -10,45 +10,47 @@
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
aggregate [$$133] <- [agg-local-sql-sum($$118)]
-- AGGREGATE |PARTITIONED|
- project ([$$118])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(or(and(like($$123, "%h"), ge($$122, 7), le($$122, 17), and($$134, le($$121, 5)), or(eq($$69, 37), eq($$69, 29), eq($$69, 70))), and(like($$123, "%t"), ge($$122, 16), le($$122, 26), and($$134, le($$121, 10)), or(eq($$69, 78), eq($$69, 17), eq($$69, 6))), and(like($$123, "%m"), ge($$122, 24), le($$122, 34), and($$134, $$135), or(eq($$69, 91), eq($$69, 95), eq($$69, 15)))), eq($$126, $$127)))
- -- HYBRID_HASH_JOIN [$$126][$$127] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$126] |PARTITIONED|
- assign [$$118, $$122, $$126] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_quantity"), $$ol.getField("ol_i_id")] project: [$$118, $$122, $$69, $$126]
- -- ASSIGN |PARTITIONED|
- unnest $$ol <- scan-collection($$129) project: [$$69, $$ol]
- -- UNNEST |PARTITIONED|
- assign [$$69, $$129] <- [$$o.getField("o_w_id"), $$o.getField("o_orderline")] project: [$$69, $$129]
- -- ASSIGN |PARTITIONED|
- project ([$$o])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$124, $$o] <- test.orders
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$127] |PARTITIONED|
- select (and($$134, $$135))
- -- STREAM_SELECT |PARTITIONED|
- assign [$$135, $$134] <- [le($$121, 15), ge($$121, 1)]
+ select (or(and(like($$123, "%h"), ge($$122, 7), le($$122, 17), and($$134, le($$121, 5)), or(eq($$69, 37), eq($$69, 29), eq($$69, 70))), and(like($$123, "%t"), ge($$122, 16), le($$122, 26), and($$134, le($$121, 10)), or(eq($$69, 78), eq($$69, 17), eq($$69, 6))), and(like($$123, "%m"), ge($$122, 24), le($$122, 34), and($$134, $$135), or(eq($$69, 91), eq($$69, 95), eq($$69, 15))))) project: [$$118]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$118, $$122, $$69, $$123, $$121, $$135, $$134])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$126, $$127))
+ -- HYBRID_HASH_JOIN [$$126][$$127] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$126] |PARTITIONED|
+ assign [$$118, $$122, $$126] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_quantity"), $$ol.getField("ol_i_id")] project: [$$118, $$122, $$69, $$126]
-- ASSIGN |PARTITIONED|
- assign [$$123, $$121, $$127] <- [$$i.getField("i_data"), $$i.getField("i_price"), $$i.getField("i_id")] project: [$$123, $$121, $$127]
+ unnest $$ol <- scan-collection($$129) project: [$$69, $$ol]
+ -- UNNEST |PARTITIONED|
+ assign [$$69, $$129] <- [$$o.getField("o_w_id"), $$o.getField("o_orderline")] project: [$$69, $$129]
+ -- ASSIGN |PARTITIONED|
+ project ([$$o])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$124, $$o] <- test.orders
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$127] |PARTITIONED|
+ select (and($$134, $$135))
+ -- STREAM_SELECT |PARTITIONED|
+ assign [$$135, $$134] <- [le($$121, 15), ge($$121, 1)]
-- ASSIGN |PARTITIONED|
- project ([$$i])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$125, $$i] <- test.item
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$123, $$121, $$127] <- [$$i.getField("i_data"), $$i.getField("i_price"), $$i.getField("i_id")] project: [$$123, $$121, $$127]
+ -- ASSIGN |PARTITIONED|
+ project ([$$i])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$125, $$i] <- test.item
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/column-filter/ASTERIXDB-3595.001.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/column-filter/ASTERIXDB-3595.001.plan
index b373372..daccdd0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/column-filter/ASTERIXDB-3595.001.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/column-filter/ASTERIXDB-3595.001.plan
@@ -6,33 +6,35 @@
-- STABLE_SORT [$$36(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$36])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$36, $$37), or($$39, $$40)))
- -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$39] <- [$$r1.getField("sensitive")] project: [$$36, $$39]
- -- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$36, $$r1] <- test.Res1 project ({sensitive:any})
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$40] <- [$$r2.getField("sensitive")] project: [$$37, $$40]
- -- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$37, $$r2] <- test.Res2 project ({sensitive:any})
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ select (or($$39, $$40)) project: [$$36]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$36, $$39, $$40])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$36, $$37))
+ -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$39] <- [$$r1.getField("sensitive")] project: [$$36, $$39]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$36, $$r1] <- test.Res1 project ({sensitive:any})
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$40] <- [$$r2.getField("sensitive")] project: [$$37, $$40]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$37, $$r2] <- test.Res2 project ({sensitive:any})
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/keep_pred_in_join.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/keep_pred_in_join.plan
deleted file mode 100644
index c3c6363..0000000
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/keep_pred_in_join.plan
+++ /dev/null
@@ -1,36 +0,0 @@
-distribute result [$$35]
--- DISTRIBUTE_RESULT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$35] <- [{"uid": $$36, "vid": $$37}] project: [$$35]
- -- ASSIGN |PARTITIONED|
- project ([$$36, $$37])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(neq($$38, $$39), eq($$40, $$41)))
- -- HYBRID_HASH_JOIN [$$40][$$41] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
- assign [$$40, $$38] <- [$$user.getField(1), $$user.getField(2)] project: [$$36, $$38, $$40]
- -- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$36, $$user] <- `pull-select-above-eq-join`.Users
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
- assign [$$41, $$39] <- [$$visitor.getField(1), $$visitor.getField(2)] project: [$$37, $$39, $$41]
- -- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$37, $$visitor] <- `pull-select-above-eq-join`.Visitors
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
new file mode 100644
index 0000000..d603204
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
@@ -0,0 +1,38 @@
+distribute result [$$35]
+-- DISTRIBUTE_RESULT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$35] <- [{"uid": $$36, "vid": $$37}] project: [$$35]
+ -- ASSIGN |PARTITIONED|
+ select (neq($$38, $$39)) project: [$$36, $$37]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$36, $$38, $$37, $$39])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$40, $$41))
+ -- HYBRID_HASH_JOIN [$$40][$$41] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ assign [$$40, $$38] <- [$$user.getField(1), $$user.getField(2)] project: [$$36, $$38, $$40]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$36, $$user] <- `pull-select-above-eq-join`.Users
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
+ assign [$$41, $$39] <- [$$visitor.getField(1), $$visitor.getField(2)] project: [$$37, $$39, $$41]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$37, $$visitor] <- `pull-select-above-eq-join`.Visitors
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.plan
index a131e0a..7e091b3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.plan
@@ -4,37 +4,39 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$31] <- [{"staff": $$34, "student": $$35}] project: [$$31]
-- ASSIGN |PARTITIONED|
- project ([$$34, $$35])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(le($$36, $$37), eq($$38, $$39)))
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
- assign [$$38, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$34, $$37, $$38]
- -- ASSIGN |PARTITIONED|
- assign [$$33] <- [$$f.getField(2)] project: [$$34, $$33]
+ select (le($$36, $$37)) project: [$$34, $$35]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$34, $$37, $$35, $$36])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$38, $$39))
+ -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ assign [$$38, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$34, $$37, $$38]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$34, $$f] <- TinyCollege.Staff
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
- assign [$$39, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$35, $$36, $$39]
- -- ASSIGN |PARTITIONED|
- assign [$$32] <- [$$d.getField(2)] project: [$$35, $$32]
+ assign [$$33] <- [$$f.getField(2)] project: [$$34, $$33]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$34, $$f] <- TinyCollege.Staff
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ assign [$$39, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$35, $$36, $$39]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$35, $$d] <- TinyCollege.Students
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$32] <- [$$d.getField(2)] project: [$$35, $$32]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$35, $$d] <- TinyCollege.Students
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ends/interval_ends.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ends/interval_ends.3.query.plan
index cde1b87..f14b06a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ends/interval_ends.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_ends/interval_ends.3.query.plan
@@ -4,37 +4,39 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$31] <- [{"staff": $$34, "student": $$35}] project: [$$31]
-- ASSIGN |PARTITIONED|
- project ([$$34, $$35])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(le($$36, $$37), eq($$38, $$39)))
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
- assign [$$38, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$38]
- -- ASSIGN |PARTITIONED|
- assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ select (le($$36, $$37)) project: [$$34, $$35]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$34, $$36, $$35, $$37])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$38, $$39))
+ -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ assign [$$38, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$38]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$34, $$f] <- TinyCollege.Staff
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
- assign [$$39, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$39]
- -- ASSIGN |PARTITIONED|
- assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$34, $$f] <- TinyCollege.Staff
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ assign [$$39, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$39]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$35, $$d] <- TinyCollege.Students
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$35, $$d] <- TinyCollege.Students
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_started_by/interval_started_by.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_started_by/interval_started_by.3.query.plan
index 91fbfb6..7e13e56 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_started_by/interval_started_by.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_started_by/interval_started_by.3.query.plan
@@ -4,37 +4,39 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$31] <- [{"staff": $$34, "student": $$35}] project: [$$31]
-- ASSIGN |PARTITIONED|
- project ([$$34, $$35])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$36, $$37), le($$38, $$39)))
- -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
- assign [$$39, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$39]
- -- ASSIGN |PARTITIONED|
- assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ select (le($$38, $$39)) project: [$$34, $$35]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$34, $$39, $$35, $$38])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$36, $$37))
+ -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
+ assign [$$39, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$39]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$34, $$f] <- TinyCollege.Staff
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
- assign [$$38, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$38]
- -- ASSIGN |PARTITIONED|
- assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$34, $$f] <- TinyCollege.Staff
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ assign [$$38, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$38]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$35, $$d] <- TinyCollege.Students
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$35, $$d] <- TinyCollege.Students
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_starts/interval_starts.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_starts/interval_starts.3.query.plan
index 25c3cf0..e0a5afa 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_starts/interval_starts.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_starts/interval_starts.3.query.plan
@@ -4,37 +4,39 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$31] <- [{"staff": $$34, "student": $$35}] project: [$$31]
-- ASSIGN |PARTITIONED|
- project ([$$34, $$35])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$36, $$37), le($$38, $$39)))
- -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
- assign [$$38, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$38]
- -- ASSIGN |PARTITIONED|
- assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ select (le($$38, $$39)) project: [$$34, $$35]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$34, $$38, $$35, $$39])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$36, $$37))
+ -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
+ assign [$$38, $$36] <- [get-interval-end($$32), get-interval-start($$32)] project: [$$34, $$36, $$38]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$34, $$f] <- TinyCollege.Staff
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
- assign [$$39, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$39]
- -- ASSIGN |PARTITIONED|
- assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ assign [$$32] <- [$$f.getField(2)] project: [$$34, $$32]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$34, $$f] <- TinyCollege.Staff
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange
+ -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ assign [$$39, $$37] <- [get-interval-end($$33), get-interval-start($$33)] project: [$$35, $$37, $$39]
-- ASSIGN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$35, $$d] <- TinyCollege.Students
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$33] <- [$$d.getField(2)] project: [$$35, $$33]
+ -- ASSIGN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$35, $$d] <- TinyCollege.Students
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
index dc98276..e468850 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_cbo/ch2/ch2_q7.plan
@@ -26,147 +26,149 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$274, $$273] <- [get-year(date($$309)), substring1($$285, 1, 1)] project: [$$313, $$277, $$273, $$274] [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 9.223372036854776E16]
-- ASSIGN |PARTITIONED|
- project ([$$313, $$277, $$309, $$285]) [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 9.223372036854776E16]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 9.223372036854776E16]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$277, $$303), or(and(eq($$286, "Germany"), eq($$287, "Cambodia")), and(eq($$286, "Cambodia"), eq($$287, "Germany"))))) [cardinality: 9.223372036854776E16, op-cost: 9.223372036854776E16, total-cost: 9.223372036854776E16]
- -- HYBRID_HASH_JOIN [$$277][$$303] |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$313, $$277, $$309, $$285, $$287]) [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (eq($$326, $$300)) [cardinality: 9.223372036854776E16, op-cost: 5.00004E11, total-cost: 5.00025E11]
- -- HYBRID_HASH_JOIN [$$326][$$300] |PARTITIONED|
- exchange [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$326] <- [numeric-mod(numeric-multiply($$275, $$276), 10000)] project: [$$313, $$309, $$285, $$287, $$326] [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
- -- ASSIGN |PARTITIONED|
- project ([$$313, $$309, $$285, $$275, $$276, $$287]) [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (eq($$288, $$304)) [cardinality: 5.0E11, op-cost: 2000000.0, total-cost: 1.6E7]
- -- HYBRID_HASH_JOIN [$$288][$$304] |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1.2E7]
- -- HASH_PARTITION_EXCHANGE [$$288] |PARTITIONED|
- project ([$$313, $$309, $$285, $$275, $$276, $$288]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1.1E7]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1.2E7]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$305, $$291), eq($$306, $$293), eq($$307, $$295))) [cardinality: 1000000.0, op-cost: 2000000.0, total-cost: 1.1E7]
- -- HYBRID_HASH_JOIN [$$291, $$293, $$295][$$305, $$306, $$307] |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 7000000.0]
- -- HASH_PARTITION_EXCHANGE [$$291, $$293, $$295] |PARTITIONED|
- project ([$$313, $$309, $$275, $$276, $$291, $$293, $$295]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 6000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 7000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (and(eq($$310, $$275), eq($$311, $$276))) [cardinality: 1000000.0, op-cost: 2000000.0, total-cost: 6000000.0]
- -- HYBRID_HASH_JOIN [$$275, $$276][$$310, $$311] |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- HASH_PARTITION_EXCHANGE [$$275, $$276] |PARTITIONED|
- assign [$$276, $$275] <- [$$s.getField("s_i_id"), $$s.getField("s_w_id")] project: [$$275, $$276] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$s]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$278, $$s] <- test.stock [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- HASH_PARTITION_EXCHANGE [$$310, $$311] |PARTITIONED|
- select (and(ge($$284, "2017-01-01 00:00:00.000000"), le($$284, "2018-12-31 00:00:00.000000"))) project: [$$313, $$309, $$291, $$293, $$295, $$310, $$311] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_SELECT |PARTITIONED|
- assign [$$313, $$311, $$310, $$284] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_i_id"), $$ol.getField("ol_supply_w_id"), $$ol.getField("ol_delivery_d")] project: [$$309, $$295, $$293, $$291, $$313, $$311, $$310, $$284] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- unnest $$ol <- scan-collection($$302) project: [$$309, $$295, $$293, $$291, $$ol] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- UNNEST |PARTITIONED|
- assign [$$309, $$295, $$293, $$291, $$302] <- [$$o.getField("o_entry_d"), $$o.getField("o_d_id"), $$o.getField("o_w_id"), $$o.getField("o_c_id"), $$o.getField("o_orderline")] project: [$$309, $$295, $$293, $$291, $$302] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$o]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$279, $$o] <- test.orders [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- HASH_PARTITION_EXCHANGE [$$305, $$306, $$307] |PARTITIONED|
- assign [$$288] <- [get-item(string-to-codepoint($$285), 0)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- assign [$$307, $$306, $$305, $$285] <- [$$c.getField("c_d_id"), $$c.getField("c_w_id"), $$c.getField("c_id"), $$c.getField("c_state")] project: [$$307, $$306, $$305, $$285] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$c]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$280, $$c] <- test.customer [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
- -- HASH_PARTITION_EXCHANGE [$$304] |PARTITIONED|
- replicate [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$304, $$287] <- [$$n2.getField("n_nationkey"), $$n2.getField("n_name")] project: [$$287, $$304] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$n2]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$282, $$n2] <- test.nation [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
+ select (or(and(eq($$286, "Germany"), eq($$287, "Cambodia")), and(eq($$286, "Cambodia"), eq($$287, "Germany")))) project: [$$313, $$277, $$309, $$285]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$313, $$277, $$309, $$285, $$287, $$286]) [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 9.223372036854776E16]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 9.223372036854776E16]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$277, $$303)) [cardinality: 9.223372036854776E16, op-cost: 9.223372036854776E16, total-cost: 9.223372036854776E16]
+ -- HYBRID_HASH_JOIN [$$277][$$303] |PARTITIONED|
+ exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ project ([$$313, $$277, $$309, $$285, $$287]) [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 9.223372036854776E16, op-cost: 0.0, total-cost: 5.00025E11]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$326, $$300)) [cardinality: 9.223372036854776E16, op-cost: 5.00004E11, total-cost: 5.00025E11]
+ -- HYBRID_HASH_JOIN [$$326][$$300] |PARTITIONED|
+ exchange [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$326] <- [numeric-mod(numeric-multiply($$275, $$276), 10000)] project: [$$313, $$309, $$285, $$287, $$326] [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
+ -- ASSIGN |PARTITIONED|
+ project ([$$313, $$309, $$285, $$275, $$276, $$287]) [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 5.0E11, op-cost: 0.0, total-cost: 1.6E7]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (eq($$288, $$304)) [cardinality: 5.0E11, op-cost: 2000000.0, total-cost: 1.6E7]
+ -- HYBRID_HASH_JOIN [$$288][$$304] |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1.2E7]
+ -- HASH_PARTITION_EXCHANGE [$$288] |PARTITIONED|
+ project ([$$313, $$309, $$285, $$275, $$276, $$288]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1.1E7]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1.2E7]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ join (and(eq($$305, $$291), eq($$306, $$293), eq($$307, $$295))) [cardinality: 1000000.0, op-cost: 2000000.0, total-cost: 1.1E7]
+ -- HYBRID_HASH_JOIN [$$291, $$293, $$295][$$305, $$306, $$307] |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 7000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$291, $$293, $$295] |PARTITIONED|
+ project ([$$313, $$309, $$275, $$276, $$291, $$293, $$295]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 6000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 7000000.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$300, $$277] <- [$$su.getField("su_suppkey"), $$su.getField("su_nationkey")] project: [$$277, $$300] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$su]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$283, $$su] <- test.supplier [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- BROADCAST_EXCHANGE |PARTITIONED|
- assign [$$286, $$303] <- [$$287, $$304] project: [$$286, $$303] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- replicate [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$304, $$287] <- [$$n2.getField("n_nationkey"), $$n2.getField("n_name")] project: [$$287, $$304] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- ASSIGN |PARTITIONED|
- project ([$$n2]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$282, $$n2] <- test.nation [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ join (and(eq($$310, $$275), eq($$311, $$276))) [cardinality: 1000000.0, op-cost: 2000000.0, total-cost: 6000000.0]
+ -- HYBRID_HASH_JOIN [$$275, $$276][$$310, $$311] |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$275, $$276] |PARTITIONED|
+ assign [$$276, $$275] <- [$$s.getField("s_i_id"), $$s.getField("s_w_id")] project: [$$275, $$276] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$s]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$278, $$s] <- test.stock [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$310, $$311] |PARTITIONED|
+ select (and(ge($$284, "2017-01-01 00:00:00.000000"), le($$284, "2018-12-31 00:00:00.000000"))) project: [$$313, $$309, $$291, $$293, $$295, $$310, $$311] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_SELECT |PARTITIONED|
+ assign [$$313, $$311, $$310, $$284] <- [$$ol.getField("ol_amount"), $$ol.getField("ol_i_id"), $$ol.getField("ol_supply_w_id"), $$ol.getField("ol_delivery_d")] project: [$$309, $$295, $$293, $$291, $$313, $$311, $$310, $$284] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ unnest $$ol <- scan-collection($$302) project: [$$309, $$295, $$293, $$291, $$ol] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- UNNEST |PARTITIONED|
+ assign [$$309, $$295, $$293, $$291, $$302] <- [$$o.getField("o_entry_d"), $$o.getField("o_d_id"), $$o.getField("o_w_id"), $$o.getField("o_c_id"), $$o.getField("o_orderline")] project: [$$309, $$295, $$293, $$291, $$302] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$o]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$279, $$o] <- test.orders [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$305, $$306, $$307] |PARTITIONED|
+ assign [$$288] <- [get-item(string-to-codepoint($$285), 0)] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ assign [$$307, $$306, $$305, $$285] <- [$$c.getField("c_d_id"), $$c.getField("c_w_id"), $$c.getField("c_id"), $$c.getField("c_state")] project: [$$307, $$306, $$305, $$285] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$c]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$280, $$c] <- test.customer [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 2000000.0]
+ -- HASH_PARTITION_EXCHANGE [$$304] |PARTITIONED|
+ replicate [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$304, $$287] <- [$$n2.getField("n_nationkey"), $$n2.getField("n_name")] project: [$$287, $$304] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$n2]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$282, $$n2] <- test.nation [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ assign [$$300, $$277] <- [$$su.getField("su_suppkey"), $$su.getField("su_nationkey")] project: [$$277, $$300] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$su]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$283, $$su] <- test.supplier [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ assign [$$286, $$303] <- [$$287, $$304] project: [$$286, $$303] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ replicate [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$304, $$287] <- [$$n2.getField("n_nationkey"), $$n2.getField("n_name")] project: [$$287, $$304] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$n2]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 1000000.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 1000000.0, op-cost: 4000000.0, total-cost: 5000000.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$282, $$n2] <- test.nation [cardinality: 1000000.0, op-cost: 1000000.0, total-cost: 1000000.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/keep_pred_in_join.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/pull_select_above_eq_join.ast
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/keep_pred_in_join.ast
rename to asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/pull_select_above_eq_join.ast
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/avro/one-field/one-field.231.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/avro/one-field/one-field.231.plan
index 7b9b53d..ad9c368 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/avro/one-field/one-field.231.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/avro/one-field/one-field.231.plan
@@ -10,33 +10,35 @@
-- STABLE_SORT [$$42(ASC)] |PARTITIONED|
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$d, $$42]) [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 (and(or(or(eq($$32, "hr"), eq($$32, "accounting")), eq($$41, "smith")), eq($$42, $$43))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$42][$$43] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
- assign [$$32, $$42] <- [lowercase($$d.getField("department")), $$d.getField("id")] [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 []<-[$$d] <- test.Department [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$43] |PARTITIONED|
- assign [$$41, $$43] <- [lowercase($$l.getField("name").getField("last")), $$l.getField("id")] project: [$$41, $$43] [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 []<-[$$l] <- test.LastName [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
+ select (or(or(eq($$32, "hr"), eq($$32, "accounting")), eq($$41, "smith"))) project: [$$d, $$42] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$d, $$32, $$42, $$41]) [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($$42, $$43)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$42][$$43] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ assign [$$32, $$42] <- [lowercase($$d.getField("department")), $$d.getField("id")] [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 []<-[$$d] <- test.Department [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$43] |PARTITIONED|
+ assign [$$41, $$43] <- [lowercase($$l.getField("name").getField("last")), $$l.getField("id")] project: [$$41, $$43] [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 []<-[$$l] <- test.LastName [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/one-field/one-field.231.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/one-field/one-field.231.plan
index 7b9b53d..ad9c368 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/one-field/one-field.231.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/dynamic-prefixes/one-field/one-field.231.plan
@@ -10,33 +10,35 @@
-- STABLE_SORT [$$42(ASC)] |PARTITIONED|
exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$d, $$42]) [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 (and(or(or(eq($$32, "hr"), eq($$32, "accounting")), eq($$41, "smith")), eq($$42, $$43))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$42][$$43] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
- assign [$$32, $$42] <- [lowercase($$d.getField("department")), $$d.getField("id")] [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 []<-[$$d] <- test.Department [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$43] |PARTITIONED|
- assign [$$41, $$43] <- [lowercase($$l.getField("name").getField("last")), $$l.getField("id")] project: [$$41, $$43] [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 []<-[$$l] <- test.LastName [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
+ select (or(or(eq($$32, "hr"), eq($$32, "accounting")), eq($$41, "smith"))) project: [$$d, $$42] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$d, $$32, $$42, $$41]) [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($$42, $$43)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$42][$$43] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ assign [$$32, $$42] <- [lowercase($$d.getField("department")), $$d.getField("id")] [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 []<-[$$d] <- test.Department [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$43] |PARTITIONED|
+ assign [$$41, $$43] <- [lowercase($$l.getField("name").getField("last")), $$l.getField("id")] project: [$$41, $$43] [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 []<-[$$l] <- test.LastName [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/tpch/query-plans/query-plans.08.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/tpch/query-plans/query-plans.08.plan
index edc33ee..86c036b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/tpch/query-plans/query-plans.08.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/tpch/query-plans/query-plans.08.plan
@@ -26,129 +26,131 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$184, $$214] <- [numeric-multiply($$211, numeric-subtract(1, $$212)), get-year(date($$190))] project: [$$184, $$191, $$192, $$214] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ASSIGN |PARTITIONED|
- project ([$$191, $$211, $$212, $$190, $$192]) [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 (and(eq($$201, $$199), or(and(eq($$191, "KENYA"), eq($$192, "PERU")), and(eq($$191, "PERU"), eq($$192, "KENYA"))))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$201][$$199] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$201] |PARTITIONED|
- project ([$$191, $$211, $$212, $$190, $$201]) [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($$205, $$198)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$205][$$198] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$205] |PARTITIONED|
- project ([$$211, $$212, $$190, $$201, $$205]) [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($$197, $$210)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$210][$$197] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$210] |PARTITIONED|
- project ([$$211, $$212, $$190, $$205, $$210]) [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($$196, $$195)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$195][$$196] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$195] |PARTITIONED|
- project ([$$211, $$212, $$190, $$205, $$195]) [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($$193, $$204)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$193][$$204] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$205] <- [$$s.getField(3)] project: [$$205, $$193] [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 []<-[$$193, $$s] <- tpch.supplier [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$204] |PARTITIONED|
- select (and(ge($$190, "1995-01-01"), le($$190, "1996-12-31"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_SELECT |PARTITIONED|
- assign [$$212, $$211, $$204, $$190] <- [$$l.getField(6), $$l.getField(5), $$l.getField(2), $$l.getField(10)] project: [$$195, $$212, $$211, $$204, $$190] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ select (or(and(eq($$191, "KENYA"), eq($$192, "PERU")), and(eq($$191, "PERU"), eq($$192, "KENYA")))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$191, $$211, $$212, $$190, $$192]) [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($$201, $$199)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$201][$$199] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$201] |PARTITIONED|
+ project ([$$191, $$211, $$212, $$190, $$201]) [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($$205, $$198)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$205][$$198] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$205] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$201, $$205]) [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($$197, $$210)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$210][$$197] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$210] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$205, $$210]) [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($$196, $$195)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$195][$$196] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$195] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$205, $$195]) [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($$193, $$204)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$193][$$204] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$205] <- [$$s.getField(3)] project: [$$205, $$193] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ASSIGN |PARTITIONED|
- project ([$$195, $$l]) [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 []<-[$$194, $$195, $$l] <- tpch.lineitem [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$210] <- [$$o.getField(1)] project: [$$210, $$196] [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 []<-[$$196, $$o] <- tpch.orders [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$201] <- [$$c.getField(3)] project: [$$201, $$197] [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 []<-[$$197, $$c] <- tpch.customer [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$192, $$199] <- [$$191, $$198] project: [$$192, $$199] [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: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$193, $$s] <- tpch.supplier [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$204] |PARTITIONED|
+ select (and(ge($$190, "1995-01-01"), le($$190, "1996-12-31"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ assign [$$212, $$211, $$204, $$190] <- [$$l.getField(6), $$l.getField(5), $$l.getField(2), $$l.getField(10)] project: [$$195, $$212, $$211, $$204, $$190] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$195, $$l]) [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 []<-[$$194, $$195, $$l] <- tpch.lineitem [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$210] <- [$$o.getField(1)] project: [$$210, $$196] [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 []<-[$$196, $$o] <- tpch.orders [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$201] <- [$$c.getField(3)] project: [$$201, $$197] [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 []<-[$$197, $$c] <- tpch.customer [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$192, $$199] <- [$$191, $$198] project: [$$192, $$199] [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: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_column/tpch/query-plans/query-plans.08.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_column/tpch/query-plans/query-plans.08.plan
index 4e29782..89d1229 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_column/tpch/query-plans/query-plans.08.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_column/tpch/query-plans/query-plans.08.plan
@@ -26,129 +26,131 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$184, $$214] <- [numeric-multiply($$211, numeric-subtract(1, $$212)), get-year(date($$190))] project: [$$184, $$191, $$192, $$214] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ASSIGN |PARTITIONED|
- project ([$$191, $$211, $$212, $$190, $$192]) [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 (and(eq($$201, $$199), or(and(eq($$191, "KENYA"), eq($$192, "PERU")), and(eq($$191, "PERU"), eq($$192, "KENYA"))))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$201][$$199] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$201] |PARTITIONED|
- project ([$$191, $$211, $$212, $$190, $$201]) [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($$205, $$198)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$205][$$198] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$205] |PARTITIONED|
- project ([$$211, $$212, $$190, $$201, $$205]) [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($$197, $$210)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$210][$$197] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$210] |PARTITIONED|
- project ([$$211, $$212, $$190, $$205, $$210]) [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($$196, $$195)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$195][$$196] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HASH_PARTITION_EXCHANGE [$$195] |PARTITIONED|
- project ([$$211, $$212, $$190, $$205, $$195]) [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($$193, $$204)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- HYBRID_HASH_JOIN [$$193][$$204] |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$205] <- [$$s.getField(3)] project: [$$205, $$193] [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 []<-[$$193, $$s] <- tpch.supplier project ({s_nationkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$204] |PARTITIONED|
- select (and(ge($$190, "1995-01-01"), le($$190, "1996-12-31"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_SELECT |PARTITIONED|
- assign [$$212, $$211, $$204, $$190] <- [$$l.getField(6), $$l.getField(5), $$l.getField(2), $$l.getField(10)] project: [$$195, $$212, $$211, $$204, $$190] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ select (or(and(eq($$191, "KENYA"), eq($$192, "PERU")), and(eq($$191, "PERU"), eq($$192, "KENYA")))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ project ([$$191, $$211, $$212, $$190, $$192]) [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($$201, $$199)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$201][$$199] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$201] |PARTITIONED|
+ project ([$$191, $$211, $$212, $$190, $$201]) [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($$205, $$198)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$205][$$198] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$205] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$201, $$205]) [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($$197, $$210)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$210][$$197] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$210] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$205, $$210]) [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($$196, $$195)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$195][$$196] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HASH_PARTITION_EXCHANGE [$$195] |PARTITIONED|
+ project ([$$211, $$212, $$190, $$205, $$195]) [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($$193, $$204)) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- HYBRID_HASH_JOIN [$$193][$$204] |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$205] <- [$$s.getField(3)] project: [$$205, $$193] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- ASSIGN |PARTITIONED|
- project ([$$195, $$l]) [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 []<-[$$194, $$195, $$l] <- tpch.lineitem project ({l_extendedprice:any,l_suppkey:any,l_shipdate:any,l_discount:any}) filter on: and(ge($$l.getField(10), "1995-01-01"), le($$l.getField(10), "1996-12-31")) range-filter on: and(ge($$l.getField(10), "1995-01-01"), le($$l.getField(10), "1996-12-31")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$210] <- [$$o.getField(1)] project: [$$210, $$196] [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 []<-[$$196, $$o] <- tpch.orders project ({o_custkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$201] <- [$$c.getField(3)] project: [$$201, $$197] [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 []<-[$$197, $$c] <- tpch.customer project ({c_nationkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation project ({n_name:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$192, $$199] <- [$$191, $$198] project: [$$192, $$199] [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: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- REPLICATE |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation project ({n_name:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$193, $$s] <- tpch.supplier project ({s_nationkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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 [$$204] |PARTITIONED|
+ select (and(ge($$190, "1995-01-01"), le($$190, "1996-12-31"))) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_SELECT |PARTITIONED|
+ assign [$$212, $$211, $$204, $$190] <- [$$l.getField(6), $$l.getField(5), $$l.getField(2), $$l.getField(10)] project: [$$195, $$212, $$211, $$204, $$190] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$195, $$l]) [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 []<-[$$194, $$195, $$l] <- tpch.lineitem project ({l_extendedprice:any,l_suppkey:any,l_shipdate:any,l_discount:any}) filter on: and(ge($$l.getField(10), "1995-01-01"), le($$l.getField(10), "1996-12-31")) range-filter on: and(ge($$l.getField(10), "1995-01-01"), le($$l.getField(10), "1996-12-31")) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$210] <- [$$o.getField(1)] project: [$$210, $$196] [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 []<-[$$196, $$o] <- tpch.orders project ({o_custkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$201] <- [$$c.getField(3)] project: [$$201, $$197] [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 []<-[$$197, $$c] <- tpch.customer project ({c_nationkey:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation project ({n_name:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$192, $$199] <- [$$191, $$198] project: [$$192, $$199] [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: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- REPLICATE |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ assign [$$191] <- [$$n1.getField(1)] project: [$$191, $$198] [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 []<-[$$198, $$n1] <- tpch.nation project ({n_name:any}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.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|
\ No newline at end of file
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PullSelectOutOfEqJoin.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PullSelectOutOfEqJoin.java
index ab2cea7..410b2ec 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PullSelectOutOfEqJoin.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PullSelectOutOfEqJoin.java
@@ -38,14 +38,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-import org.apache.hyracks.algebricks.rewriter.util.JoinUtils;
-/**
- * NOTE: This rule is not used (and not needed).
- * The {@link JoinUtils#setJoinAlgorithmAndExchangeAlgo(AbstractBinaryJoinOperator, boolean, IOptimizationContext)} has
- * been modified so that a hash-join is used even if other non-equality predicates exist as long as the join condition
- * contains at least one equality predicate.
- */
public class PullSelectOutOfEqJoin implements IAlgebraicRewriteRule {
@Override