[ASTERIXDB-3562][COMP] Do not place array slice in a subplan
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Array slice expressions (e.g. array_f[1:5]) do not need to
be nested in a subplan.
Ext-ref: MB-65303
Change-Id: I352a0e249e31963e959815e10a9e7d25bed3206f
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19448
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Peeyush Gupta <peeyush.gupta@couchbase.com>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index acbd13e..b1638d4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -1847,6 +1847,7 @@
case IF_EXPRESSION:
case CASE_EXPRESSION:
case WINDOW_EXPRESSION:
+ case LIST_SLICE_EXPRESSION:
return true;
case QUANTIFIED_EXPRESSION:
return ((QuantifiedExpression) expr).getQuantifier() == Quantifier.SOME_AND_EVERY;
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-3562.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-3562.plan
index fc97335..2653643 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-3562.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-3562.plan
@@ -4,35 +4,19 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$17])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$17] <- [{"f_1": $$14, "f_2": $$16}]
+ assign [$$17] <- [{"f_1": array-slice($$18, 0, 1), "f_2": array-slice($$18, 0, 2)}]
-- ASSIGN |PARTITIONED|
- project ([$$14, $$16])
+ project ([$$18])
-- STREAM_PROJECT |PARTITIONED|
- subplan {
- assign [$$16] <- [array-slice($$19, 0, 2)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ASSIGN |LOCAL|
- nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- SUBPLAN |PARTITIONED|
- subplan {
- assign [$$14] <- [array-slice($$19, 0, 1)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ASSIGN |LOCAL|
- nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- NESTED_TUPLE_SOURCE |LOCAL|
- }
- -- SUBPLAN |PARTITIONED|
- project ([$$19])
- -- STREAM_PROJECT |PARTITIONED|
- assign [$$19] <- [$$collection1.getField("array1")]
- -- ASSIGN |PARTITIONED|
- project ([$$collection1])
- -- STREAM_PROJECT |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$18, $$collection1] <- test.collection1
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ assign [$$18] <- [$$collection1.getField("array1")]
+ -- ASSIGN |PARTITIONED|
+ project ([$$collection1])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$19, $$collection1] <- test.collection1
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file