You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ko...@apache.org on 2025/07/23 10:48:58 UTC
(ignite-3) branch main updated: IGNITE-25768 Sql. Invalid search boundaries are generated when accessing the index if the key is out of range (#6283)
This is an automated email from the ASF dual-hosted git repository.
korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new e8936686d51 IGNITE-25768 Sql. Invalid search boundaries are generated when accessing the index if the key is out of range (#6283)
e8936686d51 is described below
commit e8936686d51cd006bd2b61682da48868d9dd3f70
Author: korlov42 <ko...@apache.org>
AuthorDate: Wed Jul 23 13:48:52 2025 +0300
IGNITE-25768 Sql. Invalid search boundaries are generated when accessing the index if the key is out of range (#6283)
---
.../internal/sql/engine/ItMixedQueriesTest.java | 49 ++
.../internal/sql/engine/ItSecondaryIndexTest.java | 3 +-
.../sql/group1/explain/specialized_operators.test | 2 +-
.../sql/group1/explain/values_filter_project.test | 2 +-
...utOfRangeLiteralComparisonReductionShuttle.java | 272 +++++++++
.../internal/sql/engine/prepare/PlannerHelper.java | 11 +-
.../internal/sql/engine/prepare/PlannerPhase.java | 1 +
.../ignite/internal/sql/engine/util/RexUtils.java | 181 ++----
.../ignite/internal/sql/engine/util/TypeUtils.java | 45 ++
.../sql/engine/planner/AbstractPlannerTest.java | 6 +-
.../sql/engine/planner/DmlPlannerTest.java | 11 +-
.../sql/engine/planner/DynamicParametersTest.java | 2 +-
.../sql/engine/planner/ImplicitCastsTest.java | 9 +-
.../planner/IndexSearchBoundsPlannerTest.java | 126 ++++-
...geLiteralsInComparisonReductionPlannerTest.java | 473 ++++++++++++++++
.../planner/PartitionPruningMetadataTest.java | 3 +-
.../planner/PrimaryKeyLookupPlannerTest.java | 18 +-
.../planner/SelectRowCountEstimationTest.java | 2 +-
.../sql/engine/planner/TpchQueryPlannerTest.java | 5 +
.../datatypes/NumericInTypeCoercionTest.java | 585 ++++++--------------
.../internal/sql/engine/util/TypeUtilsTest.java | 76 +++
.../src/test/resources/tpcds/plan/q10.plan | 6 +-
.../test/resources/tpcds/plan/q10_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q11.plan | 48 +-
.../test/resources/tpcds/plan/q11_colocated.plan | 48 +-
.../src/test/resources/tpcds/plan/q12.plan | 2 +-
.../test/resources/tpcds/plan/q12_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q15.plan | 2 +-
.../test/resources/tpcds/plan/q15_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q16.plan | 2 +-
.../test/resources/tpcds/plan/q16_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q2.plan | 2 +-
.../src/test/resources/tpcds/plan/q20.plan | 2 +-
.../test/resources/tpcds/plan/q20_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q21.plan | 4 +-
.../test/resources/tpcds/plan/q21_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q22.plan | 2 +-
.../test/resources/tpcds/plan/q22_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q28.plan | 12 +-
.../test/resources/tpcds/plan/q28_colocated.plan | 12 +-
.../test/resources/tpcds/plan/q2_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q31.plan | 10 +-
.../test/resources/tpcds/plan/q31_colocated.plan | 10 +-
.../src/test/resources/tpcds/plan/q32.plan | 4 +-
.../test/resources/tpcds/plan/q32_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q33.plan | 6 +-
.../test/resources/tpcds/plan/q33_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q34.plan | 26 +-
.../test/resources/tpcds/plan/q34_colocated.plan | 26 +-
.../src/test/resources/tpcds/plan/q37.plan | 4 +-
.../test/resources/tpcds/plan/q37_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q38.plan | 6 +-
.../test/resources/tpcds/plan/q38_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q4.plan | 130 ++---
.../src/test/resources/tpcds/plan/q40.plan | 2 +-
.../test/resources/tpcds/plan/q40_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q41.plan | 2 +-
.../test/resources/tpcds/plan/q41_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q43.plan | 2 +-
.../test/resources/tpcds/plan/q43_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q46.plan | 2 +-
.../test/resources/tpcds/plan/q46_colocated.plan | 2 +-
.../test/resources/tpcds/plan/q4_colocated.plan | 130 ++---
.../src/test/resources/tpcds/plan/q5.plan | 6 +-
.../src/test/resources/tpcds/plan/q51.plan | 4 +-
.../test/resources/tpcds/plan/q51_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q53.plan | 6 +-
.../test/resources/tpcds/plan/q53_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q56.plan | 6 +-
.../test/resources/tpcds/plan/q56_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q59.plan | 4 +-
.../test/resources/tpcds/plan/q59_colocated.plan | 4 +-
.../test/resources/tpcds/plan/q5_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q60.plan | 6 +-
.../test/resources/tpcds/plan/q60_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q61.plan | 8 +-
.../test/resources/tpcds/plan/q61_colocated.plan | 8 +-
.../src/test/resources/tpcds/plan/q62.plan | 2 +-
.../test/resources/tpcds/plan/q62_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q63.plan | 6 +-
.../test/resources/tpcds/plan/q63_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q64.plan | 606 ++++++++++-----------
.../test/resources/tpcds/plan/q64_colocated.plan | 596 ++++++++++----------
.../src/test/resources/tpcds/plan/q65.plan | 4 +-
.../test/resources/tpcds/plan/q65_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q66.plan | 4 +-
.../test/resources/tpcds/plan/q66_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q68.plan | 2 +-
.../test/resources/tpcds/plan/q68_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q69.plan | 6 +-
.../test/resources/tpcds/plan/q69_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q72.plan | 2 +-
.../test/resources/tpcds/plan/q72_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q73.plan | 26 +-
.../test/resources/tpcds/plan/q73_colocated.plan | 26 +-
.../src/test/resources/tpcds/plan/q74.plan | 90 ++-
.../test/resources/tpcds/plan/q74_colocated.plan | 90 ++-
.../src/test/resources/tpcds/plan/q75.plan | 6 +-
.../test/resources/tpcds/plan/q75_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q77.plan | 12 +-
.../test/resources/tpcds/plan/q77_colocated.plan | 12 +-
.../src/test/resources/tpcds/plan/q78.plan | 2 +-
.../test/resources/tpcds/plan/q78_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q79.plan | 2 +-
.../test/resources/tpcds/plan/q79_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q80.plan | 12 +-
.../test/resources/tpcds/plan/q80_colocated.plan | 12 +-
.../src/test/resources/tpcds/plan/q82.plan | 4 +-
.../test/resources/tpcds/plan/q82_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q83.plan | 4 +-
.../test/resources/tpcds/plan/q83_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q84.plan | 2 +-
.../test/resources/tpcds/plan/q84_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q87.plan | 6 +-
.../test/resources/tpcds/plan/q87_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q88.plan | 16 +-
.../test/resources/tpcds/plan/q88_colocated.plan | 16 +-
.../src/test/resources/tpcds/plan/q89.plan | 6 +-
.../test/resources/tpcds/plan/q89_colocated.plan | 6 +-
.../src/test/resources/tpcds/plan/q90.plan | 4 +-
.../test/resources/tpcds/plan/q90_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q91.plan | 2 +-
.../test/resources/tpcds/plan/q91_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q92.plan | 4 +-
.../test/resources/tpcds/plan/q92_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q94.plan | 2 +-
.../test/resources/tpcds/plan/q94_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q95.plan | 4 +-
.../test/resources/tpcds/plan/q95_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q97.plan | 4 +-
.../test/resources/tpcds/plan/q97_colocated.plan | 4 +-
.../src/test/resources/tpcds/plan/q98.plan | 2 +-
.../test/resources/tpcds/plan/q98_colocated.plan | 2 +-
.../src/test/resources/tpcds/plan/q99.plan | 2 +-
.../test/resources/tpcds/plan/q99_colocated.plan | 2 +-
.../src/test/resources/tpch/plan/q1.plan | 4 +-
.../src/test/resources/tpch/plan/q10.plan | 4 +-
.../src/test/resources/tpch/plan/q12.plan | 4 +-
.../src/test/resources/tpch/plan/q14.plan | 4 +-
.../src/test/resources/tpch/plan/q15.plan | 8 +-
.../src/test/resources/tpch/plan/q19.plan | 12 +-
.../src/test/resources/tpch/plan/q20.plan | 2 +-
.../src/test/resources/tpch/plan/q4.plan | 4 +-
.../src/test/resources/tpch/plan/q5.plan | 2 +-
.../src/test/resources/tpch/plan/q6.plan | 4 +-
.../src/test/resources/tpch/plan/variant_q12.plan | 4 +-
.../src/test/resources/tpch/plan/variant_q14.plan | 4 +-
147 files changed, 2350 insertions(+), 1898 deletions(-)
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMixedQueriesTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMixedQueriesTest.java
index 7c3c85c9273..ecf1d93758f 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMixedQueriesTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMixedQueriesTest.java
@@ -19,6 +19,8 @@ package org.apache.ignite.internal.sql.engine;
import static org.apache.ignite.internal.sql.engine.util.QueryChecker.containsIndexScan;
import static org.apache.ignite.internal.sql.engine.util.QueryChecker.containsSubPlan;
+import static org.apache.ignite.internal.sql.engine.util.QueryChecker.matches;
+import static org.apache.ignite.internal.sql.engine.util.QueryChecker.matchesOnce;
import static org.apache.ignite.internal.util.CollectionUtils.first;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -94,6 +96,53 @@ public class ItMixedQueriesTest extends BaseSqlIntegrationTest {
*/
}
+ @Test
+ void testIndexLookup() {
+ //noinspection ConcatenationWithEmptyString
+ sqlScript(""
+ + "CREATE TABLE t (id VARCHAR(25) PRIMARY KEY, val TINYINT);"
+ + "CREATE INDEX t_val_asc_idx ON t (val ASC);"
+ + "INSERT INTO t VALUES ('abc ', 125);"
+ );
+
+ // Test case ensures that we don't remove cast which may change semantic of a query.
+ // In this particular case excess space character is truncated during cast, which makes
+ // it equal to the value stored in the table.
+ assertQuery("SELECT * FROM t WHERE id = ?::VARCHAR(5)")
+ .withParam("abc ") // Value has one extra space at the end which must be truncated.
+ .matches(containsSubPlan("KeyValueGet"))
+ .returns("abc ", (byte) 125)
+ .check();
+
+ // Similar as above, but also makes sure that cast is not removed from the column reference as well.
+ assertQuery("SELECT * FROM t WHERE id::VARCHAR(3) = ?::VARCHAR(3)")
+ .withParam("abc ")
+ // Since cast over column reference cannot be removed, it's impossible to compose search bound,
+ // hence KV plan is not expected.
+ .matches(containsSubPlan("TableScan"))
+ .returns("abc ", (byte) 125)
+ .check();
+
+ // Test case to make sure that non-safe cast (like cast from bigint to smallint) is not appeared in the plan
+ // when composing a search condition for index lookup. In this example, column `val` is of smaller type
+ // than type of dynamic parameter, therefore search condition should not be created as it requires to downcast
+ // parameter, which is not safe in general case.
+ assertQuery("SELECT /*+ FORCE_INDEX(t_val_asc_idx) */ * FROM t WHERE val = ?")
+ .withParam(Short.MAX_VALUE) // Value is out of range for TINYINT.
+ .matches(containsSubPlan("IndexScan"))
+ .matches(not(matches("searchBounds")))
+ .returnNothing()
+ .check();
+
+ // But explicit cast should make it work.
+ assertQuery("SELECT /*+ FORCE_INDEX(t_val_asc_idx) */ * FROM t WHERE val = ?::TINYINT")
+ .withParam(0)
+ .matches(containsSubPlan("IndexScan"))
+ .matches(matchesOnce("searchBounds"))
+ .returnNothing()
+ .check();
+ }
+
/** Tests varchar min\max aggregates. */
@Test
public void testVarCharMinMax() {
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
index 50ce4f1792f..70ba13b0c51 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
@@ -854,8 +854,7 @@ public class ItSecondaryIndexTest extends BaseSqlIntegrationTest {
assertQuery("SELECT id FROM Birthday WHERE name BETWEEN 'B' AND 'D' AND name > ?")
.withParams("Bach")
.matches(containsIndexScan("PUBLIC", "BIRTHDAY", NAME_DATE_IDX))
- .matches(containsString("searchBounds: [RangeBounds [lowerBound=$GREATEST2(_UTF-8'B':VARCHAR(65536) "
- + "CHARACTER SET \"UTF-8\", ?0), upperBound=_UTF-8'D':VARCHAR(65536) CHARACTER SET \"UTF-8\""))
+ .matches(containsString("searchBounds: [RangeBounds [lowerBound=$GREATEST2(_UTF-8'B', ?0), upperBound=_UTF-8'D'"))
.returns(2)
.returns(6)
.check();
diff --git a/modules/sql-engine/src/integrationTest/sql/group1/explain/specialized_operators.test b/modules/sql-engine/src/integrationTest/sql/group1/explain/specialized_operators.test
index 21df6d602c4..4589d147113 100644
--- a/modules/sql-engine/src/integrationTest/sql/group1/explain/specialized_operators.test
+++ b/modules/sql-engine/src/integrationTest/sql/group1/explain/specialized_operators.test
@@ -63,7 +63,7 @@ KeyValueGet
# kvGet with an extra condition and functional source expression
explain plan
-SELECT * FROM test_table WHERE c1 = EXTRACT(DAY FROM CURRENT_DATE) AND c3 > 10;
+SELECT * FROM test_table WHERE c1 = EXTRACT(DAY FROM CURRENT_DATE)::INTEGER AND c3 > 10;
----
KeyValueGet
table: PUBLIC.TEST_TABLE
diff --git a/modules/sql-engine/src/integrationTest/sql/group1/explain/values_filter_project.test b/modules/sql-engine/src/integrationTest/sql/group1/explain/values_filter_project.test
index 3dbc27b83a9..c451f969310 100644
--- a/modules/sql-engine/src/integrationTest/sql/group1/explain/values_filter_project.test
+++ b/modules/sql-engine/src/integrationTest/sql/group1/explain/values_filter_project.test
@@ -109,7 +109,7 @@ explain plan
SELECT x FROM (VALUES (1)) v(x) WHERE x != 0 AND EXTRACT(YEAR FROM CURRENT_DATE) > 2000;
----
Filter
- predicate: AND(<>(X, 0), >(EXTRACT(FLAG(YEAR), CURRENT_DATE), 2000))
+ predicate: >(EXTRACT(FLAG(YEAR), CURRENT_DATE), 2000)
est: (rows=1)
Values
fieldNames: [X]
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/OutOfRangeLiteralComparisonReductionShuttle.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/OutOfRangeLiteralComparisonReductionShuttle.java
new file mode 100644
index 00000000000..78750a4973f
--- /dev/null
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/OutOfRangeLiteralComparisonReductionShuttle.java
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.sql.engine.prepare;
+
+import com.google.common.collect.ImmutableRangeSet;
+import com.google.common.collect.RangeSet;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexShuttle;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.type.SqlTypeFamily;
+import org.apache.calcite.util.Sarg;
+import org.apache.ignite.internal.sql.engine.sql.fun.IgniteSqlOperatorTable;
+import org.apache.ignite.internal.sql.engine.util.RexUtils;
+import org.apache.ignite.internal.sql.engine.util.TypeUtils;
+
+/**
+ * A {@link RexShuttle} that simplifies binary comparison expressions involving casts and out-of-range literals in numeric comparisons.
+ *
+ * <p>This shuttle looks for patterns like:
+ * <pre>
+ * CAST(expression AS widerType) <op> literal
+ * </pre>
+ *
+ * <p>and attempts to reduce them when the literal falls outside the valid bounds of the original (uncast) numeric type of
+ * {@code expression}. For example, if comparing an {@code INTEGER} expression casted to {@code BIGINT} against a literal that exceeds
+ * {@code Integer.MAX_VALUE}, the expression can be safely reduced to {@code FALSE} or a simpler form.
+ */
+public class OutOfRangeLiteralComparisonReductionShuttle extends RexShuttle {
+ private final RexBuilder builder;
+
+ private int comparisonOpTracker;
+
+ /** Constructs the object. */
+ public OutOfRangeLiteralComparisonReductionShuttle(RexBuilder builder) {
+ this.builder = builder;
+ }
+
+ @Override
+ public RexNode visitCall(RexCall call) {
+ if (RexUtils.isBinaryComparison(call)) {
+ comparisonOpTracker++;
+ try {
+ RexNode firstOp = call.getOperands().get(0).accept(this);
+ RexNode secondOp = call.getOperands().get(1).accept(this);
+
+ RexNode expression = null;
+ RexNode possibleLiteral = null;
+ SqlKind op = call.op.getKind();
+
+ // We are looking for pattern like this:
+ // CAST(<expression> AS <wider type>) <op> <possibleLiteral>
+ if (RexUtils.isLosslessCast(firstOp)) {
+ expression = ((RexCall) firstOp).getOperands().get(0);
+ possibleLiteral = secondOp;
+ } else if (RexUtils.isLosslessCast(secondOp)) {
+ expression = ((RexCall) secondOp).getOperands().get(0);
+ possibleLiteral = firstOp;
+ op = op.reverse();
+ }
+
+ RelDataType probingType = expression != null ? expression.getType() : null;
+
+ if (probingType != null && probingType.getFamily() == SqlTypeFamily.NUMERIC) {
+ assert expression != null && possibleLiteral != null;
+
+ if (possibleLiteral instanceof RexLiteral) {
+ BigDecimal lower = TypeUtils.lowerBoundFor(probingType);
+ BigDecimal upper = TypeUtils.upperBoundFor(probingType);
+
+ BigDecimal current;
+ try {
+ // NumberFormatException may be thrown if current value is Double.INF.
+ current = ((RexLiteral) possibleLiteral).getValueAs(BigDecimal.class);
+ } catch (NumberFormatException ignored) {
+ current = null;
+ }
+
+ if (lower != null && upper != null && current != null) {
+ // Operation type was normalized to the form <expression> <op> <literal>.
+ switch (op) {
+ case EQUALS:
+ case IS_NOT_DISTINCT_FROM:
+ if (inRange(current, lower, upper)) {
+ if (probingType.getScale() >= current.stripTrailingZeros().scale()) {
+ // Required scale covers actual scale of the literal provided, hence we must compare
+ // the result of expression which is known in runtime only.
+ return call.clone(call.getType(), List.of(
+ expression, builder.makeLiteral(current, probingType)
+ ));
+ }
+ }
+
+ return builder.makeLiteral(false);
+
+ case GREATER_THAN:
+ case GREATER_THAN_OR_EQUAL:
+ if (inRange(current, lower, upper)) {
+ // If we are going to lose some precision, we might need to adjust operation as well.
+ // Here are few examples:
+ // Values allowed by the type: -128, -127, -126, etc
+ // If comparison is `x >= -127.5`, we may simply truncate the literal as `-127` is the closest
+ // valid value allowed by the type. But if comparison will be `x > -127.5`, we should adjust
+ // the operation in order to include the bound: `x >= -127`. Otherwise, value `-127` will be
+ // excluded from result, which makes this transformation not equivalent. The `signum` is
+ // checked to make the adjustment in the right direction, because digits after decimal point
+ // is simply truncated. In case of positive values it make the value lesser than original,
+ // but in case of negative values it make the value greater.
+ if (probingType.getScale() < current.stripTrailingZeros().scale()) {
+ if (current.signum() < 0) {
+ return builder.makeCall(
+ IgniteSqlOperatorTable.GREATER_THAN_OR_EQUAL,
+ expression,
+ builder.makeLiteral(current, probingType)
+ );
+ } else if (current.signum() > 0) {
+ return builder.makeCall(
+ IgniteSqlOperatorTable.GREATER_THAN,
+ expression,
+ builder.makeLiteral(current, probingType)
+ );
+ }
+ }
+
+ return call.clone(call.getType(), List.of(
+ expression, builder.makeLiteral(current, probingType)
+ ));
+ }
+
+ if (current.compareTo(upper) > 0) {
+ // There is no value which is greater than the upper bound for the type.
+ return builder.makeLiteral(false);
+ }
+
+ // If current comparison covers all the possible values, no need to do the comparison,
+ // we only need to make sure the expressions is not evaluated to null.
+ return builder.makeCall(SqlStdOperatorTable.IS_NOT_NULL, expression);
+
+ case LESS_THAN:
+ case LESS_THAN_OR_EQUAL:
+ if (inRange(current, lower, upper)) {
+ // If we are going to lose some precision, we might need to adjust operation as well.
+ // Here are few examples:
+ // Values allowed by the type: -128, -127, -126, etc
+ // If comparison is `x >= -127.5`, we may simply truncate the literal as `-127` is the closest
+ // valid value allowed by the type. But if comparison will be `x > -127.5`, we should adjust
+ // the operation in order to include the bound: `x >= -127`. Otherwise, value `-127` will be
+ // excluded from result, which makes this transformation not equivalent. The `signum` is
+ // checked to make the adjustment in the right direction, because digits after decimal point
+ // is simply truncated. In case of positive values it make the value lesser than original,
+ // but in case of negative values it make the value greater.
+ if (probingType.getScale() < current.stripTrailingZeros().scale()) {
+ if (current.signum() < 0) {
+ return builder.makeCall(
+ IgniteSqlOperatorTable.LESS_THAN,
+ expression,
+ builder.makeLiteral(current, probingType)
+ );
+ } else if (current.signum() > 0) {
+ return builder.makeCall(
+ IgniteSqlOperatorTable.LESS_THAN_OR_EQUAL,
+ expression,
+ builder.makeLiteral(current, probingType)
+ );
+ }
+ }
+
+ return call.clone(call.getType(), List.of(
+ expression, builder.makeLiteral(current, probingType)
+ ));
+ }
+
+ if (current.compareTo(lower) < 0) {
+ // There is no value which is less than the lower bound for the type.
+ return builder.makeLiteral(false);
+ }
+
+ // If current comparison covers all the possible values, no need to do the comparison,
+ // we only need to make sure the expressions is not evaluated to null.
+ return builder.makeCall(SqlStdOperatorTable.IS_NOT_NULL, expression);
+
+ default:
+ // NO-OP
+ }
+ }
+ }
+ }
+
+ return call.getOperands().get(0) != firstOp || call.getOperands().get(1) != secondOp
+ ? call.clone(call.getType(), List.of(firstOp, secondOp))
+ : call;
+ } finally {
+ comparisonOpTracker--;
+ }
+ }
+
+ if (call.isA(SqlKind.SEARCH)) {
+ RexNode ref = call.getOperands().get(0);
+ if (RexUtils.isLosslessCast(ref) && ref.getType().getFamily() == SqlTypeFamily.NUMERIC) {
+ ref = ((RexCall) ref).getOperands().get(0);
+ RelDataType probingType = ref.getType();
+
+ @SuppressWarnings("unchecked")
+ Sarg<BigDecimal> values = ((RexLiteral) call.getOperands().get(1)).getValueAs(Sarg.class);
+
+ assert values != null;
+
+ if (values.isPoints()) {
+ BigDecimal lower = TypeUtils.lowerBoundFor(probingType);
+ BigDecimal upper = TypeUtils.upperBoundFor(probingType);
+
+ assert lower != null;
+ assert upper != null;
+
+ RangeSet<?> normalized = ImmutableRangeSet.copyOf(
+ values.rangeSet.asRanges().stream()
+ .filter(r -> {
+ BigDecimal current = r.lowerEndpoint();
+
+ return inRange(current, lower, upper)
+ && probingType.getScale() >= current.stripTrailingZeros().scale();
+
+ })
+ .collect(Collectors.toList())
+ );
+
+ //noinspection unchecked
+ RexLiteral normalizedSargLiteral = builder.makeSearchArgumentLiteral(Sarg.of(values.nullAs, normalized), probingType);
+
+ return builder.makeCall(
+ SqlStdOperatorTable.SEARCH, ref, normalizedSargLiteral
+ );
+ }
+ }
+ }
+
+ // This shuttle is supposed to adjust binary comparisons only, hence if we are not in the context of comparison,
+ // we skip cast simplification as it may change type of the expressions (e.g. CAST to nullable type will become non-nullable).
+ if (comparisonOpTracker > 0 && RexUtils.isLosslessCast(call) && call.getOperands().get(0) instanceof RexLiteral) {
+ return builder.makeLiteral(((RexLiteral) call.getOperands().get(0)).getValue(), call.getType());
+ }
+
+ return RexUtil.flatten(builder, super.visitCall(call));
+ }
+
+ private static boolean inRange(BigDecimal val, BigDecimal lower, BigDecimal upper) {
+ return lower.compareTo(val) <= 0 && upper.compareTo(val) >= 0;
+ }
+}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerHelper.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerHelper.java
index 75e56711f95..512522c80ca 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerHelper.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerHelper.java
@@ -34,6 +34,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.plan.RelOptUtil;
@@ -157,11 +158,19 @@ public final class PlannerHelper {
rel = planner.trimUnusedFields(root.withRel(rel)).rel;
+ RelOptCluster cluster = rel.getCluster();
+ rel = rel.accept(new RelHomogeneousShuttle() {
+ @Override public RelNode visit(RelNode other) {
+ RelNode next = super.visit(other);
+ return next.accept(new OutOfRangeLiteralComparisonReductionShuttle(cluster.getRexBuilder()));
+ }
+ });
+
rel = planner.transform(PlannerPhase.HEP_FILTER_PUSH_DOWN, rel.getTraitSet(), rel);
rel = planner.transform(PlannerPhase.HEP_PROJECT_PUSH_DOWN, rel.getTraitSet(), rel);
- {
+ if (fastQueryOptimizationEnabled()) {
// the sole purpose of this code block is to limit scope of `simpleOperation` variable.
// The result of `HEP_TO_SIMPLE_KEY_VALUE_OPERATION` phase MUST NOT be passed to next stage,
// thus if result meets our expectation, then return the result, otherwise discard it and
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
index 78940579fb5..f78758e837b 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
@@ -116,6 +116,7 @@ public enum PlannerPhase {
FilterScanMergeRule.TABLE_SCAN_SKIP_CORRELATED,
FilterScanMergeRule.SYSTEM_VIEW_SCAN_SKIP_CORRELATED,
+ CoreRules.FILTER_REDUCE_EXPRESSIONS,
CoreRules.FILTER_MERGE,
CoreRules.FILTER_AGGREGATE_TRANSPOSE,
CoreRules.FILTER_SET_OP_TRANSPOSE,
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
index f851c32a4e4..c1e8b6f9ea0 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
@@ -87,8 +87,8 @@ import org.apache.calcite.rex.RexVisitorImpl;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlOperator;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.type.SqlTypeFamily;
import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.calcite.sql.type.SqlTypeName.Limit;
import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.calcite.util.ControlFlowException;
import org.apache.calcite.util.ImmutableBitSet;
@@ -102,6 +102,7 @@ import org.apache.calcite.util.mapping.MappingType;
import org.apache.calcite.util.mapping.Mappings;
import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
import org.apache.ignite.internal.sql.engine.exec.exp.IgniteSqlFunctions;
+import org.apache.ignite.internal.sql.engine.prepare.OutOfRangeLiteralComparisonReductionShuttle;
import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
@@ -121,14 +122,6 @@ public class RexUtils {
/** Hash index permitted search operations. */
private static final EnumSet<SqlKind> HASH_SEARCH_OPS = EnumSet.of(EQUALS, IS_NOT_DISTINCT_FROM);
- private static final BigDecimal MAX_DOUBLE_VALUE = BigDecimal.valueOf(Double.MAX_VALUE);
-
- private static final BigDecimal MIN_DOUBLE_VALUE = MAX_DOUBLE_VALUE.negate();
-
- private static final BigDecimal MAX_FLOAT_VALUE = BigDecimal.valueOf(Float.MAX_VALUE);
-
- private static final BigDecimal MIN_FLOAT_VALUE = MAX_FLOAT_VALUE.negate();
-
/**
* Builder.
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
@@ -500,8 +493,7 @@ public class RexUtils {
fldIdx = fld.getIntKey();
}
- SaturatedRexNode casted = addCast(cluster, pred.operands.get(1), types.get(fldIdx));
- bounds.set(fldIdx, new ExactBounds(pred, casted.value));
+ bounds.set(fldIdx, new ExactBounds(pred, pred.operands.get(1)));
}
}
@@ -530,25 +522,23 @@ public class RexUtils {
// Give priority to equality operators.
collFldPreds.sort(Comparator.comparingInt(pred -> {
switch (pred.getOperator().getKind()) {
- case EQUALS:
- case IS_NOT_DISTINCT_FROM:
case IS_NULL:
return 0;
- default:
+ case EQUALS:
return 1;
+ case IS_NOT_DISTINCT_FROM:
+ return 2;
+ default:
+ return 10;
}
}));
for (RexCall pred : collFldPreds) {
RexNode val = null;
RexNode ref = pred.getOperands().get(0);
- boolean saturatedLookup = false;
if (isBinaryComparison(pred)) {
- SaturatedRexNode saturatedNode = addCast(cluster, pred.getOperands().get(1), fldType);
-
- val = saturatedNode.value;
- saturatedLookup = saturatedNode.saturated;
+ val = pred.getOperands().get(1);
}
SqlOperator op = pred.getOperator();
@@ -556,9 +546,7 @@ public class RexUtils {
if (op.kind == EQUALS || op.kind == IS_NOT_DISTINCT_FROM) {
assert val != null;
- RexNode pred0 = saturatedLookup ? builder.makeCall(op, ref, val) : pred;
-
- return new ExactBounds(pred0, val);
+ return new ExactBounds(pred, val);
} else if (op.kind == IS_NULL) {
return new ExactBounds(pred, nullValue);
} else if (op.kind == OR) {
@@ -720,7 +708,9 @@ public class RexUtils {
RexBuilder builder = builder(cluster);
- RexNode sargCond = sargRef(builder, ref, sarg, fldType, RexUnknownAs.UNKNOWN);
+ RexNode sargCond = sargRef(builder, ref, sarg, fldType, RexUnknownAs.UNKNOWN)
+ .accept(new OutOfRangeLiteralComparisonReductionShuttle(builder));
+
List<RexNode> disjunctions = RelOptUtil.disjunctions(RexUtil.toDnf(builder, sargCond));
List<SearchBounds> bounds = new ArrayList<>(disjunctions.size());
@@ -835,7 +825,7 @@ public class RexUtils {
RexSlot ref;
if (isBinaryComparison(rexNode)) {
- ref = extractRefFromBinary(predCall, cluster);
+ ref = extractRefFromBinary(predCall);
if (ref == null) {
return null;
@@ -846,7 +836,7 @@ public class RexUtils {
predCall = (RexCall) invert(builder(cluster), predCall);
}
} else {
- ref = extractRefFromOperand(predCall, cluster, 0);
+ ref = extractRefFromOperand(predCall, 0);
if (ref == null) {
return null;
@@ -904,17 +894,17 @@ public class RexUtils {
return rexNode;
}
- private static @Nullable RexSlot extractRefFromBinary(RexCall call, RelOptCluster cluster) {
+ private static @Nullable RexSlot extractRefFromBinary(RexCall call) {
assert isBinaryComparison(call) : "Unsupported RexNode is binary comparison: " + call;
- RexSlot leftRef = extractRefFromOperand(call, cluster, 0);
+ RexSlot leftRef = extractRefFromOperand(call, 0);
RexNode rightOp = call.getOperands().get(1);
if (leftRef != null) {
return idxOpSupports(removeCast(rightOp)) ? leftRef : null;
}
- RexSlot rightRef = extractRefFromOperand(call, cluster, 1);
+ RexSlot rightRef = extractRefFromOperand(call, 1);
RexNode leftOp = call.getOperands().get(0);
if (rightRef != null) {
@@ -924,15 +914,24 @@ public class RexUtils {
return null;
}
- private static @Nullable RexSlot extractRefFromOperand(RexCall call, RelOptCluster cluster, int operandNum) {
+ private static @Nullable RexSlot extractRefFromOperand(RexCall call, int operandNum) {
assert isSupportedTreeComparison(call) : "Unsupported RexNode is tree comparison: " + call;
RexNode op = call.getOperands().get(operandNum);
+ RelDataType operandType = op.getType();
- op = removeCast(op);
+ while (isLosslessCast(op)) {
+ op = ((RexCall) op).getOperands().get(0);
+ }
+
+ // We cannot compose search condition if expression requires to be downcasted in order to be put
+ // in bound. Downcast is not safe, and may throw `Out of range` error. As of now, such case
+ // must be handled by user explicitly by manually CASTing to the required type.
+ if (TypeUtils.needCastInSearchBounds(Commons.typeFactory(), operandType, op.getType())) {
+ return null;
+ }
if (op instanceof RexSlot) {
- RelDataType operandType = call.getOperands().get(operandNum).getType();
if (!TypeUtils.needCastInSearchBounds(Commons.typeFactory(), op.getType(), operandType)) {
return (RexSlot) op;
}
@@ -949,7 +948,8 @@ public class RexUtils {
return rightOp.isA(SqlKind.LOCAL_REF) || rightOp.isA(SqlKind.INPUT_REF);
}
- private static boolean isBinaryComparison(RexNode exp) {
+ /** Checks if given {@link RexNode} represents binary comparison. */
+ public static boolean isBinaryComparison(RexNode exp) {
return BINARY_COMPARISON.contains(exp.getKind())
&& (exp instanceof RexCall)
&& ((RexCall) exp).getOperands().size() == 2;
@@ -1152,89 +1152,6 @@ public class RexUtils {
}
}
- private static SaturatedRexNode addCast(RelOptCluster cluster, RexNode condition, RelDataType type) {
- RexNode node = removeCast(condition);
-
- assert idxOpSupports(node) : "Unsupported RexNode in index condition: " + node;
-
- RexBuilder builder = cluster.getRexBuilder();
- SaturatedRexNode saturatedLiteral = toSaturatedValue(builder, node, type);
-
- if (saturatedLiteral != null) {
- return saturatedLiteral;
- } else if (TypeUtils.needCastInSearchBounds(Commons.typeFactory(), node.getType(), type)) {
- return new SaturatedRexNode(builder.makeCast(type, node), false);
- } else {
- return new SaturatedRexNode(node, false);
- }
- }
-
- /**
- * If the given node is a numeric literal, checks whether its cast to {@code type} overflows and in that case
- * performs {@code saturated cast}, converting a value of that literal to the largest value of that type.
- *
- * <p>If overflow does can not occur, returns a literal wrapped in a cast to {@code type}, because values search bounds
- * in index lookups/scans should exactly match to types of database columns.
- *
- * <p>Otherwise returns {@code null}.
- */
- @Nullable
- private static SaturatedRexNode toSaturatedValue(RexBuilder builder, RexNode node, RelDataType type) {
- if (!SqlTypeUtil.isNumeric(node.getType()) || !SqlTypeUtil.isNumeric(type) || !(node instanceof RexLiteral)) {
- return null;
- }
-
- RexLiteral lit = (RexLiteral) node;
- BigDecimal val = lit.getValueAs(BigDecimal.class);
- assert val != null : "No value";
-
- BigDecimal upper;
- BigDecimal lower;
- boolean exact;
-
- if (type.getSqlTypeName() == SqlTypeName.DOUBLE) {
- lower = MIN_DOUBLE_VALUE;
- upper = MAX_DOUBLE_VALUE;
- exact = false;
- } else if (type.getSqlTypeName() == SqlTypeName.REAL || type.getSqlTypeName() == SqlTypeName.FLOAT) {
- lower = MIN_FLOAT_VALUE;
- upper = MAX_FLOAT_VALUE;
- exact = false;
- } else {
- int precision = type.getSqlTypeName().allowsPrec() ? type.getPrecision() : -1;
- int scale = type.getSqlTypeName().allowsScale() ? type.getScale() : -1;
-
- upper = (BigDecimal) type.getSqlTypeName().getLimit(true, Limit.OVERFLOW, false, precision, scale);
- lower = (BigDecimal) type.getSqlTypeName().getLimit(false, Limit.OVERFLOW, false, precision, scale);
- exact = true;
- }
-
- BigDecimal newVal;
- boolean saturated = false;
-
- if (lower.compareTo(val) > 0) {
- newVal = lower;
- saturated = true;
- } else if (val.compareTo(upper) > 0) {
- newVal = upper;
- saturated = true;
- } else if (!SqlTypeUtil.equalSansNullability(node.getType(), type)) {
- newVal = val;
- } else {
- // If literal types and required type, match ignoring nullability,
- // then return a literal as is.
- return new SaturatedRexNode(lit, false);
- }
-
- if (exact) {
- lit = builder.makeExactLiteral(newVal, type);
- } else {
- lit = builder.makeApproxLiteral(newVal, type);
- }
-
- return new SaturatedRexNode(lit, saturated);
- }
-
/**
* Extracts the value of a literal and converts it to the specified type,
* optionally adjusting for time zone offsets when dealing with
@@ -1379,15 +1296,35 @@ public class RexUtils {
return wasChanged ? newSearchBounds : searchBounds;
}
- private static class SaturatedRexNode {
- final RexNode value;
+ /** Check if given {@link RexNode} is a 'loss-less' cast, that is, a cast from which
+ * the original value of the field can be certainly recovered. */
+ public static boolean isLosslessCast(RexNode node) {
+ if (!node.isA(SqlKind.CAST)) {
+ return false;
+ }
- /** Flag indicating whether the numeric value has been saturated or the original value is used. */
- final boolean saturated;
+ RelDataType source = ((RexCall) node).getOperands().get(0).getType();
+ RelDataType target = node.getType();
- private SaturatedRexNode(RexNode value, boolean saturated) {
- this.value = value;
- this.saturated = saturated;
+ if (source.getFamily() != target.getFamily()) {
+ return false;
}
+
+ if (SqlTypeUtil.isExactNumeric(source) && target.getSqlTypeName() == SqlTypeName.DECIMAL) {
+ int tp = target.getPrecision();
+ int ts = target.getScale();
+ int sp = source.getPrecision();
+ int ss = source.getScale();
+
+ return ts >= ss && (tp - ts) >= (sp - ss);
+ }
+
+ if (SqlTypeFamily.CHARACTER.getTypeNames().contains(source.getSqlTypeName())
+ && SqlTypeFamily.CHARACTER.getTypeNames().contains(target.getSqlTypeName())) {
+ return target.getSqlTypeName().compareTo(source.getSqlTypeName()) >= 0
+ && (source.getPrecision() <= target.getPrecision() || target.getPrecision() == RelDataType.PRECISION_NOT_SPECIFIED);
+ }
+
+ return RexUtil.isLosslessCast(source, target);
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
index 426a9aca4a8..41292f65b59 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
@@ -54,6 +54,7 @@ import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.sql.type.BasicSqlType;
import org.apache.calcite.sql.type.IntervalSqlType;
import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.sql.type.SqlTypeName.Limit;
import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.ignite.internal.sql.engine.SchemaAwareConverter;
import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
@@ -107,6 +108,50 @@ public class TypeUtils {
SqlTypeName.INTERVAL_YEAR_MONTH
);
+ /**
+ * Returns the upper bound value for the given SQL type as a {@link BigDecimal}, if applicable.
+ *
+ * <p>If the type is not a numeric type, this method returns {@code null}.</p>
+ *
+ * @param type The {@link RelDataType} representing the SQL type
+ * @return A {@link BigDecimal} representing the maximum value for the given type, or {@code null} if the type is not a numeric.
+ */
+ public static @Nullable BigDecimal upperBoundFor(RelDataType type) {
+ switch (type.getSqlTypeName()) {
+ case TINYINT: return BigDecimal.valueOf(Byte.MAX_VALUE);
+ case SMALLINT: return BigDecimal.valueOf(Short.MAX_VALUE);
+ case INTEGER: return BigDecimal.valueOf(Integer.MAX_VALUE);
+ case BIGINT: return BigDecimal.valueOf(Long.MAX_VALUE);
+ case REAL: return BigDecimal.valueOf(Float.MAX_VALUE);
+ case DOUBLE: return BigDecimal.valueOf(Double.MAX_VALUE);
+ case DECIMAL: return (BigDecimal) type.getSqlTypeName()
+ .getLimit(true, Limit.OVERFLOW, false, type.getPrecision(), type.getScale());
+ default: return null;
+ }
+ }
+
+ /**
+ * Returns the lower bound value for the given SQL type as a {@link BigDecimal}, if applicable.
+ *
+ * <p>If the type is not a numeric type, this method returns {@code null}.</p>
+ *
+ * @param type The {@link RelDataType} representing the SQL type
+ * @return A {@link BigDecimal} representing the minimum value for the given type, or {@code null} if the type is not a numeric.
+ */
+ public static @Nullable BigDecimal lowerBoundFor(RelDataType type) {
+ switch (type.getSqlTypeName()) {
+ case TINYINT: return BigDecimal.valueOf(Byte.MIN_VALUE);
+ case SMALLINT: return BigDecimal.valueOf(Short.MIN_VALUE);
+ case INTEGER: return BigDecimal.valueOf(Integer.MIN_VALUE);
+ case BIGINT: return BigDecimal.valueOf(Long.MIN_VALUE);
+ case REAL: return BigDecimal.valueOf(-Float.MAX_VALUE);
+ case DOUBLE: return BigDecimal.valueOf(-Double.MAX_VALUE);
+ case DECIMAL: return (BigDecimal) type.getSqlTypeName()
+ .getLimit(false, Limit.OVERFLOW, false, type.getPrecision(), type.getScale());
+ default: return null;
+ }
+ }
+
private static class SupportedParamClassesHolder {
// TODO: https://issues.apache.org/jira/browse/IGNITE-17373
static final Set<ColumnType> UNSUPPORTED_COLUMN_TYPES_AS_PARAMETERS = Set.of(ColumnType.PERIOD, ColumnType.DURATION);
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractPlannerTest.java
index 7699db2dc64..9726f152e52 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractPlannerTest.java
@@ -68,7 +68,6 @@ import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.schema.ColumnStrategy;
import org.apache.calcite.schema.SchemaPlus;
-import org.apache.calcite.sql.SqlExplainFormat;
import org.apache.calcite.sql.SqlExplainLevel;
import org.apache.calcite.sql.SqlFunction;
import org.apache.calcite.sql.SqlNode;
@@ -106,6 +105,7 @@ import org.apache.ignite.internal.sql.engine.rel.IgniteKeyValueModify;
import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
import org.apache.ignite.internal.sql.engine.rel.IgniteSystemViewScan;
import org.apache.ignite.internal.sql.engine.rel.IgniteTableScan;
+import org.apache.ignite.internal.sql.engine.rel.explain.ExplainUtils;
import org.apache.ignite.internal.sql.engine.rule.TableModifyToKeyValuePutRule;
import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
import org.apache.ignite.internal.sql.engine.schema.DefaultValueStrategy;
@@ -142,8 +142,6 @@ public abstract class AbstractPlannerTest extends IgniteAbstractTest {
protected static final int DEFAULT_ZONE_ID = 0;
- private static final SqlExplainLevel DEFAULT_EXPLAIN_LEVEL = SqlExplainLevel.EXPPLAN_ATTRIBUTES;
-
private static final AtomicInteger NEXT_TABLE_ID = new AtomicInteger(2001);
/** Last error message. */
@@ -509,7 +507,7 @@ public abstract class AbstractPlannerTest extends IgniteAbstractTest {
) throws Exception {
IgniteRel plan = physicalPlan(sql, schemas, hintStrategies, params, null, disabledRules);
- String planString = RelOptUtil.dumpPlan("", plan, SqlExplainFormat.TEXT, DEFAULT_EXPLAIN_LEVEL);
+ String planString = ExplainUtils.toString(plan);
log.info("statement: {}\n{}", sql, planString);
checkSplitAndSerialization(plan, schemas);
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java
index b5438ad8b0b..0e4f16c5b32 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java
@@ -45,8 +45,8 @@ import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.internal.testframework.WithSystemProperty;
import org.apache.ignite.internal.type.NativeType;
import org.apache.ignite.internal.type.NativeTypes;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@@ -56,9 +56,9 @@ import org.junit.jupiter.params.provider.MethodSource;
*/
@WithSystemProperty(key = "FAST_QUERY_OPTIMIZATION_ENABLED", value = "false")
public class DmlPlannerTest extends AbstractPlannerTest {
- @BeforeAll
- @AfterAll
- public static void resetFlag() {
+ @BeforeEach
+ @AfterEach
+ public void resetFlag() {
Commons.resetFastQueryOptimizationFlag();
}
@@ -270,6 +270,7 @@ public class DmlPlannerTest extends AbstractPlannerTest {
}
@Test
+ @WithSystemProperty(key = "FAST_QUERY_OPTIMIZATION_ENABLED", value = "true")
public void testValuesNodeTypeDerivationForDefaultOperator() throws Exception {
IgniteTable test = TestBuilders.table()
.name("TEST")
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DynamicParametersTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DynamicParametersTest.java
index caa2a88c4a4..c0137799420 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DynamicParametersTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DynamicParametersTest.java
@@ -445,7 +445,7 @@ public class DynamicParametersTest extends AbstractPlannerTest {
checkStatement()
.sql("SELECT NULLIF(CAST(? AS INTEGER), 1)", Unspecified.UNKNOWN)
.parameterTypes(nullable(NativeTypes.INT32))
- .project("CASE(=(CAST(?0):INTEGER, 1), null:INTEGER, CAST(?0):INTEGER)")
+ .project("CASE(=(?0, 1), null:INTEGER, CAST(?0):INTEGER)")
);
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ImplicitCastsTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ImplicitCastsTest.java
index 4b0edf1232a..e0ea3fa1176 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ImplicitCastsTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ImplicitCastsTest.java
@@ -262,11 +262,16 @@ public class ImplicitCastsTest extends AbstractPlannerTest {
RelDataType lhs = (RelDataType) vals[0];
RelDataType rhs = (RelDataType) vals[1];
+ // For exact numeric we expect search bounds only when rhs doesn't require
+ // to be downcasted in order to become a search condition.
+ if (SqlTypeUtil.isExactNumeric(lhs) && SqlTypeUtil.isExactNumeric(rhs)) {
+ return !lhs.getPrecedenceList().containsType(rhs);
+ }
+
// TODO: https://issues.apache.org/jira/browse/IGNITE-19881
// https://issues.apache.org/jira/browse/IGNITE-19882
// SearchBounds are not built for types t1 and t2 when
// t1 != t2 AND either of them is approx numeric or decimal.
- // For integral numeric types t1 != t2 search bounds are always built.
if (SqlTypeUtil.isApproximateNumeric(lhs) || SqlTypeUtil.isApproximateNumeric(rhs)
|| SqlTypeUtil.isDecimal(lhs) || SqlTypeUtil.isDecimal(rhs)) {
@@ -317,7 +322,7 @@ public class ImplicitCastsTest extends AbstractPlannerTest {
checkStatement()
.table("t", "int_col", NativeTypes.INT32, "str_col", NativeTypes.stringOf(4), "bigint_col", NativeTypes.INT64)
.sql("SELECT int_col IN (1, bigint_col) FROM t")
- .project("OR(=(CAST($t0):BIGINT, 1), =(CAST($t0):BIGINT, $t1))")
+ .project("OR(=($t0, 1), =(CAST($t0):BIGINT, $t1))")
);
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/IndexSearchBoundsPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/IndexSearchBoundsPlannerTest.java
index d6ede40ed97..f526dafa584 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/IndexSearchBoundsPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/IndexSearchBoundsPlannerTest.java
@@ -39,12 +39,14 @@ import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
+import org.apache.ignite.internal.sql.engine.framework.TestBuilders;
import org.apache.ignite.internal.sql.engine.framework.TestBuilders.TableBuilder;
import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
import org.apache.ignite.internal.sql.engine.rel.IgniteIndexScan;
+import org.apache.ignite.internal.sql.engine.rel.IgniteValues;
import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Collation;
import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
import org.apache.ignite.internal.sql.engine.schema.IgniteSchema;
@@ -467,7 +469,7 @@ public class IndexSearchBoundsPlannerTest extends AbstractPlannerTest {
* Index bound checks - search key lies out of value range.
*/
@ParameterizedTest
- @MethodSource("boundsTypeLimits")
+ @MethodSource("boundsTypeLimitsWithinRange")
public void testBoundsTypeLimits(RelDataType type, Object value, Predicate<SearchBounds> bounds) throws Exception {
IgniteSchema schema = createSchemaFrom(
tableB("TEST2", "C2", type).andThen(addSortIndex("C2")));
@@ -475,6 +477,15 @@ public class IndexSearchBoundsPlannerTest extends AbstractPlannerTest {
assertBounds("SELECT * FROM test2 WHERE C2 = " + value, List.of(), schema, bounds);
}
+ @ParameterizedTest
+ @MethodSource("boundsTypeLimitsOutOfRange")
+ public void testBoundsTypeLimitsOutOfRange(RelDataType type, Object value) throws Exception {
+ IgniteSchema schema = createSchemaFrom(
+ tableB("TEST2", "C2", type).andThen(addSortIndex("C2")));
+
+ assertPlan("SELECT * FROM test2 WHERE C2 = " + value, schema, isInstanceOf(IgniteValues.class));
+ }
+
@ParameterizedTest
@MethodSource("indexTypeAndNumericsInBounds")
public void testCorrectNumericIndexInBounds(
@@ -578,55 +589,44 @@ public class IndexSearchBoundsPlannerTest extends AbstractPlannerTest {
);
}
- private static Stream<Arguments> boundsTypeLimits() {
+ private static Stream<Arguments> boundsTypeLimitsWithinRange() {
RelDataType tinyintType = sqlType(SqlTypeName.TINYINT);
- byte[] tinyIntTypeLimits = {Byte.MIN_VALUE, Byte.MAX_VALUE};
List<Arguments> tinyInts = List.of(
- arguments(tinyintType, -129, exact(tinyIntTypeLimits[0])),
- arguments(tinyintType, -128, exact(tinyIntTypeLimits[0])),
- arguments(tinyintType, 127, exact(tinyIntTypeLimits[1])),
- arguments(tinyintType, 128, exact(tinyIntTypeLimits[1]))
+ arguments(tinyintType, Byte.MIN_VALUE, exact(Byte.MIN_VALUE)),
+ arguments(tinyintType, Byte.MAX_VALUE, exact(Byte.MAX_VALUE))
);
RelDataType smallIntType = sqlType(SqlTypeName.SMALLINT);
- short[] smallIntLimits = {Short.MIN_VALUE, Short.MAX_VALUE};
List<Arguments> smallInts = List.of(
- arguments(smallIntType, (-(int) Math.pow(2, 15) - 1), exact(smallIntLimits[0])),
- arguments(smallIntType, (-(int) Math.pow(2, 15)), exact(smallIntLimits[0])),
- arguments(smallIntType, ((int) Math.pow(2, 15)), exact(smallIntLimits[1])),
- arguments(smallIntType, ((int) Math.pow(2, 15) + 1), exact(smallIntLimits[1]))
+ arguments(smallIntType, Short.MIN_VALUE, exact(Short.MIN_VALUE)),
+ arguments(smallIntType, Short.MAX_VALUE, exact(Short.MAX_VALUE))
);
RelDataType intType = sqlType(SqlTypeName.INTEGER);
- int[] intLimits = {Integer.MIN_VALUE, Integer.MAX_VALUE};
List<Arguments> ints = List.of(
- arguments(intType, (-(long) Math.pow(2, 31) - 1), exact(intLimits[0])),
- arguments(intType, (-(long) Math.pow(2, 31)), exact(intLimits[0])),
- arguments(intType, ((long) Math.pow(2, 31)), exact(intLimits[1])),
- arguments(intType, ((long) Math.pow(2, 31) + 1), exact(intLimits[1]))
+ arguments(intType, Integer.MIN_VALUE, exact(Integer.MIN_VALUE)),
+ arguments(intType, Integer.MAX_VALUE, exact(Integer.MAX_VALUE))
);
RelDataType bigIntType = sqlType(SqlTypeName.BIGINT);
- BigDecimal[] bigIntTypeLimits = {BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MAX_VALUE)};
List<Arguments> bigints = List.of(
- arguments(bigIntType, BigInteger.TWO.pow(63).negate(), exact(bigIntTypeLimits[0]))
+ arguments(bigIntType, Long.MIN_VALUE, exact(Long.MIN_VALUE)),
+ arguments(bigIntType, Long.MAX_VALUE, exact(Long.MAX_VALUE))
);
RelDataType decimal3Type = sqlType(SqlTypeName.DECIMAL, 3);
BigDecimal[] decimal3TypeLimits = {BigDecimal.valueOf(-999), BigDecimal.valueOf(999)};
List<Arguments> decimal3s = List.of(
- arguments(decimal3Type, "(-1000)::DECIMAL(3)", exact(decimal3TypeLimits[0])),
- arguments(decimal3Type, "(-999)::DECIMAL(3)", exact(decimal3TypeLimits[0])),
- arguments(decimal3Type, "999::DECIMAL(3)", exact(decimal3TypeLimits[1])),
- arguments(decimal3Type, "1000::DECIMAL(3)", exact(decimal3TypeLimits[1]))
+ arguments(decimal3Type, "-999", exact(decimal3TypeLimits[0])),
+ arguments(decimal3Type, "999", exact(decimal3TypeLimits[1]))
);
RelDataType decimal53Type = sqlType(SqlTypeName.DECIMAL, 5, 3);
BigDecimal[] decimal53TypeLimits = {new BigDecimal("-99.999"), new BigDecimal("99.999")};
List<Arguments> decimal35s = List.of(
- arguments(decimal53Type, "(-100.000)::DECIMAL(5, 3)", exact(decimal53TypeLimits[0])),
- arguments(decimal53Type, "(100.000)::DECIMAL(5, 3)", exact(decimal53TypeLimits[1]))
+ arguments(decimal53Type, "-99.999", exact(decimal53TypeLimits[0])),
+ arguments(decimal53Type, "99.999", exact(decimal53TypeLimits[1]))
);
// TODO https://issues.apache.org/jira/browse/IGNITE-19858
@@ -648,6 +648,82 @@ public class IndexSearchBoundsPlannerTest extends AbstractPlannerTest {
).flatMap(Collection::stream);
}
+ private static Stream<Arguments> boundsTypeLimitsOutOfRange() {
+ RelDataType tinyintType = sqlType(SqlTypeName.TINYINT);
+ List<Arguments> tinyInts = List.of(
+ arguments(tinyintType, -129),
+ arguments(tinyintType, 128)
+ );
+
+ RelDataType smallIntType = sqlType(SqlTypeName.SMALLINT);
+ List<Arguments> smallInts = List.of(
+ arguments(smallIntType, (-1 + Short.MIN_VALUE)),
+ arguments(smallIntType, (1 + Short.MAX_VALUE))
+ );
+
+ RelDataType intType = sqlType(SqlTypeName.INTEGER);
+ List<Arguments> ints = List.of(
+ arguments(intType, (-1 + (long) Integer.MIN_VALUE)),
+ arguments(intType, (1 + (long) Integer.MAX_VALUE))
+ );
+
+ RelDataType bigIntType = sqlType(SqlTypeName.BIGINT);
+ List<Arguments> bigints = List.of(
+ arguments(bigIntType, BigInteger.valueOf(Long.MIN_VALUE).subtract(BigInteger.ONE)),
+ arguments(bigIntType, BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.ONE))
+ );
+
+ RelDataType decimal3Type = sqlType(SqlTypeName.DECIMAL, 3);
+ List<Arguments> decimal3s = List.of(
+ arguments(decimal3Type, "-1000"),
+ arguments(decimal3Type, "1000")
+ );
+
+ RelDataType decimal53Type = sqlType(SqlTypeName.DECIMAL, 5, 3);
+ List<Arguments> decimal35s = List.of(
+ arguments(decimal53Type, "-100.123"),
+ arguments(decimal53Type, "100.123")
+ );
+
+ return Stream.of(
+ tinyInts,
+ smallInts,
+ ints,
+ bigints,
+ decimal3s,
+ decimal35s
+ ).flatMap(Collection::stream);
+ }
+
+ @Test
+ void testUpcastOnTableRefWithIn() throws Exception {
+ publicSchema = createSchema(
+ TestBuilders.table()
+ .name("TEST")
+ .addColumn("C1", NativeTypes.INT8)
+ .addColumn("C2", NativeTypes.INT32)
+ .distribution(someAffinity())
+ .sortedIndex()
+ .name("TEST_C1_IDX")
+ .addColumn("C1", Collation.ASC_NULLS_LAST)
+ .end()
+ .build()
+ );
+
+ assertBounds("SELECT * FROM test WHERE c1 IN (1, 3, 5)",
+ multi(exact(1), exact(3), exact(5))
+ );
+
+ // certain bounds out of range
+ assertBounds("SELECT * FROM test WHERE c1 IN (-129, -128, 1, 127, 128)",
+ multi(exact(-128), exact(1), exact(127))
+ );
+
+ assertBounds("SELECT * FROM test WHERE c1 IN (1::SMALLINT, 3, 5::DECIMAL(19, 2))",
+ multi(exact(1), exact(3), exact(5))
+ );
+ }
+
private static Predicate<SearchBounds> exact(Object val) {
Predicate<SearchBounds> p = b -> b instanceof ExactBounds && matchValue(val, ((ExactBounds) b).bound());
return named(p, format("={}", val));
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/OutOfRangeLiteralsInComparisonReductionPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/OutOfRangeLiteralsInComparisonReductionPlannerTest.java
new file mode 100644
index 00000000000..a0e31bc1bfd
--- /dev/null
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/OutOfRangeLiteralsInComparisonReductionPlannerTest.java
@@ -0,0 +1,473 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.sql.engine.planner;
+
+import static org.junit.jupiter.params.provider.Arguments.arguments;
+
+import java.util.function.Predicate;
+import java.util.function.UnaryOperator;
+import java.util.stream.Stream;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.ignite.internal.sql.engine.framework.TestBuilders.TableBuilder;
+import org.apache.ignite.internal.sql.engine.rel.IgniteValues;
+import org.apache.ignite.internal.sql.engine.rel.ProjectableFilterableTableScan;
+import org.apache.ignite.internal.sql.engine.schema.IgniteSchema;
+import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
+import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
+import org.apache.ignite.internal.type.NativeTypes;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+/** Test to validate behaviour of constant reduction in binary comparison operation. */
+public class OutOfRangeLiteralsInComparisonReductionPlannerTest extends AbstractPlannerTest {
+ /**
+ * Index bound checks - search key lies out of value range.
+ */
+ @ParameterizedTest
+ @MethodSource("args")
+ void testBoundsTypeLimits(RelDataType type, String expression, String expectedExpression) throws Exception {
+ IgniteSchema schema = createSchemaFrom(table("TEST", "C2", type));
+
+ Predicate<RelNode> matcher;
+ if ("emptyValuesNode".equals(expectedExpression)) {
+ matcher = emptyValuesNode();
+ } else {
+ matcher = expression(expectedExpression);
+ }
+
+ assertPlan("SELECT * FROM test WHERE C2 " + expression, schema, matcher);
+ }
+
+ private static Stream<Arguments> args() {
+ return Stream.of(
+ // Column type, expr to use in condition, expected expression.
+
+ // TINYINT
+
+ arguments(sqlType(SqlTypeName.TINYINT), "= -129", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= -128.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= -128", "=($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= -127.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= 128", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= 127.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= 127", "=($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "= 126.1", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (-129, -128.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (-128.1, -127.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (-128.1, -128, -127.1)", "=($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (-128.1, -128, -127.1, -127)",
+ "SEARCH($t1, Sarg[-128.0:TINYINT, -127.0:TINYINT]:TINYINT)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (128, 127.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (127.1, 126.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (127.1, 127, 126.1)", "=($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "IN (127.1, 127, 126.1, 126)",
+ "SEARCH($t1, Sarg[126.0:TINYINT, 127.0:TINYINT]:TINYINT)"),
+
+ arguments(sqlType(SqlTypeName.TINYINT), ">= -129", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= -128.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= -128", ">=($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= -127.1", ">=($t1, -127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= 128", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= 127.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= 127", ">=($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), ">= 126.1", ">($t1, 126)"),
+
+ arguments(sqlType(SqlTypeName.TINYINT), "> -129", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> -128.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> -128", ">($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> -127.1", ">=($t1, -127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> 128", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> 127.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> 127", ">($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "> 126.1", ">($t1, 126)"),
+
+ arguments(sqlType(SqlTypeName.TINYINT), "< -129", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< -128.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< -128", "<($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< -127.1", "<($t1, -127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< 128", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< 127.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< 127", "<($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "< 126.1", "<=($t1, 126)"),
+
+ arguments(sqlType(SqlTypeName.TINYINT), "<= -129", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= -128.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= -128", "<=($t1, -128)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= -127.1", "<($t1, -127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= 128", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= 127.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= 127", "<=($t1, 127)"),
+ arguments(sqlType(SqlTypeName.TINYINT), "<= 126.1", "<=($t1, 126)"),
+
+ // SMALLINT
+
+ arguments(sqlType(SqlTypeName.SMALLINT), "= -32769", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= -32768.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= -32768", "=($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= -32767.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= 32768", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= 32767.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= 32767", "=($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "= 32766.1", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (-32769, -32768.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (-32768.1, -32767.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (-32768.1, -32768, -32767.1)", "=($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (-32768.1, -32768, -32767.1, -32767)",
+ "SEARCH($t1, Sarg[-32768.0:SMALLINT, -32767.0:SMALLINT]:SMALLINT)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (32768, 32767.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (32767.1, 32766.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (32767.1, 32767, 32766.1)", "=($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "IN (32767.1, 32767, 32766.1, 32766)",
+ "SEARCH($t1, Sarg[32766.0:SMALLINT, 32767.0:SMALLINT]:SMALLINT)"),
+
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= -32769", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= -32768.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= -32768", ">=($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= -32767.1", ">=($t1, -32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= 32768", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= 32767.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= 32767", ">=($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), ">= 32766.1", ">($t1, 32766)"),
+
+ arguments(sqlType(SqlTypeName.SMALLINT), "> -32769", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> -32768.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> -32768", ">($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> -32767.1", ">=($t1, -32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> 32768", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> 32767.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> 32767", ">($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "> 32766.1", ">($t1, 32766)"),
+
+ arguments(sqlType(SqlTypeName.SMALLINT), "< -32769", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< -32768.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< -32768", "<($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< -32767.1", "<($t1, -32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< 32768", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< 32767.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< 32767", "<($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "< 32766.1", "<=($t1, 32766)"),
+
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= -32769", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= -32768.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= -32768", "<=($t1, -32768)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= -32767.1", "<($t1, -32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= 32768", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= 32767.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= 32767", "<=($t1, 32767)"),
+ arguments(sqlType(SqlTypeName.SMALLINT), "<= 32766.1", "<=($t1, 32766)"),
+
+ // INTEGER
+
+ arguments(sqlType(SqlTypeName.INTEGER), "= -2147483649", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= -2147483648.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= -2147483648", "=($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= -2147483647.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= 2147483648", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= 2147483647.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= 2147483647", "=($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "= 2147483646.1", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (-2147483649, -2147483648.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (-2147483648.1, -2147483647.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (-2147483648.1, -2147483648, -2147483647.1)", "=($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (-2147483648.1, -2147483648, -2147483647.1, -2147483647)",
+ "SEARCH($t1, Sarg[-2147483648.0, -2147483647.0])"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (2147483648, 2147483647.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (2147483647.1, 2147483646.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (2147483647.1, 2147483647, 2147483646.1)", "=($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "IN (2147483647.1, 2147483647, 2147483646.1, 2147483646)",
+ "SEARCH($t1, Sarg[2147483646.0, 2147483647.0])"),
+
+ arguments(sqlType(SqlTypeName.INTEGER), ">= -2147483649", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= -2147483648.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= -2147483648", ">=($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= -2147483647.1", ">=($t1, -2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= 2147483648", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= 2147483647.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= 2147483647", ">=($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), ">= 2147483646.1", ">($t1, 2147483646)"),
+
+ arguments(sqlType(SqlTypeName.INTEGER), "> -2147483649", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> -2147483648.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> -2147483648", ">($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> -2147483647.1", ">=($t1, -2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> 2147483648", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> 2147483647.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> 2147483647", ">($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "> 2147483646.1", ">($t1, 2147483646)"),
+
+ arguments(sqlType(SqlTypeName.INTEGER), "< -2147483649", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< -2147483648.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< -2147483648", "<($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< -2147483647.1", "<($t1, -2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< 2147483648", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< 2147483647.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< 2147483647", "<($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "< 2147483646.1", "<=($t1, 2147483646)"),
+
+ arguments(sqlType(SqlTypeName.INTEGER), "<= -2147483649", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= -2147483648.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= -2147483648", "<=($t1, -2147483648)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= -2147483647.1", "<($t1, -2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= 2147483648", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= 2147483647.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= 2147483647", "<=($t1, 2147483647)"),
+ arguments(sqlType(SqlTypeName.INTEGER), "<= 2147483646.1", "<=($t1, 2147483646)"),
+
+ // BIGINT
+
+ arguments(sqlType(SqlTypeName.BIGINT), "= -9223372036854775809", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= -9223372036854775808.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= -9223372036854775808", "=($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= -9223372036854775807.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= 9223372036854775808", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= 9223372036854775807.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= 9223372036854775807", "=($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "= 9223372036854775806.1", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (-9223372036854775809, -9223372036854775808.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (-9223372036854775808.1, -9223372036854775807.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (-9223372036854775808.1, -9223372036854775808, -9223372036854775807.1)",
+ "=($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT),
+ "IN (-9223372036854775808.1, -9223372036854775808, -9223372036854775807.1, -9223372036854775807)",
+ "SEARCH($t1, Sarg[-9223372036854775808L:BIGINT, -9223372036854775807L:BIGINT]:BIGINT)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (9223372036854775808, 9223372036854775807.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (9223372036854775807.1, 9223372036854775806.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "IN (9223372036854775807.1, 9223372036854775807, 9223372036854775806.1)",
+ "=($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT),
+ "IN (9223372036854775807.1, 9223372036854775807, 9223372036854775806.1, 9223372036854775806)",
+ "SEARCH($t1, Sarg[9223372036854775806L:BIGINT, 9223372036854775807L:BIGINT]:BIGINT)"),
+
+ arguments(sqlType(SqlTypeName.BIGINT), ">= -9223372036854775809", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= -9223372036854775808.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= -9223372036854775808", ">=($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= -9223372036854775807.1", ">=($t1, -9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= 9223372036854775808", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= 9223372036854775807.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= 9223372036854775807", ">=($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), ">= 9223372036854775806.1", ">($t1, 9223372036854775806)"),
+
+ arguments(sqlType(SqlTypeName.BIGINT), "> -9223372036854775809", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> -9223372036854775808.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> -9223372036854775808", ">($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> -9223372036854775807.1", ">=($t1, -9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> 9223372036854775808", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> 9223372036854775807.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> 9223372036854775807", ">($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "> 9223372036854775806.1", ">($t1, 9223372036854775806)"),
+
+ arguments(sqlType(SqlTypeName.BIGINT), "< -9223372036854775809", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< -9223372036854775808.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< -9223372036854775808", "<($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< -9223372036854775807.1", "<($t1, -9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< 9223372036854775808", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< 9223372036854775807.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< 9223372036854775807", "<($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "< 9223372036854775806.1", "<=($t1, 9223372036854775806)"),
+
+ arguments(sqlType(SqlTypeName.BIGINT), "<= -9223372036854775809", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= -9223372036854775808.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= -9223372036854775808", "<=($t1, -9223372036854775808)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= -9223372036854775807.1", "<($t1, -9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= 9223372036854775808", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= 9223372036854775807.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= 9223372036854775807", "<=($t1, 9223372036854775807)"),
+ arguments(sqlType(SqlTypeName.BIGINT), "<= 9223372036854775806.1", "<=($t1, 9223372036854775806)"),
+
+ // DECIMAL(1,0)
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= -9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= -9.0", "=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= -9", "=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= -8.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= 9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= 9.0", "=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= 9", "=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "= 8.1", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (-10, -9.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (-9.1, -8.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (-9.1, -9, -8.1)", "=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (-9.1, -9, -8.1, -8)",
+ "SEARCH($t1, Sarg[-9.0:DECIMAL(1, 0), -8.0:DECIMAL(1, 0)]:DECIMAL(1, 0))"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (10, 9.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (9.1, 8.1)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (9.1, 9, 8.1)", "=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "IN (9.1, 9, 8.1, 8)",
+ "SEARCH($t1, Sarg[8.0:DECIMAL(1, 0), 9.0:DECIMAL(1, 0)]:DECIMAL(1, 0))"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= -10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= -9.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= -9.0", ">=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= -9", ">=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= -8.1", ">=($t1, -8)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= 9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= 9.0", ">=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= 9", ">=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), ">= 8.1", ">($t1, 8)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> -10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> -9.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> -9.0", ">($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> -9", ">($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> -8.1", ">=($t1, -8)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> 9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> 9.0", ">($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> 9", ">($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "> 8.1", ">($t1, 8)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< -9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< -9.0", "<($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< -9", "<($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< -8.1", "<($t1, -8)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< 10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< 9.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< 9.0", "<($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< 9", "<($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "< 8.1", "<=($t1, 8)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= -9.1", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= -9.0", "<=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= -9", "<=($t1, -9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= -8.1", "<($t1, -8)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= 10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= 9.1", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= 9.0", "<=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= 9", "<=($t1, 9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 1), "<= 8.1", "<=($t1, 8)"),
+
+ // DECIMAL(2,1)
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= -9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= -9.90", "=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= -9.9", "=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= -8.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= 9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= 9.90", "=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= 9.9", "=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "= 8.91", "emptyValuesNode"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (-10, -9.91)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (-9.91, -8.91)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (-9.91, -9.9, -8.91)", "=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (-9.91, -9.9, -8.91, -8.9)",
+ "SEARCH($t1, Sarg[-9.90:DECIMAL(2, 1), -8.90:DECIMAL(2, 1)]:DECIMAL(2, 1))"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (10, 9.91)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (9.91, 8.91)", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (9.91, 9.9, 8.91)", "=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "IN (9.91, 9.9, 8.91, 8.9)",
+ "SEARCH($t1, Sarg[8.90:DECIMAL(2, 1), 9.90:DECIMAL(2, 1)]:DECIMAL(2, 1))"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= -10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= -9.91", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= -9.90", ">=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= -9.9", ">=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= -8.91", ">=($t1, -8.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= 9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= 9.90", ">=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= 9.9", ">=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), ">= 8.91", ">($t1, 8.9)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> -10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> -9.91", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> -9.90", ">($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> -9.9", ">($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> -8.91", ">=($t1, -8.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> 10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> 9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> 9.90", ">($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> 9.9", ">($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "> 8.91", ">($t1, 8.9)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< -9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< -9.90", "<($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< -9.9", "<($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< -8.91", "<($t1, -8.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< 10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< 9.91", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< 9.90", "<($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< 9.9", "<($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "< 8.91", "<=($t1, 8.9)"),
+
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= -10", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= -9.91", "emptyValuesNode"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= -9.90", "<=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= -9.9", "<=($t1, -9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= -8.91", "<($t1, -8.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= 10", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= 9.91", "IS NOT NULL($t1)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= 9.90", "<=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= 9.9", "<=($t1, 9.9)"),
+ arguments(sqlType(SqlTypeName.DECIMAL, 2, 1), "<= 8.91", "<=($t1, 8.9)")
+ );
+ }
+
+ private static RelDataType sqlType(SqlTypeName typeName) {
+ return TYPE_FACTORY.createSqlType(typeName);
+ }
+
+ private static RelDataType sqlType(SqlTypeName typeName, int precision) {
+ return TYPE_FACTORY.createSqlType(typeName, precision);
+ }
+
+ private static RelDataType sqlType(SqlTypeName typeName, int precision, int scale) {
+ return TYPE_FACTORY.createSqlType(typeName, precision, scale);
+ }
+
+ private static Predicate<RelNode> emptyValuesNode() {
+ return byClass(IgniteValues.class).and(node -> ((IgniteValues) node).tuples.isEmpty());
+ }
+
+ private static Predicate<RelNode> expression(String expected) {
+ return byClass(ProjectableFilterableTableScan.class)
+ .and(node -> {
+ var tableScan = (ProjectableFilterableTableScan) node;
+
+ RexNode condition = tableScan.condition();
+ return condition != null && condition.toString().equals(expected);
+
+ });
+ }
+
+ private static UnaryOperator<TableBuilder> table(String tableName, String column, RelDataType type) {
+ return tableBuilder -> tableBuilder
+ .name(tableName)
+ .addColumn("C1", NativeTypes.INT32)
+ .addColumn(column, IgniteTypeFactory.relDataTypeToNative(type))
+ .size(400)
+ .distribution(IgniteDistributions.single());
+ }
+}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PartitionPruningMetadataTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PartitionPruningMetadataTest.java
index 9921e0adc9f..3e9f476a442 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PartitionPruningMetadataTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PartitionPruningMetadataTest.java
@@ -415,8 +415,7 @@ public class PartitionPruningMetadataTest extends AbstractPlannerTest {
NO_META_5e("c1 = 42 AND c1 = SUBSTRING(c3::VARCHAR, 2)::INTEGER", TABLE_C1_C2),
NO_META_5f("c1 = 42 AND c2 = SUBSTRING(c3::VARCHAR, 2)::INTEGER", TABLE_C1_C2),
- // No constant folding
- CONST_FOLDING_1a("c1 = 10 + 4", TABLE_C1),
+ CONST_FOLDING_1a("c1 = 10 + 4", TABLE_C1, "[c1=14]"),
CONST_FOLDING_1b("c1 = ? + 4", TABLE_C1),
// 0s removed by Calcite.
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PrimaryKeyLookupPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PrimaryKeyLookupPlannerTest.java
index 1f423f7b03f..252651286e4 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PrimaryKeyLookupPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PrimaryKeyLookupPlannerTest.java
@@ -36,7 +36,10 @@ import org.apache.ignite.internal.sql.engine.framework.TestBuilders;
import org.apache.ignite.internal.sql.engine.framework.TestCluster;
import org.apache.ignite.internal.sql.engine.framework.TestNode;
import org.apache.ignite.internal.sql.engine.prepare.KeyValueGetPlan;
+import org.apache.ignite.internal.sql.engine.prepare.MultiStepPlan;
import org.apache.ignite.internal.sql.engine.prepare.QueryPlan;
+import org.apache.ignite.internal.sql.engine.rel.IgniteValues;
+import org.hamcrest.Matchers;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
@@ -200,18 +203,16 @@ public class PrimaryKeyLookupPlannerTest extends AbstractPlannerTest {
{
QueryPlan plan = node.prepare("SELECT * FROM test WHERE id = 128");
- assertThat(plan, instanceOf(KeyValueGetPlan.class));
- assertKeyExpressions((KeyValueGetPlan) plan, "127:TINYINT");
- assertCondition((KeyValueGetPlan) plan, "=(CAST($t0):INTEGER NOT NULL, 128)");
+ assertThat(plan, instanceOf(MultiStepPlan.class));
+ assertEmptyValuesNode((MultiStepPlan) plan);
}
// Out of range: TINYINT_MIN - 1.
{
QueryPlan plan = node.prepare("SELECT * FROM test WHERE id = -129");
- assertThat(plan, instanceOf(KeyValueGetPlan.class));
- assertKeyExpressions((KeyValueGetPlan) plan, "-128:TINYINT");
- assertCondition((KeyValueGetPlan) plan, "=(CAST($t0):INTEGER NOT NULL, -129)");
+ assertThat(plan, instanceOf(MultiStepPlan.class));
+ assertEmptyValuesNode((MultiStepPlan) plan);
}
// TINYINT_MAX - no predicate expected.
@@ -233,6 +234,11 @@ public class PrimaryKeyLookupPlannerTest extends AbstractPlannerTest {
}
}
+ private static void assertEmptyValuesNode(MultiStepPlan plan) {
+ assertThat(plan.getRel(), instanceOf(IgniteValues.class));
+ assertThat(((IgniteValues) plan.getRel()).tuples, Matchers.empty());
+ }
+
private static void assertKeyExpressions(KeyValueGetPlan plan, String... expectedExpressions) {
List<String> keyExpressions = (plan.getRel()).keyExpressions().stream()
.map(RexNode::toString)
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SelectRowCountEstimationTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SelectRowCountEstimationTest.java
index 9b3364abc0c..1a89c794479 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SelectRowCountEstimationTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SelectRowCountEstimationTest.java
@@ -140,7 +140,7 @@ public class SelectRowCountEstimationTest extends BaseRowsProcessedEstimationTes
Arguments.of("SELECT * FROM CATALOG_SALES WHERE SQRT(CS_SOLD_DATE_SK) > 10", COMPARISON_SELECTIVITY),
Arguments.of("SELECT * FROM CATALOG_SALES WHERE CS_SOLD_DATE_SK > 10 OR CS_SOLD_DATE_SK IS NOT NULL",
IS_NOT_NULL_SELECTIVITY),
- Arguments.of("SELECT * FROM CATALOG_SALES WHERE CS_SOLD_DATE_SK = 10 OR LENGTH('12') = 2", EQ_SELECTIVITY),
+ Arguments.of("SELECT * FROM CATALOG_SALES WHERE CS_SOLD_DATE_SK = 10 OR LENGTH(CURRENT_DATE::VARCHAR) = 2", EQ_SELECTIVITY),
// IS NOT NULL over NOT NULL column
Arguments.of("SELECT * FROM CATALOG_SALES WHERE CS_ITEM_SK IS NOT NULL", 1.0)
);
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpchQueryPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpchQueryPlannerTest.java
index d4e9ed9681b..90dd5ccd27f 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpchQueryPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpchQueryPlannerTest.java
@@ -70,4 +70,9 @@ public class TpchQueryPlannerTest extends AbstractTpcQueryPlannerTest {
return loadFromResource(queryFile);
}
}
+
+ @SuppressWarnings("unused") // used reflectively by AbstractTpcQueryPlannerTest
+ static void updateQueryPlan(String queryId, String newPlan) {
+ TpcdsQueryPlannerTest.updateQueryPlan(queryId, newPlan);
+ }
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/datatypes/NumericInTypeCoercionTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/datatypes/NumericInTypeCoercionTest.java
index 3ddac81d2e7..2442a547510 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/datatypes/NumericInTypeCoercionTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/datatypes/NumericInTypeCoercionTest.java
@@ -28,6 +28,7 @@ import org.apache.ignite.internal.sql.engine.framework.TestBuilders;
import org.apache.ignite.internal.sql.engine.planner.datatypes.utils.NumericPair;
import org.apache.ignite.internal.sql.engine.planner.datatypes.utils.Types;
import org.apache.ignite.internal.sql.engine.rel.IgniteTableScan;
+import org.apache.ignite.internal.sql.engine.rel.IgniteValues;
import org.apache.ignite.internal.sql.engine.schema.IgniteSchema;
import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
import org.apache.ignite.internal.sql.engine.util.SqlTestUtils;
@@ -2694,7 +2695,7 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
}
@ParameterizedTest
- @MethodSource("inOperandsLiterals")
+ @MethodSource("inOperandsLiteralsWithinRange")
public void literals(
NumericPair numericPair,
Matcher<RexNode> first,
@@ -2719,33 +2720,47 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
assertPlan("SELECT c1 FROM T1 WHERE c1 IN " + value, schema, matcher);
}
+ @ParameterizedTest
+ @MethodSource("inOperandsLiteralsOutOfRange")
+ public void literalsOutOfRange(
+ NumericPair numericPair
+ ) throws Exception {
+ IgniteSchema schema = createSchema(
+ TestBuilders.table()
+ .name("T1")
+ .distribution(IgniteDistributions.single())
+ .addColumn("C1", numericPair.first())
+ .addColumn("C2", numericPair.second())
+ .build()
+ );
+
+ // SHORT values can intersect with a DECIMAL with a 5 digits in integer parts, so for SHORT (INT16) we need to generate values
+ // take it into consideration.
+ boolean closerToBound = numericPair.first().spec() == ColumnType.INT16;
+
+ String value = "(" + generateLiteral(numericPair.second(), closerToBound) + ")";
+
+ Predicate<IgniteValues> matcher = isInstanceOf(IgniteValues.class);
+ assertPlan("SELECT c1 FROM T1 WHERE c1 IN " + value, schema, matcher);
+ }
+
/**
- * This test ensures that {@link #inOperandsLiterals()} doesn't miss any type pair from {@link NumericPair}.
+ * This test ensures that combination of {@link #inOperandsLiteralsWithinRange()} and {@link #inOperandsLiteralsOutOfRange()}
+ * doesn't miss any type pair from {@link NumericPair}.
*/
@Test
void inOperandsLiteralsIncludeAllPairs() {
- checkIncludesAllNumericTypePairs(inOperandsLiterals());
+ checkIncludesAllNumericTypePairs(Stream.concat(inOperandsLiteralsWithinRange(), inOperandsLiteralsOutOfRange()));
}
- private static Stream<Arguments> inOperandsLiterals() {
+ private static Stream<Arguments> inOperandsLiteralsWithinRange() {
return Stream.of(
// TINYINT
Arguments.of(
NumericPair.TINYINT_TINYINT,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
- Arguments.of(
- NumericPair.TINYINT_SMALLINT,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_INT,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
+ ofTypeWithoutCast(NativeTypes.INT8),
+ ofTypeWithoutCast(NativeTypes.INT8)
),
Arguments.of(
@@ -2760,78 +2775,24 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.TINYINT_BIGINT,
- castTo(NativeTypes.INT64),
- ofTypeWithoutCast(NativeTypes.INT64)
- ),
-
Arguments.of(
NumericPair.TINYINT_DECIMAL_1_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
+ ofTypeWithoutCast(NativeTypes.INT8),
+ ofTypeWithoutCast(NativeTypes.INT8)
),
Arguments.of(
NumericPair.TINYINT_DECIMAL_2_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_2_1,
- castTo(Types.DECIMAL_4_1),
- ofTypeWithoutCast(Types.DECIMAL_4_1)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_3_1,
- castTo(Types.DECIMAL_4_1),
- ofTypeWithoutCast(Types.DECIMAL_4_1)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_4_3,
- castTo(Types.DECIMAL_6_3),
- ofTypeWithoutCast(Types.DECIMAL_6_3)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_5_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_5_3,
- castTo(Types.DECIMAL_6_3),
- ofTypeWithoutCast(Types.DECIMAL_6_3)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.TINYINT_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
+ ofTypeWithoutCast(NativeTypes.INT8),
+ ofTypeWithoutCast(NativeTypes.INT8)
),
// SMALLINT
Arguments.of(
NumericPair.SMALLINT_SMALLINT,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_INT,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
+ ofTypeWithoutCast(NativeTypes.INT16),
+ ofTypeWithoutCast(NativeTypes.INT16)
),
Arguments.of(
@@ -2846,64 +2807,16 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.SMALLINT_BIGINT,
- castTo(NativeTypes.INT64),
- ofTypeWithoutCast(NativeTypes.INT64)
- ),
-
Arguments.of(
NumericPair.SMALLINT_DECIMAL_1_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
+ ofTypeWithoutCast(NativeTypes.INT16),
+ ofTypeWithoutCast(NativeTypes.INT16)
),
Arguments.of(
NumericPair.SMALLINT_DECIMAL_2_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_2_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_3_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_4_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_5_0,
- castTo(NativeTypes.INT32),
- ofTypeWithoutCast(NativeTypes.INT32)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_5_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.SMALLINT_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
+ ofTypeWithoutCast(NativeTypes.INT16),
+ ofTypeWithoutCast(NativeTypes.INT16)
),
// INT
@@ -2926,12 +2839,6 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.INT_BIGINT,
- castTo(NativeTypes.INT64),
- ofTypeWithoutCast(NativeTypes.INT64)
- ),
-
Arguments.of(
NumericPair.INT_DECIMAL_1_0,
ofTypeWithoutCast(NativeTypes.INT32),
@@ -2944,48 +2851,12 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.INT32)
),
- Arguments.of(
- NumericPair.INT_DECIMAL_2_1,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
- Arguments.of(
- NumericPair.INT_DECIMAL_3_1,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
- Arguments.of(
- NumericPair.INT_DECIMAL_4_3,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
Arguments.of(
NumericPair.INT_DECIMAL_5_0,
ofTypeWithoutCast(NativeTypes.INT32),
ofTypeWithoutCast(NativeTypes.INT32)
),
- Arguments.of(
- NumericPair.INT_DECIMAL_5_3,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
- Arguments.of(
- NumericPair.INT_DECIMAL_6_1,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
- Arguments.of(
- NumericPair.INT_DECIMAL_8_3,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
// BIGINT
Arguments.of(
@@ -3018,48 +2889,12 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.INT64)
),
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_2_1,
- castTo(Types.DECIMAL_20_1),
- ofTypeWithoutCast(Types.DECIMAL_20_1)
- ),
-
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_3_1,
- castTo(Types.DECIMAL_20_1),
- ofTypeWithoutCast(Types.DECIMAL_20_1)
- ),
-
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_4_3,
- castTo(Types.DECIMAL_22_3),
- ofTypeWithoutCast(Types.DECIMAL_22_3)
- ),
-
Arguments.of(
NumericPair.BIGINT_DECIMAL_5_0,
ofTypeWithoutCast(NativeTypes.INT64),
ofTypeWithoutCast(NativeTypes.INT64)
),
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_5_3,
- castTo(Types.DECIMAL_22_3),
- ofTypeWithoutCast(Types.DECIMAL_22_3)
- ),
-
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_6_1,
- castTo(Types.DECIMAL_20_1),
- ofTypeWithoutCast(Types.DECIMAL_20_1)
- ),
-
- Arguments.of(
- NumericPair.BIGINT_DECIMAL_8_3,
- castTo(Types.DECIMAL_22_3),
- ofTypeWithoutCast(Types.DECIMAL_22_3)
- ),
-
// REAL
Arguments.of(
@@ -3098,56 +2933,8 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
Arguments.of(
NumericPair.DECIMAL_1_0_DECIMAL_1_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_2_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_2_1,
- castTo(Types.DECIMAL_2_1),
- ofTypeWithoutCast(Types.DECIMAL_2_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_3_1,
- castTo(Types.DECIMAL_3_1),
- ofTypeWithoutCast(Types.DECIMAL_3_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_4_3,
- castTo(Types.DECIMAL_4_3),
- ofTypeWithoutCast(Types.DECIMAL_4_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_5_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_5_3,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_1_0_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
+ ofTypeWithoutCast(Types.DECIMAL_1_0),
+ ofTypeWithoutCast(Types.DECIMAL_1_0)
),
// DECIMAL (2, 0)
@@ -3166,38 +2953,8 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
Arguments.of(
NumericPair.DECIMAL_2_0_DECIMAL_2_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_0_DECIMAL_3_1,
- castTo(Types.DECIMAL_3_1),
- ofTypeWithoutCast(Types.DECIMAL_3_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_0_DECIMAL_5_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_0_DECIMAL_5_3,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_0_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_0_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
+ ofTypeWithoutCast(Types.DECIMAL_2_0),
+ ofTypeWithoutCast(Types.DECIMAL_2_0)
),
// DECIMAL (2,1)
@@ -3214,54 +2971,12 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_2_0,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
Arguments.of(
NumericPair.DECIMAL_2_1_DECIMAL_2_1,
ofTypeWithoutCast(Types.DECIMAL_2_1),
ofTypeWithoutCast(Types.DECIMAL_2_1)
),
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_3_1,
- castTo(Types.DECIMAL_3_1),
- ofTypeWithoutCast(Types.DECIMAL_3_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_4_3,
- castTo(Types.DECIMAL_4_3),
- ofTypeWithoutCast(Types.DECIMAL_4_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_5_0,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_5_3,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_2_1_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
// DECIMAL (3,1)
Arguments.of(
@@ -3282,30 +2997,6 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(Types.DECIMAL_3_1)
),
- Arguments.of(
- NumericPair.DECIMAL_3_1_DECIMAL_5_0,
- castTo(Types.DECIMAL_11_1),
- ofTypeWithoutCast(Types.DECIMAL_11_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_3_1_DECIMAL_5_3,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_3_1_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_3_1_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
// DECIMAL (4,3)
Arguments.of(
@@ -3320,48 +3011,12 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_2_0,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_3_1,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
Arguments.of(
NumericPair.DECIMAL_4_3_DECIMAL_4_3,
ofTypeWithoutCast(Types.DECIMAL_4_3),
ofTypeWithoutCast(Types.DECIMAL_4_3)
),
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_5_0,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_5_3,
- castTo(Types.DECIMAL_5_3),
- ofTypeWithoutCast(Types.DECIMAL_5_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_6_1,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_4_3_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
// DECIMAL (5,0)
Arguments.of(
@@ -3378,20 +3033,8 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
Arguments.of(
NumericPair.DECIMAL_5_0_DECIMAL_5_0,
- castTo(Types.DECIMAL_10_0),
- ofTypeWithoutCast(Types.DECIMAL_10_0)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_5_0_DECIMAL_6_1,
- castTo(Types.DECIMAL_6_1),
- ofTypeWithoutCast(Types.DECIMAL_6_1)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_5_0_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
+ ofTypeWithoutCast(Types.DECIMAL_5_0),
+ ofTypeWithoutCast(Types.DECIMAL_5_0)
),
// DECIMAL (5,3)
@@ -3408,30 +3051,12 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(NativeTypes.DOUBLE)
),
- Arguments.of(
- NumericPair.DECIMAL_5_3_DECIMAL_5_0,
- castTo(Types.DECIMAL_13_3),
- ofTypeWithoutCast(Types.DECIMAL_13_3)
- ),
-
Arguments.of(
NumericPair.DECIMAL_5_3_DECIMAL_5_3,
ofTypeWithoutCast(Types.DECIMAL_5_3),
ofTypeWithoutCast(Types.DECIMAL_5_3)
),
- Arguments.of(
- NumericPair.DECIMAL_5_3_DECIMAL_6_1,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
- Arguments.of(
- NumericPair.DECIMAL_5_3_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
// DECIMAL (6,1)
Arguments.of(
@@ -3452,12 +3077,6 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
ofTypeWithoutCast(Types.DECIMAL_6_1)
),
- Arguments.of(
- NumericPair.DECIMAL_6_1_DECIMAL_8_3,
- castTo(Types.DECIMAL_8_3),
- ofTypeWithoutCast(Types.DECIMAL_8_3)
- ),
-
// DECIMAL (8,3)
Arguments.of(
@@ -3479,4 +3098,112 @@ public class NumericInTypeCoercionTest extends BaseTypeCoercionTest {
)
);
}
+
+ private static Stream<Arguments> inOperandsLiteralsOutOfRange() {
+ return Stream.of(
+ // TINYINT
+
+ NumericPair.TINYINT_SMALLINT,
+ NumericPair.TINYINT_INT,
+ NumericPair.TINYINT_BIGINT,
+ NumericPair.TINYINT_DECIMAL_2_1,
+ NumericPair.TINYINT_DECIMAL_3_1,
+ NumericPair.TINYINT_DECIMAL_4_3,
+ NumericPair.TINYINT_DECIMAL_5_0,
+ NumericPair.TINYINT_DECIMAL_5_3,
+ NumericPair.TINYINT_DECIMAL_6_1,
+ NumericPair.TINYINT_DECIMAL_8_3,
+
+ // SMALLINT
+
+ NumericPair.SMALLINT_INT,
+ NumericPair.SMALLINT_BIGINT,
+ NumericPair.SMALLINT_DECIMAL_2_1,
+ NumericPair.SMALLINT_DECIMAL_3_1,
+ NumericPair.SMALLINT_DECIMAL_4_3,
+ NumericPair.SMALLINT_DECIMAL_5_0,
+ NumericPair.SMALLINT_DECIMAL_5_3,
+ NumericPair.SMALLINT_DECIMAL_6_1,
+ NumericPair.SMALLINT_DECIMAL_8_3,
+
+ // INT
+
+ NumericPair.INT_BIGINT,
+ NumericPair.INT_DECIMAL_2_1,
+ NumericPair.INT_DECIMAL_3_1,
+ NumericPair.INT_DECIMAL_4_3,
+ NumericPair.INT_DECIMAL_5_3,
+ NumericPair.INT_DECIMAL_6_1,
+ NumericPair.INT_DECIMAL_8_3,
+
+ // BIGINT
+
+ NumericPair.BIGINT_DECIMAL_2_1,
+ NumericPair.BIGINT_DECIMAL_3_1,
+ NumericPair.BIGINT_DECIMAL_4_3,
+ NumericPair.BIGINT_DECIMAL_5_3,
+ NumericPair.BIGINT_DECIMAL_6_1,
+ NumericPair.BIGINT_DECIMAL_8_3,
+
+ // DECIMAL (1, 0)
+
+ NumericPair.DECIMAL_1_0_DECIMAL_2_0,
+ NumericPair.DECIMAL_1_0_DECIMAL_2_1,
+ NumericPair.DECIMAL_1_0_DECIMAL_3_1,
+ NumericPair.DECIMAL_1_0_DECIMAL_4_3,
+ NumericPair.DECIMAL_1_0_DECIMAL_5_0,
+ NumericPair.DECIMAL_1_0_DECIMAL_5_3,
+ NumericPair.DECIMAL_1_0_DECIMAL_6_1,
+ NumericPair.DECIMAL_1_0_DECIMAL_8_3,
+
+ // DECIMAL (2, 0)
+
+ NumericPair.DECIMAL_2_0_DECIMAL_3_1,
+ NumericPair.DECIMAL_2_0_DECIMAL_5_0,
+ NumericPair.DECIMAL_2_0_DECIMAL_5_3,
+ NumericPair.DECIMAL_2_0_DECIMAL_6_1,
+ NumericPair.DECIMAL_2_0_DECIMAL_8_3,
+
+ // DECIMAL (2,1)
+
+ NumericPair.DECIMAL_2_1_DECIMAL_2_0,
+ NumericPair.DECIMAL_2_1_DECIMAL_3_1,
+ NumericPair.DECIMAL_2_1_DECIMAL_4_3,
+ NumericPair.DECIMAL_2_1_DECIMAL_5_0,
+ NumericPair.DECIMAL_2_1_DECIMAL_5_3,
+ NumericPair.DECIMAL_2_1_DECIMAL_6_1,
+ NumericPair.DECIMAL_2_1_DECIMAL_8_3,
+
+ // DECIMAL (3,1)
+
+ NumericPair.DECIMAL_3_1_DECIMAL_5_0,
+ NumericPair.DECIMAL_3_1_DECIMAL_5_3,
+ NumericPair.DECIMAL_3_1_DECIMAL_6_1,
+ NumericPair.DECIMAL_3_1_DECIMAL_8_3,
+
+ // DECIMAL (4,3)
+
+ NumericPair.DECIMAL_4_3_DECIMAL_2_0,
+ NumericPair.DECIMAL_4_3_DECIMAL_3_1,
+ NumericPair.DECIMAL_4_3_DECIMAL_5_0,
+ NumericPair.DECIMAL_4_3_DECIMAL_5_3,
+ NumericPair.DECIMAL_4_3_DECIMAL_6_1,
+ NumericPair.DECIMAL_4_3_DECIMAL_8_3,
+
+ // DECIMAL (5,0)
+
+ NumericPair.DECIMAL_5_0_DECIMAL_6_1,
+ NumericPair.DECIMAL_5_0_DECIMAL_8_3,
+
+ // DECIMAL (5,3)
+
+ NumericPair.DECIMAL_5_3_DECIMAL_5_0,
+ NumericPair.DECIMAL_5_3_DECIMAL_6_1,
+ NumericPair.DECIMAL_5_3_DECIMAL_8_3,
+
+ // DECIMAL (6,1)
+
+ NumericPair.DECIMAL_6_1_DECIMAL_8_3
+ ).map(Arguments::of);
+ }
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/TypeUtilsTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/TypeUtilsTest.java
index 5bb206dcabe..9e4aa5d9567 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/TypeUtilsTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/TypeUtilsTest.java
@@ -19,6 +19,10 @@ package org.apache.ignite.internal.sql.engine.util;
import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import static org.apache.ignite.internal.sql.engine.util.SqlTestUtils.assertThrowsSqlException;
+import static org.apache.ignite.internal.sql.engine.util.TypeUtils.lowerBoundFor;
+import static org.apache.ignite.internal.sql.engine.util.TypeUtils.upperBoundFor;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -529,6 +533,78 @@ public class TypeUtilsTest extends BaseIgniteAbstractTest {
return testCaseList.stream().map(RelToExecTestCase::toTest);
}
+ @Test
+ void testLowerBound() {
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.TINYINT)),
+ is(new BigDecimal("-128"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.SMALLINT)),
+ is(new BigDecimal("-32768"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.INTEGER)),
+ is(new BigDecimal("-2147483648"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.BIGINT)),
+ is(new BigDecimal("-9223372036854775808"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.REAL)),
+ is(new BigDecimal("-3.4028234663852886E+38"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DOUBLE)),
+ is(new BigDecimal("-1.7976931348623157E+308"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DECIMAL, 2)),
+ is(new BigDecimal("-99"))
+ );
+ assertThat(
+ lowerBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DECIMAL, 3, 2)),
+ is(new BigDecimal("-9.99"))
+ );
+ }
+
+ @Test
+ void testUpperBound() {
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.TINYINT)),
+ is(new BigDecimal("127"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.SMALLINT)),
+ is(new BigDecimal("32767"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.INTEGER)),
+ is(new BigDecimal("2147483647"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.BIGINT)),
+ is(new BigDecimal("9223372036854775807"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.REAL)),
+ is(new BigDecimal("3.4028234663852886E+38"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DOUBLE)),
+ is(new BigDecimal("1.7976931348623157E+308"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DECIMAL, 2)),
+ is(new BigDecimal("99"))
+ );
+ assertThat(
+ upperBoundFor(TYPE_FACTORY.createSqlType(SqlTypeName.DECIMAL, 3, 2)),
+ is(new BigDecimal("9.99"))
+ );
+ }
+
private static final class TestCustomType extends IgniteCustomType {
private TestCustomType(String typeName) {
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q10.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q10.plan
index fc2b3a85571..f4d643c8a3e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q10.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q10.plan
@@ -103,7 +103,7 @@ Sort
est: (rows=959175)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -137,7 +137,7 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -171,6 +171,6 @@ Sort
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q10_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q10_colocated.plan
index fc2b3a85571..f4d643c8a3e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q10_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q10_colocated.plan
@@ -103,7 +103,7 @@ Sort
est: (rows=959175)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -137,7 +137,7 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -171,6 +171,6 @@ Sort
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
+ predicate: AND(=(D_YEAR, 2000), SEARCH(D_MOY, Sarg[[3..6]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q11.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q11.plan
index a1e92128435..8afce0dce08 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q11.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q11.plan
@@ -4,12 +4,12 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
- est: (rows=10684795401006782000)
+ est: (rows=5342397700503391200)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), 0:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), 0:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0.00), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0)), >(0, /(YEAR_TOTAL, YEAR_TOTAL$0$0))), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), 0), false)), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
type: inner
- est: (rows=10684795401006782000)
+ est: (rows=5342397700503391200)
Sort
collation: [CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC, CUSTOMER_LAST_NAME ASC, CUSTOMER_BIRTH_COUNTRY ASC]
est: (rows=798253)
@@ -48,7 +48,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -58,14 +58,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
@@ -76,17 +72,10 @@ Limit
est: (rows=99683)
UnionAll
est: (rows=99683)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -189,27 +178,16 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
UnionAll
est: (rows=199365)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -243,7 +221,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q11_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q11_colocated.plan
index a1e92128435..8afce0dce08 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q11_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q11_colocated.plan
@@ -4,12 +4,12 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
- est: (rows=10684795401006782000)
+ est: (rows=5342397700503391200)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), 0:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), 0:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0.00), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0)), >(0, /(YEAR_TOTAL, YEAR_TOTAL$0$0))), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), 0), false)), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
type: inner
- est: (rows=10684795401006782000)
+ est: (rows=5342397700503391200)
Sort
collation: [CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC, CUSTOMER_LAST_NAME ASC, CUSTOMER_BIRTH_COUNTRY ASC]
est: (rows=798253)
@@ -48,7 +48,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -58,14 +58,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
@@ -76,17 +72,10 @@ Limit
est: (rows=99683)
UnionAll
est: (rows=99683)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -189,27 +178,16 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
UnionAll
est: (rows=199365)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -243,7 +221,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan
index 5624010e344..ab904e3f696 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan
@@ -35,7 +35,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1998-01-06), <=(D_DATE, +(1998-01-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1998-01-06..1998-02-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan
index 5624010e344..ab904e3f696 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan
@@ -35,7 +35,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1998-01-06), <=(D_DATE, +(1998-01-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1998-01-06..1998-02-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q15.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q15.plan
index bb3b06464f0..b3ef27d27b1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q15.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q15.plan
@@ -12,7 +12,7 @@ Sort
projection: [CA_ZIP, CS_SALES_PRICE]
est: (rows=111896)
HashJoin
- predicate: AND(=(CS_BILL_CUSTOMER_SK, C_CUSTOMER_SK), OR(=(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85669'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86197'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'88274'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'83405'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86475'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85392'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85460'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'80348'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'81792'), SEARCH(CA_STATE, Sarg[_UTF-8'CA':VARCHAR(2) CHARACTER SET "UTF-8" [...]
+ predicate: AND(=(CS_BILL_CUSTOMER_SK, C_CUSTOMER_SK), OR(=(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85669'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86197'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'88274'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'83405'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86475'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85392'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85460'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'80348'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'81792'), SEARCH(CA_STATE, Sarg[_UTF-8'CA':VARCHAR(2) CHARACTER SET "UTF-8" [...]
type: inner
est: (rows=111896)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q15_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q15_colocated.plan
index bb3b06464f0..b3ef27d27b1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q15_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q15_colocated.plan
@@ -12,7 +12,7 @@ Sort
projection: [CA_ZIP, CS_SALES_PRICE]
est: (rows=111896)
HashJoin
- predicate: AND(=(CS_BILL_CUSTOMER_SK, C_CUSTOMER_SK), OR(=(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85669'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86197'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'88274'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'83405'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86475'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85392'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85460'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'80348'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'81792'), SEARCH(CA_STATE, Sarg[_UTF-8'CA':VARCHAR(2) CHARACTER SET "UTF-8" [...]
+ predicate: AND(=(CS_BILL_CUSTOMER_SK, C_CUSTOMER_SK), OR(=(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85669'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86197'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'88274'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'83405'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'86475'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85392'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'85460'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'80348'), =(SUBSTR(CA_ZIP, 1, 5), _UTF-8'81792'), SEARCH(CA_STATE, Sarg[_UTF-8'CA':VARCHAR(2) CHARACTER SET "UTF-8" [...]
type: inner
est: (rows=111896)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan
index 6e983c007bc..c572634ac21 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan
@@ -66,7 +66,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-04-01..1999-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan
index 6e983c007bc..c572634ac21 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan
@@ -66,7 +66,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-04-01..1999-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q2.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q2.plan
index cc42ac60c3e..427680a7b34 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q2.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q2.plan
@@ -79,7 +79,7 @@ Project
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1998, 1))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_WEEK_SEQ, D_YEAR]
est: (rows=24325)
ColocatedHashAggregate
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan
index 8afbf64ca4d..36b23d0a259 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan
@@ -35,7 +35,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-14), <=(D_DATE, +(2001-03-14, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-14..2001-04-13]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan
index 8afbf64ca4d..36b23d0a259 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan
@@ -35,7 +35,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-14), <=(D_DATE, +(2001-03-14, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-14..2001-04-13]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan
index 1d058b7557c..5c44637f3ac 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan
@@ -3,7 +3,7 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: AND(>=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(2.0:DECIMAL(2, 1), 3.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL), <=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(3.0:DECIMAL(2, 1), 2.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL))
+ predicate: SEARCH(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), Sarg[[0.666666:DECIMAL(25, 6)..1.500000:DECIMAL(25, 6)]]:DECIMAL(25, 6))
est: (rows=66066)
ColocatedHashAggregate
fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, INV_BEFORE, INV_AFTER]
@@ -38,7 +38,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, -(1999-03-20, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(1999-03-20, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-02-18..1999-04-19]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan
index 1d058b7557c..5c44637f3ac 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan
@@ -3,7 +3,7 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: AND(>=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(2.0:DECIMAL(2, 1), 3.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL), <=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(3.0:DECIMAL(2, 1), 2.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL))
+ predicate: SEARCH(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), Sarg[[0.666666:DECIMAL(25, 6)..1.500000:DECIMAL(25, 6)]]:DECIMAL(25, 6))
est: (rows=66066)
ColocatedHashAggregate
fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, INV_BEFORE, INV_AFTER]
@@ -38,7 +38,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, -(1999-03-20, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(1999-03-20, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-02-18..1999-04-19]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q22.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q22.plan
index 00cd332a0e3..42f1c63deba 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q22.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q22.plan
@@ -32,7 +32,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q22_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q22_colocated.plan
index 00cd332a0e3..42f1c63deba 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q22_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q22_colocated.plan
@@ -32,7 +32,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q28.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q28.plan
index ef002b09f65..49878976cd9 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q28.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q28.plan
@@ -35,7 +35,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[6..10]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 152.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(152, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 2196.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(2196, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 56.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(56, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[6..10]]), OR(AND(>=(SS_LIST_PRICE, 152.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 162.00)), AND(>=(SS_COUPON_AMT, 2196.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3196.00)), AND(>=(SS_WHOLESALE_COST, 56.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 76.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -48,7 +48,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[11..15]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 53.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(53, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3430.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3430, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 13.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(13, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[11..15]]), OR(AND(>=(SS_LIST_PRICE, 53.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 63.00)), AND(>=(SS_COUPON_AMT, 3430.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4430.00)), AND(>=(SS_WHOLESALE_COST, 13.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 33.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -61,7 +61,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[16..20]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 182.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(182, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3262.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3262, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 20.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(20, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[16..20]]), OR(AND(>=(SS_LIST_PRICE, 182.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 192.00)), AND(>=(SS_COUPON_AMT, 3262.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4262.00)), AND(>=(SS_WHOLESALE_COST, 20.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 40.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -74,7 +74,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[26..30]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 180.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(180, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 12592.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(12592, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 22.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(22, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[26..30]]), OR(AND(>=(SS_LIST_PRICE, 180.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 190.00)), AND(>=(SS_COUPON_AMT, 12592.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 13592.00)), AND(>=(SS_WHOLESALE_COST, 22.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 42.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -87,7 +87,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[0..5]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 73.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(73, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 7826.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(7826, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 70.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(70, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[0..5]]), OR(AND(>=(SS_LIST_PRICE, 73.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 83.00)), AND(>=(SS_COUPON_AMT, 7826.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 8826.00)), AND(>=(SS_WHOLESALE_COST, 70.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 90.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -100,6 +100,6 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[21..25]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 85.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(85, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3310.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3310, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 37.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(37, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[21..25]]), OR(AND(>=(SS_LIST_PRICE, 85.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 95.00)), AND(>=(SS_COUPON_AMT, 3310.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4310.00)), AND(>=(SS_WHOLESALE_COST, 37.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 57.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q28_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q28_colocated.plan
index ef002b09f65..49878976cd9 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q28_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q28_colocated.plan
@@ -35,7 +35,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[6..10]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 152.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(152, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 2196.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(2196, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 56.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(56, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[6..10]]), OR(AND(>=(SS_LIST_PRICE, 152.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 162.00)), AND(>=(SS_COUPON_AMT, 2196.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3196.00)), AND(>=(SS_WHOLESALE_COST, 56.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 76.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -48,7 +48,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[11..15]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 53.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(53, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3430.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3430, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 13.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(13, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[11..15]]), OR(AND(>=(SS_LIST_PRICE, 53.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 63.00)), AND(>=(SS_COUPON_AMT, 3430.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4430.00)), AND(>=(SS_WHOLESALE_COST, 13.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 33.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -61,7 +61,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[16..20]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 182.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(182, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3262.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3262, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 20.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(20, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[16..20]]), OR(AND(>=(SS_LIST_PRICE, 182.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 192.00)), AND(>=(SS_COUPON_AMT, 3262.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4262.00)), AND(>=(SS_WHOLESALE_COST, 20.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 40.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -74,7 +74,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[26..30]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 180.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(180, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 12592.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(12592, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 22.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(22, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[26..30]]), OR(AND(>=(SS_LIST_PRICE, 180.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 190.00)), AND(>=(SS_COUPON_AMT, 12592.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 13592.00)), AND(>=(SS_WHOLESALE_COST, 22.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 42.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -87,7 +87,7 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[0..5]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 73.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(73, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 7826.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(7826, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 70.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(70, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[0..5]]), OR(AND(>=(SS_LIST_PRICE, 73.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 83.00)), AND(>=(SS_COUPON_AMT, 7826.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 8826.00)), AND(>=(SS_WHOLESALE_COST, 70.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 90.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
ColocatedHashAggregate
@@ -100,6 +100,6 @@ Limit
est: (rows=180025)
TableScan
table: PUBLIC.STORE_SALES
- predicate: AND(SEARCH(SS_QUANTITY, Sarg[[21..25]]), OR(AND(>=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 85.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), CAST(+(85, 10)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 3310.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), CAST(+(3310, 1000)):DECIMAL(12, 2) NOT NULL)), AND(>=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 37.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), CAST(+(37, 20)):DECIMAL(12, 2) NOT NULL))))
+ predicate: AND(SEARCH(SS_QUANTITY, Sarg[[21..25]]), OR(AND(>=(SS_LIST_PRICE, 85.00), <=(CAST(SS_LIST_PRICE):DECIMAL(12, 2), 95.00)), AND(>=(SS_COUPON_AMT, 3310.00), <=(CAST(SS_COUPON_AMT):DECIMAL(12, 2), 4310.00)), AND(>=(SS_WHOLESALE_COST, 37.00), <=(CAST(SS_WHOLESALE_COST):DECIMAL(12, 2), 57.00))))
fieldNames: [SS_LIST_PRICE]
est: (rows=180025)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q2_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q2_colocated.plan
index cc42ac60c3e..427680a7b34 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q2_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q2_colocated.plan
@@ -79,7 +79,7 @@ Project
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1998, 1))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_WEEK_SEQ, D_YEAR]
est: (rows=24325)
ColocatedHashAggregate
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q31.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q31.plan
index ef207a4f6a9..e69f365a348 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q31.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q31.plan
@@ -1,12 +1,12 @@
Project
fieldNames: [CA_COUNTY, D_YEAR, WEB_Q1_Q2_INCREASE, STORE_Q1_Q2_INCREASE, WEB_Q2_Q3_INCREASE, STORE_Q2_Q3_INCREASE]
projection: [CA_COUNTY, D_YEAR, /(WEB_SALES, WEB_SALES$0), /(STORE_SALES$0, STORE_SALES), /(WEB_SALES$0$0, WEB_SALES), /(STORE_SALES$0$0, STORE_SALES$0)]
- est: (rows=4241198284884408000000000)
+ est: (rows=1060299571221102000000000)
HashJoin
- predicate: AND(>(CASE(>(WEB_SALES$0, 0.00), /(WEB_SALES, WEB_SALES$0), null:DECIMAL(32767, 0)), CASE(>(STORE_SALES, 0.00), /(STORE_SALES$0, STORE_SALES), null:DECIMAL(32767, 0))), =(CA_COUNTY, CA_COUNTY$0$0$0))
+ predicate: AND(CASE(>(STORE_SALES, 0.00), CASE(>(WEB_SALES$0, 0.00), >(/(WEB_SALES, WEB_SALES$0), /(STORE_SALES$0, STORE_SALES)), false), false), =(CA_COUNTY, CA_COUNTY$0$0$0))
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0, CA_COUNTY$0$0, D_QOY$0$0, D_YEAR$0$0, STORE_SALES$0$0, CA_COUNTY$1, D_QOY$1, D_YEAR$1, WEB_SALES, CA_COUNTY$0$0$0, D_QOY$0$0$0, D_YEAR$0$0$0, WEB_SALES$0, CA_COUNTY$0$0$0$0, D_QOY$0$0$0$0, D_YEAR$0$0$0$0, WEB_SALES$0$0]
type: inner
- est: (rows=4241198284884408000000000)
+ est: (rows=1060299571221102000000000)
Sort
collation: [D_YEAR ASC]
est: (rows=155870)
@@ -50,10 +50,10 @@ Project
fieldNames: [CA_ADDRESS_SK, CA_COUNTY]
est: (rows=50000)
HashJoin
- predicate: AND(>(CASE(>(WEB_SALES, 0.00), /(WEB_SALES$0$0, WEB_SALES), null:DECIMAL(32767, 0)), CASE(>(STORE_SALES, 0.00), /(STORE_SALES$0, STORE_SALES), null:DECIMAL(32767, 0))), =(CA_COUNTY$0$0, CA_COUNTY))
+ predicate: AND(CASE(>(STORE_SALES, 0.00), CASE(>(WEB_SALES, 0.00), >(/(WEB_SALES$0$0, WEB_SALES), /(STORE_SALES$0, STORE_SALES)), false), false), =(CA_COUNTY$0$0, CA_COUNTY))
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0, CA_COUNTY$1, D_QOY$1, D_YEAR$1, WEB_SALES, CA_COUNTY$0$0, D_QOY$0$0, D_YEAR$0$0, WEB_SALES$0, CA_COUNTY$0$0$0, D_QOY$0$0$0, D_YEAR$0$0$0, WEB_SALES$0$0]
type: inner
- est: (rows=362798614079465400000)
+ est: (rows=181399307039732700000)
HashJoin
predicate: =(CA_COUNTY, CA_COUNTY$0)
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q31_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q31_colocated.plan
index ef207a4f6a9..e69f365a348 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q31_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q31_colocated.plan
@@ -1,12 +1,12 @@
Project
fieldNames: [CA_COUNTY, D_YEAR, WEB_Q1_Q2_INCREASE, STORE_Q1_Q2_INCREASE, WEB_Q2_Q3_INCREASE, STORE_Q2_Q3_INCREASE]
projection: [CA_COUNTY, D_YEAR, /(WEB_SALES, WEB_SALES$0), /(STORE_SALES$0, STORE_SALES), /(WEB_SALES$0$0, WEB_SALES), /(STORE_SALES$0$0, STORE_SALES$0)]
- est: (rows=4241198284884408000000000)
+ est: (rows=1060299571221102000000000)
HashJoin
- predicate: AND(>(CASE(>(WEB_SALES$0, 0.00), /(WEB_SALES, WEB_SALES$0), null:DECIMAL(32767, 0)), CASE(>(STORE_SALES, 0.00), /(STORE_SALES$0, STORE_SALES), null:DECIMAL(32767, 0))), =(CA_COUNTY, CA_COUNTY$0$0$0))
+ predicate: AND(CASE(>(STORE_SALES, 0.00), CASE(>(WEB_SALES$0, 0.00), >(/(WEB_SALES, WEB_SALES$0), /(STORE_SALES$0, STORE_SALES)), false), false), =(CA_COUNTY, CA_COUNTY$0$0$0))
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0, CA_COUNTY$0$0, D_QOY$0$0, D_YEAR$0$0, STORE_SALES$0$0, CA_COUNTY$1, D_QOY$1, D_YEAR$1, WEB_SALES, CA_COUNTY$0$0$0, D_QOY$0$0$0, D_YEAR$0$0$0, WEB_SALES$0, CA_COUNTY$0$0$0$0, D_QOY$0$0$0$0, D_YEAR$0$0$0$0, WEB_SALES$0$0]
type: inner
- est: (rows=4241198284884408000000000)
+ est: (rows=1060299571221102000000000)
Sort
collation: [D_YEAR ASC]
est: (rows=155870)
@@ -50,10 +50,10 @@ Project
fieldNames: [CA_ADDRESS_SK, CA_COUNTY]
est: (rows=50000)
HashJoin
- predicate: AND(>(CASE(>(WEB_SALES, 0.00), /(WEB_SALES$0$0, WEB_SALES), null:DECIMAL(32767, 0)), CASE(>(STORE_SALES, 0.00), /(STORE_SALES$0, STORE_SALES), null:DECIMAL(32767, 0))), =(CA_COUNTY$0$0, CA_COUNTY))
+ predicate: AND(CASE(>(STORE_SALES, 0.00), CASE(>(WEB_SALES, 0.00), >(/(WEB_SALES$0$0, WEB_SALES), /(STORE_SALES$0, STORE_SALES)), false), false), =(CA_COUNTY$0$0, CA_COUNTY))
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0, CA_COUNTY$1, D_QOY$1, D_YEAR$1, WEB_SALES, CA_COUNTY$0$0, D_QOY$0$0, D_YEAR$0$0, WEB_SALES$0, CA_COUNTY$0$0$0, D_QOY$0$0$0, D_YEAR$0$0$0, WEB_SALES$0$0]
type: inner
- est: (rows=362798614079465400000)
+ est: (rows=181399307039732700000)
HashJoin
predicate: =(CA_COUNTY, CA_COUNTY$0)
fieldNames: [CA_COUNTY, D_QOY, D_YEAR, STORE_SALES, CA_COUNTY$0, D_QOY$0, D_YEAR$0, STORE_SALES$0]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan
index a486ee46890..81a20332692 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan
@@ -42,7 +42,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-03-29..2002-06-27]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -98,6 +98,6 @@ Limit
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-03-29..2002-06-27]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan
index a486ee46890..81a20332692 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan
@@ -42,7 +42,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-03-29..2002-06-27]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -98,6 +98,6 @@ Limit
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-03-29..2002-06-27]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q33.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q33.plan
index 98e39f21f5d..49193dacf76 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q33.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q33.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedSortAggregate
@@ -167,7 +167,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -247,6 +247,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q33_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q33_colocated.plan
index 98e39f21f5d..49193dacf76 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q33_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q33_colocated.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedSortAggregate
@@ -167,7 +167,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -247,6 +247,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan
index 572758e5041..453b72f8be1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan
@@ -1,14 +1,14 @@
Sort
collation: [C_LAST_NAME ASC, C_FIRST_NAME ASC, C_SALUTATION ASC, C_PREFERRED_CUST_FLAG DESC, SS_TICKET_NUMBER ASC]
- est: (rows=7007)
+ est: (rows=3503)
Project
fieldNames: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
projection: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
- est: (rows=7007)
+ est: (rows=3503)
HashJoin
predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=7007)
+ est: (rows=3503)
Exchange
distribution: single
est: (rows=100000)
@@ -18,28 +18,28 @@ Sort
est: (rows=100000)
Filter
predicate: SEARCH(CNT, Sarg[[15L:BIGINT..20L:BIGINT]]:BIGINT)
- est: (rows=7007)
+ est: (rows=3503)
ColocatedHashAggregate
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK, CNT]
group: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
aggregation: [COUNT()]
- est: (rows=28026)
+ est: (rows=14013)
Project
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
projection: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=409353)
+ est: (rows=204677)
Exchange
distribution: single
est: (rows=2880404)
@@ -49,18 +49,18 @@ Sort
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=1023)
+ est: (rows=512)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'>10000':CHAR(7) CHARACTER SET "UTF-8", _UTF-8'Unknown']:CHAR(7) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), >(CAST(CASE(>(HD_VEHICLE_COUNT, 0), /(HD_DEP_COUNT, HD_VEHICLE_COUNT), null:INTEGER)):DECIMAL(11, 1), 1.2))
+ predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'>10000':CHAR(7) CHARACTER SET "UTF-8", _UTF-8'Unknown']:CHAR(7) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), CASE(>(HD_VEHICLE_COUNT, 0), >(/(HD_DEP_COUNT, HD_VEHICLE_COUNT), 1), false))
fieldNames: [HD_DEMO_SK, HD_BUY_POTENTIAL, HD_DEP_COUNT, HD_VEHICLE_COUNT]
- est: (rows=1023)
+ est: (rows=512)
Exchange
distribution: single
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..3], [25..28]]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..3], [25..28]]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q34_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q34_colocated.plan
index 572758e5041..453b72f8be1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q34_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q34_colocated.plan
@@ -1,14 +1,14 @@
Sort
collation: [C_LAST_NAME ASC, C_FIRST_NAME ASC, C_SALUTATION ASC, C_PREFERRED_CUST_FLAG DESC, SS_TICKET_NUMBER ASC]
- est: (rows=7007)
+ est: (rows=3503)
Project
fieldNames: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
projection: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
- est: (rows=7007)
+ est: (rows=3503)
HashJoin
predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=7007)
+ est: (rows=3503)
Exchange
distribution: single
est: (rows=100000)
@@ -18,28 +18,28 @@ Sort
est: (rows=100000)
Filter
predicate: SEARCH(CNT, Sarg[[15L:BIGINT..20L:BIGINT]]:BIGINT)
- est: (rows=7007)
+ est: (rows=3503)
ColocatedHashAggregate
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK, CNT]
group: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
aggregation: [COUNT()]
- est: (rows=28026)
+ est: (rows=14013)
Project
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
projection: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=409353)
+ est: (rows=204677)
Exchange
distribution: single
est: (rows=2880404)
@@ -49,18 +49,18 @@ Sort
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=1023)
+ est: (rows=512)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'>10000':CHAR(7) CHARACTER SET "UTF-8", _UTF-8'Unknown']:CHAR(7) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), >(CAST(CASE(>(HD_VEHICLE_COUNT, 0), /(HD_DEP_COUNT, HD_VEHICLE_COUNT), null:INTEGER)):DECIMAL(11, 1), 1.2))
+ predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'>10000':CHAR(7) CHARACTER SET "UTF-8", _UTF-8'Unknown']:CHAR(7) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), CASE(>(HD_VEHICLE_COUNT, 0), >(/(HD_DEP_COUNT, HD_VEHICLE_COUNT), 1), false))
fieldNames: [HD_DEMO_SK, HD_BUY_POTENTIAL, HD_DEP_COUNT, HD_VEHICLE_COUNT]
- est: (rows=1023)
+ est: (rows=512)
Exchange
distribution: single
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..3], [25..28]]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..3], [25..28]]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan
index 5e5994fc64c..c578bc4a260 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan
@@ -42,7 +42,7 @@ Sort
est: (rows=4173)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(39, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
+ predicate: AND(>=(I_CURRENT_PRICE, 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 69.00), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
est: (rows=4173)
Exchange
@@ -50,6 +50,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-01-16), <=(D_DATE, +(2001-01-16, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-01-16..2001-03-17]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan
index 5e5994fc64c..c578bc4a260 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan
@@ -42,7 +42,7 @@ Sort
est: (rows=4173)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(39, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
+ predicate: AND(>=(I_CURRENT_PRICE, 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 69.00), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
est: (rows=4173)
Exchange
@@ -50,6 +50,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-01-16), <=(D_DATE, +(2001-01-16, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-01-16..2001-03-17]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q38.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q38.plan
index 61ee9bf308a..9fc3c64620b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q38.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q38.plan
@@ -37,7 +37,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -75,7 +75,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -113,7 +113,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q38_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q38_colocated.plan
index 61ee9bf308a..9fc3c64620b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q38_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q38_colocated.plan
@@ -37,7 +37,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -75,7 +75,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -113,7 +113,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q4.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q4.plan
index 14bc4686601..93a044d6253 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q4.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q4.plan
@@ -4,12 +4,12 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
- est: (rows=9592561442814741000000000000)
+ est: (rows=2398140360703685200000000000)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0E-13), /(YEAR_TOTAL$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0$0$0, 0E-13), /(YEAR_TOTAL, YEAR_TOTAL$0$0$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0$0$0, 0E-13), CASE(>(YEAR_TOTAL$0, 0E-13), >(/(YEAR_TOTAL$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0$0$0)), false), false), =(CUSTOMER_ID, CUSTOMER_ID$0$0$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0, CUSTOMER_ID$0$0$0$0, DYEAR$0$0$0$0, YEAR_TOTAL$0$0$0$0, SALE_TYPE$0$0$0$0, CUSTOMER_ID$0$0$0$0$0, DYEAR$0$0$0$0$0, YEAR_TOTAL$0$0$0$0$0, SALE_TYPE$0$0$0$0$0]
type: inner
- est: (rows=9592561442814741000000000000)
+ est: (rows=2398140360703685200000000000)
Sort
collation: [CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC, CUSTOMER_LAST_NAME ASC, CUSTOMER_BIRTH_COUNTRY ASC]
est: (rows=798254)
@@ -48,7 +48,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -58,40 +58,25 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL, 0E-13), /(YEAR_TOTAL$0, YEAR_TOTAL), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0E-13), /(YEAR_TOTAL$0$0$0$0, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID$0$0$0, CUSTOMER_ID))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0E-13), CASE(>(YEAR_TOTAL, 0E-13), >(/(YEAR_TOTAL$0, YEAR_TOTAL), /(YEAR_TOTAL$0$0$0$0, YEAR_TOTAL$0$0)), false), false), =(CUSTOMER_ID$0$0$0, CUSTOMER_ID))
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0, CUSTOMER_ID$0$0$0$0, DYEAR$0$0$0$0, YEAR_TOTAL$0$0$0$0, SALE_TYPE$0$0$0$0]
type: inner
- est: (rows=160225767064505180000000)
+ est: (rows=80112883532252590000000)
UnionAll
est: (rows=199751)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'c']
@@ -138,17 +123,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
@@ -159,14 +137,10 @@ Limit
est: (rows=399501)
UnionAll
est: (rows=399501)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'c']
@@ -200,7 +174,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -210,14 +184,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
@@ -228,28 +198,14 @@ Limit
est: (rows=99684)
UnionAll
est: (rows=99684)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -352,46 +308,24 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
UnionAll
est: (rows=199366)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -425,7 +359,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan
index 83e2ff6306c..efcf5c0ac53 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan
@@ -59,7 +59,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, -(2000-03-18, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(2000-03-18, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-02-17..2000-04-17]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan
index 83e2ff6306c..efcf5c0ac53 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan
@@ -59,7 +59,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, -(2000-03-18, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(2000-03-18, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-02-17..2000-04-17]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan
index 6d764a16b49..1c00faad04e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan
@@ -23,7 +23,7 @@ Sort
est: (rows=4500)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(I_MANUFACT_ID, 970), <=(I_MANUFACT_ID, +(970, 40)))
+ predicate: SEARCH(I_MANUFACT_ID, Sarg[[970..1010]])
fieldNames: [I_MANUFACT, I_PRODUCT_NAME]
est: (rows=4500)
Project
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q41_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q41_colocated.plan
index 6d764a16b49..1c00faad04e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q41_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q41_colocated.plan
@@ -23,7 +23,7 @@ Sort
est: (rows=4500)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(I_MANUFACT_ID, 970), <=(I_MANUFACT_ID, +(970, 40)))
+ predicate: SEARCH(I_MANUFACT_ID, Sarg[[970..1010]])
fieldNames: [I_MANUFACT, I_PRODUCT_NAME]
est: (rows=4500)
Project
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q43.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q43.plan
index ed33797cb10..85b297d8bc3 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q43.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q43.plan
@@ -31,7 +31,7 @@ Sort
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_STORE_ID, S_STORE_NAME, S_GMT_OFFSET]
est: (rows=4)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q43_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q43_colocated.plan
index ed33797cb10..85b297d8bc3 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q43_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q43_colocated.plan
@@ -31,7 +31,7 @@ Sort
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_STORE_ID, S_STORE_NAME, S_GMT_OFFSET]
est: (rows=4)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q46.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q46.plan
index a2e51513d89..a0404460045 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q46.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q46.plan
@@ -77,7 +77,7 @@ Sort
est: (rows=31590)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOW, Sarg[0, 6]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOW, Sarg[0, 6]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOW]
est: (rows=31590)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q46_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q46_colocated.plan
index a2e51513d89..a0404460045 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q46_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q46_colocated.plan
@@ -77,7 +77,7 @@ Sort
est: (rows=31590)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOW, Sarg[0, 6]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOW, Sarg[0, 6]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOW]
est: (rows=31590)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q4_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q4_colocated.plan
index 14bc4686601..93a044d6253 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q4_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q4_colocated.plan
@@ -4,12 +4,12 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY]
- est: (rows=9592561442814741000000000000)
+ est: (rows=2398140360703685200000000000)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0E-13), /(YEAR_TOTAL$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0$0$0, 0E-13), /(YEAR_TOTAL, YEAR_TOTAL$0$0$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0$0$0, 0E-13), CASE(>(YEAR_TOTAL$0, 0E-13), >(/(YEAR_TOTAL$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0$0$0)), false), false), =(CUSTOMER_ID, CUSTOMER_ID$0$0$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0, CUSTOMER_ID$0$0$0$0, DYEAR$0$0$0$0, YEAR_TOTAL$0$0$0$0, SALE_TYPE$0$0$0$0, CUSTOMER_ID$0$0$0$0$0, DYEAR$0$0$0$0$0, YEAR_TOTAL$0$0$0$0$0, SALE_TYPE$0$0$0$0$0]
type: inner
- est: (rows=9592561442814741000000000000)
+ est: (rows=2398140360703685200000000000)
Sort
collation: [CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC, CUSTOMER_LAST_NAME ASC, CUSTOMER_BIRTH_COUNTRY ASC]
est: (rows=798254)
@@ -48,7 +48,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -58,40 +58,25 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_BIRTH_COUNTRY, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL, 0E-13), /(YEAR_TOTAL$0, YEAR_TOTAL), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0E-13), /(YEAR_TOTAL$0$0$0$0, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID$0$0$0, CUSTOMER_ID))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0E-13), CASE(>(YEAR_TOTAL, 0E-13), >(/(YEAR_TOTAL$0, YEAR_TOTAL), /(YEAR_TOTAL$0$0$0$0, YEAR_TOTAL$0$0)), false), false), =(CUSTOMER_ID$0$0$0, CUSTOMER_ID))
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0, CUSTOMER_ID$0$0$0$0, DYEAR$0$0$0$0, YEAR_TOTAL$0$0$0$0, SALE_TYPE$0$0$0$0]
type: inner
- est: (rows=160225767064505180000000)
+ est: (rows=80112883532252590000000)
UnionAll
est: (rows=199751)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'c']
@@ -138,17 +123,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, DYEAR$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
@@ -159,14 +137,10 @@ Limit
est: (rows=399501)
UnionAll
est: (rows=399501)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'c']
@@ -200,7 +174,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -210,14 +184,10 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, DYEAR$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, DYEAR$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
@@ -228,28 +198,14 @@ Limit
est: (rows=99684)
UnionAll
est: (rows=99684)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -352,46 +308,24 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, C_PREFERRED_CUST_FLAG, C_BIRTH_COUNTRY, C_LOGIN, C_EMAIL_ADDRESS]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST($f8):DECIMAL(32767, 13), 0E-13)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
UnionAll
est: (rows=199366)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
- Project
+ Values
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, DYEAR, CAST($f8):DECIMAL(32767, 13), _UTF-8'c']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_PREFERRED_CUST_FLAG, CUSTOMER_BIRTH_COUNTRY, CUSTOMER_LOGIN, CUSTOMER_EMAIL_ADDRESS, DYEAR, $f8]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, DYEAR, YEAR_TOTAL, _UTF-8'w']
@@ -425,7 +359,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
index 7e621461f1f..5a717df6204 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
@@ -56,7 +56,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -113,7 +113,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -190,7 +190,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q51.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q51.plan
index 07bcd5b281b..ab5d475e43f 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q51.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q51.plan
@@ -43,7 +43,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1214), <=(D_MONTH_SEQ, +(1214, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1214..1225]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Project
@@ -75,6 +75,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1214), <=(D_MONTH_SEQ, +(1214, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1214..1225]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q51_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q51_colocated.plan
index 07bcd5b281b..ab5d475e43f 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q51_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q51_colocated.plan
@@ -43,7 +43,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1214), <=(D_MONTH_SEQ, +(1214, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1214..1225]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Project
@@ -75,6 +75,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1214), <=(D_MONTH_SEQ, +(1214, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1214..1225]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q53.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q53.plan
index 14fc3274ad1..99a3d6b5ec4 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q53.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q53.plan
@@ -3,8 +3,8 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: >(CASE(>(CAST(AVG_QUARTERLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_QUARTERLY_SALES)), AVG_QUARTERLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=8101)
+ predicate: CASE(>(CAST(AVG_QUARTERLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_QUARTERLY_SALES)), AVG_QUARTERLY_SALES), 0), false)
+ est: (rows=4051)
Project
fieldNames: [I_MANUFACT_ID, SUM_SALES, AVG_QUARTERLY_SALES]
projection: [I_MANUFACT_ID, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID))):DECIMAL(32781, 16)]
@@ -27,7 +27,7 @@ Sort
est: (rows=73049)
TableScan
table: PUBLIC.DATE_DIM
- predicate: OR(=(D_MONTH_SEQ, 1212), =(D_MONTH_SEQ, +(1212, 1)), =(D_MONTH_SEQ, +(1212, 2)), =(D_MONTH_SEQ, +(1212, 3)), =(D_MONTH_SEQ, +(1212, 4)), =(D_MONTH_SEQ, +(1212, 5)), =(D_MONTH_SEQ, +(1212, 6)), =(D_MONTH_SEQ, +(1212, 7)), =(D_MONTH_SEQ, +(1212, 8)), =(D_MONTH_SEQ, +(1212, 9)), =(D_MONTH_SEQ, +(1212, 10)), =(D_MONTH_SEQ, +(1212, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223])
fieldNames: [D_DATE_SK, D_MONTH_SEQ, D_QOY]
est: (rows=73049)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q53_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q53_colocated.plan
index 14fc3274ad1..99a3d6b5ec4 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q53_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q53_colocated.plan
@@ -3,8 +3,8 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: >(CASE(>(CAST(AVG_QUARTERLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_QUARTERLY_SALES)), AVG_QUARTERLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=8101)
+ predicate: CASE(>(CAST(AVG_QUARTERLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_QUARTERLY_SALES)), AVG_QUARTERLY_SALES), 0), false)
+ est: (rows=4051)
Project
fieldNames: [I_MANUFACT_ID, SUM_SALES, AVG_QUARTERLY_SALES]
projection: [I_MANUFACT_ID, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_MANUFACT_ID))):DECIMAL(32781, 16)]
@@ -27,7 +27,7 @@ Sort
est: (rows=73049)
TableScan
table: PUBLIC.DATE_DIM
- predicate: OR(=(D_MONTH_SEQ, 1212), =(D_MONTH_SEQ, +(1212, 1)), =(D_MONTH_SEQ, +(1212, 2)), =(D_MONTH_SEQ, +(1212, 3)), =(D_MONTH_SEQ, +(1212, 4)), =(D_MONTH_SEQ, +(1212, 5)), =(D_MONTH_SEQ, +(1212, 6)), =(D_MONTH_SEQ, +(1212, 7)), =(D_MONTH_SEQ, +(1212, 8)), =(D_MONTH_SEQ, +(1212, 9)), =(D_MONTH_SEQ, +(1212, 10)), =(D_MONTH_SEQ, +(1212, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223])
fieldNames: [D_DATE_SK, D_MONTH_SEQ, D_QOY]
est: (rows=73049)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q56.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q56.plan
index 504a3362410..a86386e5009 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q56.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q56.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -166,7 +166,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -246,6 +246,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q56_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q56_colocated.plan
index 504a3362410..a86386e5009 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q56_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q56_colocated.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -166,7 +166,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -246,6 +246,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q59.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q59.plan
index 33007576eba..b860efe7d5a 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q59.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q59.plan
@@ -26,7 +26,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1205), <=(D_MONTH_SEQ, +(1205, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1205..1216]])
fieldNames: [D_MONTH_SEQ, D_WEEK_SEQ]
est: (rows=18262)
HashJoin
@@ -81,7 +81,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, +(1205, 12)), <=(D_MONTH_SEQ, +(1205, 23)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1217..1228]])
fieldNames: [D_MONTH_SEQ, D_WEEK_SEQ]
est: (rows=18262)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q59_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q59_colocated.plan
index 33007576eba..b860efe7d5a 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q59_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q59_colocated.plan
@@ -26,7 +26,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1205), <=(D_MONTH_SEQ, +(1205, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1205..1216]])
fieldNames: [D_MONTH_SEQ, D_WEEK_SEQ]
est: (rows=18262)
HashJoin
@@ -81,7 +81,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, +(1205, 12)), <=(D_MONTH_SEQ, +(1205, 23)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1217..1228]])
fieldNames: [D_MONTH_SEQ, D_WEEK_SEQ]
est: (rows=18262)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan
index 7e621461f1f..5a717df6204 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan
@@ -56,7 +56,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -113,7 +113,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -190,7 +190,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q60.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q60.plan
index 6ee0573f110..fe6bca7827b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q60.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q60.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedSortAggregate
@@ -167,7 +167,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -247,6 +247,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q60_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q60_colocated.plan
index 6ee0573f110..fe6bca7827b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q60_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q60_colocated.plan
@@ -86,7 +86,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedSortAggregate
@@ -167,7 +167,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
ColocatedHashAggregate
@@ -247,6 +247,6 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -5.00)
+ predicate: =(CA_GMT_OFFSET, -5.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q61.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q61.plan
index 1fb9d79ed2a..27fd44a13dc 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q61.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q61.plan
@@ -76,7 +76,7 @@ Limit
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
Exchange
@@ -84,7 +84,7 @@ Limit
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_GMT_OFFSET]
est: (rows=4)
ColocatedHashAggregate
@@ -108,7 +108,7 @@ Limit
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
HashJoin
@@ -177,6 +177,6 @@ Limit
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_GMT_OFFSET]
est: (rows=4)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q61_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q61_colocated.plan
index 1fb9d79ed2a..27fd44a13dc 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q61_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q61_colocated.plan
@@ -76,7 +76,7 @@ Limit
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
Exchange
@@ -84,7 +84,7 @@ Limit
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_GMT_OFFSET]
est: (rows=4)
ColocatedHashAggregate
@@ -108,7 +108,7 @@ Limit
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(CA_GMT_OFFSET, -6.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
HashJoin
@@ -177,6 +177,6 @@ Limit
est: (rows=4)
TableScan
table: PUBLIC.STORE
- predicate: =(CAST(S_GMT_OFFSET):DECIMAL(12, 2), -6.00)
+ predicate: =(S_GMT_OFFSET, -6.00)
fieldNames: [S_STORE_SK, S_GMT_OFFSET]
est: (rows=4)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan
index 0ffb3577aa8..ab5c0227e2b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1215), <=(D_MONTH_SEQ, +(1215, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1215..1226]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan
index 0ffb3577aa8..ab5c0227e2b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1215), <=(D_MONTH_SEQ, +(1215, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1215..1226]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q63.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q63.plan
index be0721ac90a..3d4561b1a25 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q63.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q63.plan
@@ -3,8 +3,8 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: >(CASE(>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=8101)
+ predicate: CASE(>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), 0), false)
+ est: (rows=4051)
Project
fieldNames: [I_MANAGER_ID, SUM_SALES, AVG_MONTHLY_SALES]
projection: [I_MANAGER_ID, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID))):DECIMAL(32781, 16)]
@@ -27,7 +27,7 @@ Sort
est: (rows=73049)
TableScan
table: PUBLIC.DATE_DIM
- predicate: OR(=(D_MONTH_SEQ, 1211), =(D_MONTH_SEQ, +(1211, 1)), =(D_MONTH_SEQ, +(1211, 2)), =(D_MONTH_SEQ, +(1211, 3)), =(D_MONTH_SEQ, +(1211, 4)), =(D_MONTH_SEQ, +(1211, 5)), =(D_MONTH_SEQ, +(1211, 6)), =(D_MONTH_SEQ, +(1211, 7)), =(D_MONTH_SEQ, +(1211, 8)), =(D_MONTH_SEQ, +(1211, 9)), =(D_MONTH_SEQ, +(1211, 10)), =(D_MONTH_SEQ, +(1211, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222])
fieldNames: [D_DATE_SK, D_MONTH_SEQ, D_MOY]
est: (rows=73049)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q63_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q63_colocated.plan
index be0721ac90a..3d4561b1a25 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q63_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q63_colocated.plan
@@ -3,8 +3,8 @@ Sort
fetch: 100
est: (rows=100)
Filter
- predicate: >(CASE(>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=8101)
+ predicate: CASE(>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), 0), false)
+ est: (rows=4051)
Project
fieldNames: [I_MANAGER_ID, SUM_SALES, AVG_MONTHLY_SALES]
projection: [I_MANAGER_ID, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_MANAGER_ID))):DECIMAL(32781, 16)]
@@ -27,7 +27,7 @@ Sort
est: (rows=73049)
TableScan
table: PUBLIC.DATE_DIM
- predicate: OR(=(D_MONTH_SEQ, 1211), =(D_MONTH_SEQ, +(1211, 1)), =(D_MONTH_SEQ, +(1211, 2)), =(D_MONTH_SEQ, +(1211, 3)), =(D_MONTH_SEQ, +(1211, 4)), =(D_MONTH_SEQ, +(1211, 5)), =(D_MONTH_SEQ, +(1211, 6)), =(D_MONTH_SEQ, +(1211, 7)), =(D_MONTH_SEQ, +(1211, 8)), =(D_MONTH_SEQ, +(1211, 9)), =(D_MONTH_SEQ, +(1211, 10)), =(D_MONTH_SEQ, +(1211, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222])
fieldNames: [D_DATE_SK, D_MONTH_SEQ, D_MOY]
est: (rows=73049)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q64.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q64.plan
index 5a971619495..a10c885dd30 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q64.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q64.plan
@@ -1,40 +1,41 @@
Sort
collation: [PRODUCT_NAME ASC, STORE_NAME ASC, CNT0 ASC, S11 ASC, S12 ASC]
- est: (rows=21)
+ est: (rows=254468)
Project
fieldNames: [PRODUCT_NAME, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, CNT, S11, S21, S31, S12, S22, S32, SYEAR0, CNT0]
projection: [PRODUCT_NAME, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, CNT, S1, S2, S3, S1$0, S2$0, S3$0, SYEAR$0, CNT$0]
- est: (rows=21)
+ est: (rows=254468)
HashJoin
predicate: AND(=(ITEM_SK, ITEM_SK$0), <=(CNT$0, CNT), =(STORE_NAME, STORE_NAME$0), =(STORE_ZIP, STORE_ZIP$0))
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3, PRODUCT_NAME$0, ITEM_SK$0, STORE_NAME$0, STORE_ZIP$0, B_STREET_NUMBER$0, B_STREET_NAME$0, B_CITY$0, B_ZIP$0, C_STREET_NUMBER$0, C_STREET_NAME$0, C_CITY$0, C_ZIP$0, SYEAR$0, FSYEAR$0, S2YEAR$0, CNT$0, S1$0, S2$0, S3$0]
type: inner
- est: (rows=21)
+ est: (rows=254468)
ColocatedHashAggregate
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3]
group: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR]
aggregation: [COUNT(), SUM(SS_WHOLESALE_COST), SUM(SS_LIST_PRICE), SUM(SS_COUPON_AMT)]
- est: (rows=2887)
+ est: (rows=17466721)
Project
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
projection: [I_PRODUCT_NAME, I_ITEM_SK, S_STORE_NAME, S_ZIP, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, D_YEAR$0$0, D_YEAR, D_YEAR$0, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
- est: (rows=2992)
+ est: (rows=18103688)
HashJoin
- predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0$0, D_YEAR$0$0, S [...]
type: inner
- est: (rows=2992)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=287514)
+ est: (rows=73049)
TableScan
- table: PUBLIC.STORE_RETURNS
- fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
- est: (rows=287514)
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_S [...]
+ predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0, D_YEAR$0, SS_SOLD_DATE_SK, SS_ITEM_S [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=73049)
@@ -43,30 +44,29 @@ Sort
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS [...]
+ predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=73049)
- TableScan
- table: PUBLIC.DATE_DIM
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=73049)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_STORE_SK, S_STORE_SK)
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=50000)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
+ est: (rows=50000)
HashJoin
- predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS [...]
+ predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=50000)
@@ -75,53 +75,53 @@ Sort
fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
est: (rows=50000)
HashJoin
- predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_IT [...]
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=50000)
- TableScan
- table: PUBLIC.CUSTOMER_ADDRESS
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
- est: (rows=50000)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_P [...]
+ predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT [...]
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=7200)
- TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
+ predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
+ predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ITEM_SK, SR_TICKET_NUMBER, I_ITEM_SK, I_CURRENT_PRICE, I_COL [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=7200)
+ est: (rows=1920800)
TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ table: PUBLIC.CUSTOMER_DEMOGRAPHICS
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
+ est: (rows=1920800)
HashJoin
- predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME, CS_ITEM_SK, SALE, REFUND, D [...]
+ predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=25862411)
Exchange
distribution: single
est: (rows=1920800)
@@ -130,150 +130,151 @@ Sort
fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
est: (rows=1920800)
HashJoin
- predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
+ predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=1920800)
+ est: (rows=100000)
TableScan
- table: PUBLIC.CUSTOMER_DEMOGRAPHICS
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
- est: (rows=1920800)
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
+ est: (rows=100000)
HashJoin
- predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=100000)
+ est: (rows=24325)
TableScan
- table: PUBLIC.CUSTOMER
- fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
- est: (rows=100000)
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 1999)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
HashJoin
- predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ predicate: =(SS_ITEM_SK, CS_ITEM_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=77664899)
HashJoin
- predicate: =(SS_ITEM_SK, CS_ITEM_SK)
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
type: inner
- est: (rows=389035465)
- HashJoin
- predicate: =(SS_ITEM_SK, I_ITEM_SK)
- type: inner
- est: (rows=180025)
- Exchange
- distribution: single
- est: (rows=2880404)
+ est: (rows=35939)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ HashJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: inner
+ est: (rows=287514)
TableScan
table: PUBLIC.STORE_SALES
fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
est: (rows=2880404)
+ Exchange
+ distribution: table PUBLIC.STORE_SALES in zone "Default" by [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=2250)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(I_CURRENT_PRICE, 80.00), SEARCH(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), Sar [...]
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
+ est: (rows=2250)
+ Filter
+ predicate: >(SALE, *(2, REFUND))
+ est: (rows=14407)
+ ReduceHashAggregate
+ fieldNames: [CS_ITEM_SK, SALE, REFUND]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(_ACC0), SUM(_ACC1)]
+ est: (rows=28813)
Exchange
distribution: single
- est: (rows=1125)
- TableScan
- table: PUBLIC.ITEM
- predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 80.00), <=(CAST(I_CURRENT_PRICE): [...]
- fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
- est: (rows=1125)
- Filter
- predicate: >(SALE, *(2, REFUND))
- est: (rows=14407)
- ReduceHashAggregate
- fieldNames: [CS_ITEM_SK, SALE, REFUND]
- group: [CS_ITEM_SK]
- aggregation: [SUM(_ACC0), SUM(_ACC1)]
est: (rows=28813)
- Exchange
- distribution: single
+ MapHashAggregate
+ fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
est: (rows=28813)
- MapHashAggregate
- fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
- group: [CS_ITEM_SK]
- aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
- est: (rows=28813)
- Project
- fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
- projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ Project
+ fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
+ projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ est: (rows=144067)
+ HashJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: inner
est: (rows=144067)
- HashJoin
- predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
- type: inner
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: table PUBLIC.CATALOG_SALES in zone "Default" by [CR_ITEM_SK, CR_ORDER_NUMBER]
est: (rows=144067)
TableScan
- table: PUBLIC.CATALOG_SALES
- fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
- est: (rows=1441548)
- Exchange
- distribution: table PUBLIC.CATALOG_SALES in zone "Default" by [CR_ITEM_SK, CR_ORDER_NUMBER]
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
est: (rows=144067)
- TableScan
- table: PUBLIC.CATALOG_RETURNS
- fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
- est: (rows=144067)
- Exchange
- distribution: single
- est: (rows=24325)
- TableScan
- table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, 1999)
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=24325)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
- est: (rows=300)
- TableScan
- table: PUBLIC.PROMOTION
- fieldNames: [P_PROMO_SK]
- est: (rows=300)
Exchange
distribution: single
- est: (rows=12)
+ est: (rows=300)
TableScan
- table: PUBLIC.STORE
- fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
- est: (rows=12)
+ table: PUBLIC.PROMOTION
+ fieldNames: [P_PROMO_SK]
+ est: (rows=300)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
+ est: (rows=12)
ColocatedHashAggregate
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3]
group: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR]
aggregation: [COUNT(), SUM(SS_WHOLESALE_COST), SUM(SS_LIST_PRICE), SUM(SS_COUPON_AMT)]
- est: (rows=2887)
+ est: (rows=17466721)
Project
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
projection: [I_PRODUCT_NAME, I_ITEM_SK, S_STORE_NAME, S_ZIP, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, D_YEAR$0$0, D_YEAR, D_YEAR$0, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
- est: (rows=2992)
+ est: (rows=18103688)
HashJoin
- predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0$0, D_YEAR$0$0, S [...]
type: inner
- est: (rows=2992)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=287514)
+ est: (rows=73049)
TableScan
- table: PUBLIC.STORE_RETURNS
- fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
- est: (rows=287514)
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_S [...]
+ predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0, D_YEAR$0, SS_SOLD_DATE_SK, SS_ITEM_S [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=73049)
@@ -282,30 +283,29 @@ Sort
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS [...]
+ predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=73049)
- TableScan
- table: PUBLIC.DATE_DIM
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=73049)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_STORE_SK, S_STORE_SK)
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=50000)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
+ est: (rows=50000)
HashJoin
- predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS [...]
+ predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=50000)
@@ -314,53 +314,53 @@ Sort
fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
est: (rows=50000)
HashJoin
- predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_IT [...]
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=50000)
- TableScan
- table: PUBLIC.CUSTOMER_ADDRESS
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
- est: (rows=50000)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_P [...]
+ predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT [...]
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=7200)
- TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
+ predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
+ predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ITEM_SK, SR_TICKET_NUMBER, I_ITEM_SK, I_CURRENT_PRICE, I_COL [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=7200)
+ est: (rows=1920800)
TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ table: PUBLIC.CUSTOMER_DEMOGRAPHICS
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
+ est: (rows=1920800)
HashJoin
- predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME, CS_ITEM_SK, SALE, REFUND, D [...]
+ predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=25862411)
Exchange
distribution: single
est: (rows=1920800)
@@ -369,122 +369,122 @@ Sort
fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
est: (rows=1920800)
HashJoin
- predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
+ predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=1920800)
+ est: (rows=100000)
TableScan
- table: PUBLIC.CUSTOMER_DEMOGRAPHICS
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
- est: (rows=1920800)
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
+ est: (rows=100000)
HashJoin
- predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=100000)
+ est: (rows=24325)
TableScan
- table: PUBLIC.CUSTOMER
- fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
- est: (rows=100000)
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2000)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
HashJoin
- predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ predicate: =(SS_ITEM_SK, CS_ITEM_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=77664899)
HashJoin
- predicate: =(SS_ITEM_SK, CS_ITEM_SK)
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
type: inner
- est: (rows=389035465)
- HashJoin
- predicate: =(SS_ITEM_SK, I_ITEM_SK)
- type: inner
- est: (rows=180025)
- Exchange
- distribution: single
- est: (rows=2880404)
+ est: (rows=35939)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ HashJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: inner
+ est: (rows=287514)
TableScan
table: PUBLIC.STORE_SALES
fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
est: (rows=2880404)
+ Exchange
+ distribution: table PUBLIC.STORE_SALES in zone "Default" by [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=2250)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(I_CURRENT_PRICE, 80.00), SEARCH(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), Sar [...]
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
+ est: (rows=2250)
+ Filter
+ predicate: >(SALE, *(2, REFUND))
+ est: (rows=14407)
+ ReduceHashAggregate
+ fieldNames: [CS_ITEM_SK, SALE, REFUND]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(_ACC0), SUM(_ACC1)]
+ est: (rows=28813)
Exchange
distribution: single
- est: (rows=1125)
- TableScan
- table: PUBLIC.ITEM
- predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 80.00), <=(CAST(I_CURRENT_PRICE): [...]
- fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
- est: (rows=1125)
- Filter
- predicate: >(SALE, *(2, REFUND))
- est: (rows=14407)
- ReduceHashAggregate
- fieldNames: [CS_ITEM_SK, SALE, REFUND]
- group: [CS_ITEM_SK]
- aggregation: [SUM(_ACC0), SUM(_ACC1)]
est: (rows=28813)
- Exchange
- distribution: single
+ MapHashAggregate
+ fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
est: (rows=28813)
- MapHashAggregate
- fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
- group: [CS_ITEM_SK]
- aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
- est: (rows=28813)
- Project
- fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
- projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ Project
+ fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
+ projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ est: (rows=144067)
+ HashJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: inner
est: (rows=144067)
- HashJoin
- predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
- type: inner
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: table PUBLIC.CATALOG_SALES in zone "Default" by [CR_ITEM_SK, CR_ORDER_NUMBER]
est: (rows=144067)
TableScan
- table: PUBLIC.CATALOG_SALES
- fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
- est: (rows=1441548)
- Exchange
- distribution: table PUBLIC.CATALOG_SALES in zone "Default" by [CR_ITEM_SK, CR_ORDER_NUMBER]
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
est: (rows=144067)
- TableScan
- table: PUBLIC.CATALOG_RETURNS
- fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
- est: (rows=144067)
- Exchange
- distribution: single
- est: (rows=24325)
- TableScan
- table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=24325)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
- est: (rows=300)
- TableScan
- table: PUBLIC.PROMOTION
- fieldNames: [P_PROMO_SK]
- est: (rows=300)
Exchange
distribution: single
- est: (rows=12)
+ est: (rows=300)
TableScan
- table: PUBLIC.STORE
- fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
- est: (rows=12)
+ table: PUBLIC.PROMOTION
+ fieldNames: [P_PROMO_SK]
+ est: (rows=300)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
+ est: (rows=12)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q64_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q64_colocated.plan
index 8d379307019..dec277eb78b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q64_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q64_colocated.plan
@@ -1,40 +1,41 @@
Sort
collation: [PRODUCT_NAME ASC, STORE_NAME ASC, CNT0 ASC, S11 ASC, S12 ASC]
- est: (rows=21)
+ est: (rows=254468)
Project
fieldNames: [PRODUCT_NAME, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, CNT, S11, S21, S31, S12, S22, S32, SYEAR0, CNT0]
projection: [PRODUCT_NAME, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, CNT, S1, S2, S3, S1$0, S2$0, S3$0, SYEAR$0, CNT$0]
- est: (rows=21)
+ est: (rows=254468)
HashJoin
predicate: AND(=(ITEM_SK, ITEM_SK$0), <=(CNT$0, CNT), =(STORE_NAME, STORE_NAME$0), =(STORE_ZIP, STORE_ZIP$0))
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3, PRODUCT_NAME$0, ITEM_SK$0, STORE_NAME$0, STORE_ZIP$0, B_STREET_NUMBER$0, B_STREET_NAME$0, B_CITY$0, B_ZIP$0, C_STREET_NUMBER$0, C_STREET_NAME$0, C_CITY$0, C_ZIP$0, SYEAR$0, FSYEAR$0, S2YEAR$0, CNT$0, S1$0, S2$0, S3$0]
type: inner
- est: (rows=21)
+ est: (rows=254468)
ColocatedHashAggregate
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3]
group: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR]
aggregation: [COUNT(), SUM(SS_WHOLESALE_COST), SUM(SS_LIST_PRICE), SUM(SS_COUPON_AMT)]
- est: (rows=2887)
+ est: (rows=17466721)
Project
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
projection: [I_PRODUCT_NAME, I_ITEM_SK, S_STORE_NAME, S_ZIP, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, D_YEAR$0$0, D_YEAR, D_YEAR$0, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
- est: (rows=2992)
+ est: (rows=18103688)
HashJoin
- predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0$0, D_YEAR$0$0, S [...]
type: inner
- est: (rows=2992)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=287514)
+ est: (rows=73049)
TableScan
- table: PUBLIC.STORE_RETURNS
- fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
- est: (rows=287514)
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_S [...]
+ predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0, D_YEAR$0, SS_SOLD_DATE_SK, SS_ITEM_S [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=73049)
@@ -43,30 +44,29 @@ Sort
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS [...]
+ predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=73049)
- TableScan
- table: PUBLIC.DATE_DIM
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=73049)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_STORE_SK, S_STORE_SK)
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=50000)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
+ est: (rows=50000)
HashJoin
- predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS [...]
+ predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=50000)
@@ -75,53 +75,53 @@ Sort
fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
est: (rows=50000)
HashJoin
- predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_IT [...]
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=50000)
- TableScan
- table: PUBLIC.CUSTOMER_ADDRESS
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
- est: (rows=50000)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_P [...]
+ predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT [...]
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=7200)
- TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
+ predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
+ predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ITEM_SK, SR_TICKET_NUMBER, I_ITEM_SK, I_CURRENT_PRICE, I_COL [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=7200)
+ est: (rows=1920800)
TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ table: PUBLIC.CUSTOMER_DEMOGRAPHICS
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
+ est: (rows=1920800)
HashJoin
- predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME, CS_ITEM_SK, SALE, REFUND, D [...]
+ predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=25862411)
Exchange
distribution: single
est: (rows=1920800)
@@ -130,147 +130,145 @@ Sort
fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
est: (rows=1920800)
HashJoin
- predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
+ predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=1920800)
+ est: (rows=100000)
TableScan
- table: PUBLIC.CUSTOMER_DEMOGRAPHICS
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
- est: (rows=1920800)
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
+ est: (rows=100000)
HashJoin
- predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=100000)
+ est: (rows=24325)
TableScan
- table: PUBLIC.CUSTOMER
- fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
- est: (rows=100000)
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 1999)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
HashJoin
- predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ predicate: =(SS_ITEM_SK, CS_ITEM_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=77664899)
HashJoin
- predicate: =(SS_ITEM_SK, CS_ITEM_SK)
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
type: inner
- est: (rows=389035465)
- HashJoin
- predicate: =(SS_ITEM_SK, I_ITEM_SK)
- type: inner
- est: (rows=180025)
- Exchange
- distribution: single
- est: (rows=2880404)
+ est: (rows=35939)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ HashJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: inner
+ est: (rows=287514)
TableScan
table: PUBLIC.STORE_SALES
fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=2250)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(I_CURRENT_PRICE, 80.00), SEARCH(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), Sar [...]
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
+ est: (rows=2250)
+ Filter
+ predicate: >(SALE, *(2, REFUND))
+ est: (rows=14407)
+ ReduceHashAggregate
+ fieldNames: [CS_ITEM_SK, SALE, REFUND]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(_ACC0), SUM(_ACC1)]
+ est: (rows=28813)
Exchange
distribution: single
- est: (rows=1125)
- TableScan
- table: PUBLIC.ITEM
- predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 80.00), <=(CAST(I_CURRENT_PRICE): [...]
- fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
- est: (rows=1125)
- Filter
- predicate: >(SALE, *(2, REFUND))
- est: (rows=14407)
- ReduceHashAggregate
- fieldNames: [CS_ITEM_SK, SALE, REFUND]
- group: [CS_ITEM_SK]
- aggregation: [SUM(_ACC0), SUM(_ACC1)]
est: (rows=28813)
- Exchange
- distribution: single
+ MapHashAggregate
+ fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
est: (rows=28813)
- MapHashAggregate
- fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
- group: [CS_ITEM_SK]
- aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
- est: (rows=28813)
- Project
- fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
- projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ Project
+ fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
+ projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ est: (rows=144067)
+ HashJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: inner
est: (rows=144067)
- HashJoin
- predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
- type: inner
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
est: (rows=144067)
- TableScan
- table: PUBLIC.CATALOG_SALES
- fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
- est: (rows=1441548)
- TableScan
- table: PUBLIC.CATALOG_RETURNS
- fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
- est: (rows=144067)
- Exchange
- distribution: single
- est: (rows=24325)
- TableScan
- table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, 1999)
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=24325)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
- est: (rows=300)
- TableScan
- table: PUBLIC.PROMOTION
- fieldNames: [P_PROMO_SK]
- est: (rows=300)
Exchange
distribution: single
- est: (rows=12)
+ est: (rows=300)
TableScan
- table: PUBLIC.STORE
- fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
- est: (rows=12)
+ table: PUBLIC.PROMOTION
+ fieldNames: [P_PROMO_SK]
+ est: (rows=300)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
+ est: (rows=12)
ColocatedHashAggregate
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, CNT, S1, S2, S3]
group: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR]
aggregation: [COUNT(), SUM(SS_WHOLESALE_COST), SUM(SS_LIST_PRICE), SUM(SS_COUPON_AMT)]
- est: (rows=2887)
+ est: (rows=17466721)
Project
fieldNames: [PRODUCT_NAME, ITEM_SK, STORE_NAME, STORE_ZIP, B_STREET_NUMBER, B_STREET_NAME, B_CITY, B_ZIP, C_STREET_NUMBER, C_STREET_NAME, C_CITY, C_ZIP, SYEAR, FSYEAR, S2YEAR, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
projection: [I_PRODUCT_NAME, I_ITEM_SK, S_STORE_NAME, S_ZIP, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, D_YEAR$0$0, D_YEAR, D_YEAR$0, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
- est: (rows=2992)
+ est: (rows=18103688)
HashJoin
- predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0$0, D_YEAR$0$0, S [...]
type: inner
- est: (rows=2992)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=287514)
+ est: (rows=73049)
TableScan
- table: PUBLIC.STORE_RETURNS
- fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
- est: (rows=287514)
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SALES_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, D_DATE_SK$0, D_YEAR$0, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_S [...]
+ predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK$0, D_YEAR$0, SS_SOLD_DATE_SK, SS_ITEM_S [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=73049)
@@ -279,30 +277,29 @@ Sort
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=73049)
HashJoin
- predicate: =(C_FIRST_SHIPTO_DATE_SK, D_DATE_SK)
- fieldNames: [D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS [...]
+ predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=73049)
- TableScan
- table: PUBLIC.DATE_DIM
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=73049)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_STORE_SK, S_STORE_SK)
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
HashJoin
- predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=50000)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
+ est: (rows=50000)
HashJoin
- predicate: =(SS_ADDR_SK, CA_ADDRESS_SK)
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP, CA_ADDRESS_SK$0, CA_STREET_NUMBER$0, CA_STREET_NAME$0, CA_CITY$0, CA_ZIP$0, HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS [...]
+ predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
est: (rows=50000)
@@ -311,53 +308,53 @@ Sort
fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
est: (rows=50000)
HashJoin
- predicate: =(C_CURRENT_ADDR_SK, CA_ADDRESS_SK)
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_IT [...]
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=50000)
- TableScan
- table: PUBLIC.CUSTOMER_ADDRESS
- fieldNames: [CA_ADDRESS_SK, CA_STREET_NUMBER, CA_STREET_NAME, CA_CITY, CA_ZIP]
- est: (rows=50000)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK$0)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_P [...]
+ predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK, HD_DEMO_SK$0, HD_INCOME_BAND_SK$0, CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT [...]
+ predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
type: inner
- est: (rows=90684167)
- Exchange
- distribution: single
- est: (rows=7200)
- TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ est: (rows=18103688)
HashJoin
- predicate: =(HD_INCOME_BAND_SK, IB_INCOME_BAND_SK)
+ predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
+ Exchange
+ distribution: single
+ est: (rows=7200)
+ TableScan
+ table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
+ fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
+ est: (rows=7200)
HashJoin
- predicate: =(C_CURRENT_HDEMO_SK, HD_DEMO_SK)
+ predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, D_DATE_SK, D_YEAR, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, SR_ITEM_SK, SR_TICKET_NUMBER, I_ITEM_SK, I_CURRENT_PRICE, I_COL [...]
type: inner
- est: (rows=90684167)
+ est: (rows=18103688)
Exchange
distribution: single
- est: (rows=7200)
+ est: (rows=1920800)
TableScan
- table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- fieldNames: [HD_DEMO_SK, HD_INCOME_BAND_SK]
- est: (rows=7200)
+ table: PUBLIC.CUSTOMER_DEMOGRAPHICS
+ fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
+ est: (rows=1920800)
HashJoin
- predicate: AND(<>(CD_MARITAL_STATUS, CD_MARITAL_STATUS$0), =(SS_CDEMO_SK, CD_DEMO_SK))
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT, I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME, CS_ITEM_SK, SALE, REFUND, D [...]
+ predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
type: inner
- est: (rows=90684167)
+ est: (rows=25862411)
Exchange
distribution: single
est: (rows=1920800)
@@ -366,119 +363,116 @@ Sort
fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
est: (rows=1920800)
HashJoin
- predicate: =(C_CURRENT_CDEMO_SK, CD_DEMO_SK)
+ predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=1920800)
+ est: (rows=100000)
TableScan
- table: PUBLIC.CUSTOMER_DEMOGRAPHICS
- fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS]
- est: (rows=1920800)
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
+ est: (rows=100000)
HashJoin
- predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=25862411)
Exchange
distribution: single
- est: (rows=100000)
+ est: (rows=24325)
TableScan
- table: PUBLIC.CUSTOMER
- fieldNames: [C_CUSTOMER_SK, C_CURRENT_CDEMO_SK, C_CURRENT_HDEMO_SK, C_CURRENT_ADDR_SK, C_FIRST_SHIPTO_DATE_SK, C_FIRST_SALES_DATE_SK]
- est: (rows=100000)
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2000)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
HashJoin
- predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ predicate: =(SS_ITEM_SK, CS_ITEM_SK)
type: inner
- est: (rows=129548810)
+ est: (rows=77664899)
HashJoin
- predicate: =(SS_ITEM_SK, CS_ITEM_SK)
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
type: inner
- est: (rows=389035465)
- HashJoin
- predicate: =(SS_ITEM_SK, I_ITEM_SK)
- type: inner
- est: (rows=180025)
- Exchange
- distribution: single
- est: (rows=2880404)
+ est: (rows=35939)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ HashJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: inner
+ est: (rows=287514)
TableScan
table: PUBLIC.STORE_SALES
fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_WHOLESALE_COST, SS_LIST_PRICE, SS_COUPON_AMT]
est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=2250)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(I_CURRENT_PRICE, 80.00), SEARCH(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), Sar [...]
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
+ est: (rows=2250)
+ Filter
+ predicate: >(SALE, *(2, REFUND))
+ est: (rows=14407)
+ ReduceHashAggregate
+ fieldNames: [CS_ITEM_SK, SALE, REFUND]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(_ACC0), SUM(_ACC1)]
+ est: (rows=28813)
Exchange
distribution: single
- est: (rows=1125)
- TableScan
- table: PUBLIC.ITEM
- predicate: AND(SEARCH(I_COLOR, Sarg[_UTF-8'azure':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'blush':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'gainsboro':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'hot':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'lemon':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'misty':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8"), >=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 80.00), <=(CAST(I_CURRENT_PRICE): [...]
- fieldNames: [I_ITEM_SK, I_CURRENT_PRICE, I_COLOR, I_PRODUCT_NAME]
- est: (rows=1125)
- Filter
- predicate: >(SALE, *(2, REFUND))
- est: (rows=14407)
- ReduceHashAggregate
- fieldNames: [CS_ITEM_SK, SALE, REFUND]
- group: [CS_ITEM_SK]
- aggregation: [SUM(_ACC0), SUM(_ACC1)]
est: (rows=28813)
- Exchange
- distribution: single
+ MapHashAggregate
+ fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
+ group: [CS_ITEM_SK]
+ aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
est: (rows=28813)
- MapHashAggregate
- fieldNames: [CS_ITEM_SK, _ACC0, _ACC1, _GROUP_ID]
- group: [CS_ITEM_SK]
- aggregation: [SUM(CS_EXT_LIST_PRICE), SUM($f2)]
- est: (rows=28813)
- Project
- fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
- projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ Project
+ fieldNames: [CS_ITEM_SK, CS_EXT_LIST_PRICE, $f2]
+ projection: [CS_ITEM_SK, CS_EXT_LIST_PRICE, +(+(CR_REFUNDED_CASH, CR_REVERSED_CHARGE), CR_STORE_CREDIT)]
+ est: (rows=144067)
+ HashJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: inner
est: (rows=144067)
- HashJoin
- predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
- type: inner
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
est: (rows=144067)
- TableScan
- table: PUBLIC.CATALOG_SALES
- fieldNames: [CS_ITEM_SK, CS_ORDER_NUMBER, CS_EXT_LIST_PRICE]
- est: (rows=1441548)
- TableScan
- table: PUBLIC.CATALOG_RETURNS
- fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT]
- est: (rows=144067)
- Exchange
- distribution: single
- est: (rows=24325)
- TableScan
- table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, +(1999, 1))
- fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=24325)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.INCOME_BAND
+ fieldNames: [IB_INCOME_BAND_SK]
est: (rows=20)
- TableScan
- table: PUBLIC.INCOME_BAND
- fieldNames: [IB_INCOME_BAND_SK]
- est: (rows=20)
- Exchange
- distribution: single
- est: (rows=300)
- TableScan
- table: PUBLIC.PROMOTION
- fieldNames: [P_PROMO_SK]
- est: (rows=300)
Exchange
distribution: single
- est: (rows=12)
+ est: (rows=300)
TableScan
- table: PUBLIC.STORE
- fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
- est: (rows=12)
+ table: PUBLIC.PROMOTION
+ fieldNames: [P_PROMO_SK]
+ est: (rows=300)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_ZIP]
+ est: (rows=12)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q65.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q65.plan
index ac24e82392f..5445051e58e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q65.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q65.plan
@@ -47,7 +47,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
HashJoin
@@ -95,6 +95,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q65_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q65_colocated.plan
index ac24e82392f..5445051e58e 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q65_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q65_colocated.plan
@@ -47,7 +47,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
HashJoin
@@ -95,6 +95,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1186), <=(D_MONTH_SEQ, +(1186, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1186..1197]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan
index ab007a115ea..7245037b495 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan
@@ -57,7 +57,7 @@ Limit
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ predicate: SEARCH(T_TIME, Sarg[[9453..38253]])
fieldNames: [T_TIME_SK, T_TIME]
est: (rows=21600)
Exchange
@@ -124,7 +124,7 @@ Limit
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ predicate: SEARCH(T_TIME, Sarg[[9453..38253]])
fieldNames: [T_TIME_SK, T_TIME]
est: (rows=21600)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan
index ab007a115ea..7245037b495 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan
@@ -57,7 +57,7 @@ Limit
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ predicate: SEARCH(T_TIME, Sarg[[9453..38253]])
fieldNames: [T_TIME_SK, T_TIME]
est: (rows=21600)
Exchange
@@ -124,7 +124,7 @@ Limit
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ predicate: SEARCH(T_TIME, Sarg[[9453..38253]])
fieldNames: [T_TIME_SK, T_TIME]
est: (rows=21600)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q68.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q68.plan
index d4d3d1acafd..70d36320ba1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q68.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q68.plan
@@ -69,7 +69,7 @@ Sort
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), OR(=(D_YEAR, 1999), =(D_YEAR, +(1999, 1)), =(D_YEAR, +(1999, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), SEARCH(D_YEAR, Sarg[1999, 2000, 2001]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q68_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q68_colocated.plan
index d4d3d1acafd..70d36320ba1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q68_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q68_colocated.plan
@@ -69,7 +69,7 @@ Sort
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), OR(=(D_YEAR, 1999), =(D_YEAR, +(1999, 1)), =(D_YEAR, +(1999, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), SEARCH(D_YEAR, Sarg[1999, 2000, 2001]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q69.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q69.plan
index 52203e25d27..808b218b041 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q69.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q69.plan
@@ -112,7 +112,7 @@ Sort
est: (rows=959175)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -146,7 +146,7 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -180,6 +180,6 @@ Sort
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q69_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q69_colocated.plan
index 52203e25d27..808b218b041 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q69_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q69_colocated.plan
@@ -112,7 +112,7 @@ Sort
est: (rows=959175)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -146,7 +146,7 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
ReduceHashAggregate
@@ -180,6 +180,6 @@ Sort
est: (rows=480035)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_YEAR, 2003), >=(D_MOY, 2), <=(D_MOY, +(2, 2)))
+ predicate: AND(=(D_YEAR, 2003), SEARCH(D_MOY, Sarg[[2..4]]))
fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
est: (rows=6081)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q72.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q72.plan
index 9619a85b255..aeea4976a77 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q72.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q72.plan
@@ -24,7 +24,7 @@ Sort
collation: [I_ITEM_DESC ASC, W_WAREHOUSE_NAME ASC, D_WEEK_SEQ ASC]
est: (rows=22975880987)
HashJoin
- predicate: AND(=(CS_SHIP_DATE_SK, D_DATE_SK$1), >(D_DATE$0, +(D_DATE, *(5, 86400000:INTERVAL DAY))))
+ predicate: AND(=(CS_SHIP_DATE_SK, D_DATE_SK$1), >(D_DATE$0, +(D_DATE, 432000000:INTERVAL DAY)))
fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_DATE_SK, CS_BILL_CDEMO_SK, CS_BILL_HDEMO_SK, CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, CS_QUANTITY, INV_DATE_SK, INV_ITEM_SK, INV_WAREHOUSE_SK, INV_QUANTITY_ON_HAND, W_WAREHOUSE_SK, W_WAREHOUSE_NAME, I_ITEM_SK, I_ITEM_DESC, CD_DEMO_SK, CD_MARITAL_STATUS, HD_DEMO_SK, HD_BUY_POTENTIAL, D_DATE_SK, D_DATE, D_WEEK_SEQ, D_YEAR, D_DATE_SK$0, D_WEEK_SEQ$0, D_DATE_SK$1, D_DATE$0]
type: inner
est: (rows=22975880987)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q72_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q72_colocated.plan
index 9619a85b255..aeea4976a77 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q72_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q72_colocated.plan
@@ -24,7 +24,7 @@ Sort
collation: [I_ITEM_DESC ASC, W_WAREHOUSE_NAME ASC, D_WEEK_SEQ ASC]
est: (rows=22975880987)
HashJoin
- predicate: AND(=(CS_SHIP_DATE_SK, D_DATE_SK$1), >(D_DATE$0, +(D_DATE, *(5, 86400000:INTERVAL DAY))))
+ predicate: AND(=(CS_SHIP_DATE_SK, D_DATE_SK$1), >(D_DATE$0, +(D_DATE, 432000000:INTERVAL DAY)))
fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_DATE_SK, CS_BILL_CDEMO_SK, CS_BILL_HDEMO_SK, CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, CS_QUANTITY, INV_DATE_SK, INV_ITEM_SK, INV_WAREHOUSE_SK, INV_QUANTITY_ON_HAND, W_WAREHOUSE_SK, W_WAREHOUSE_NAME, I_ITEM_SK, I_ITEM_DESC, CD_DEMO_SK, CD_MARITAL_STATUS, HD_DEMO_SK, HD_BUY_POTENTIAL, D_DATE_SK, D_DATE, D_WEEK_SEQ, D_YEAR, D_DATE_SK$0, D_WEEK_SEQ$0, D_DATE_SK$1, D_DATE$0]
type: inner
est: (rows=22975880987)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan
index a06e8eeadb9..eb5090aad76 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan
@@ -1,14 +1,14 @@
Sort
collation: [CNT DESC, C_LAST_NAME ASC]
- est: (rows=6497)
+ est: (rows=3248)
Project
fieldNames: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
projection: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
- est: (rows=6497)
+ est: (rows=3248)
HashJoin
predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=6497)
+ est: (rows=3248)
Exchange
distribution: single
est: (rows=100000)
@@ -18,28 +18,28 @@ Sort
est: (rows=100000)
Filter
predicate: SEARCH(CNT, Sarg[[1L:BIGINT..5L:BIGINT]]:BIGINT)
- est: (rows=6497)
+ est: (rows=3248)
ColocatedHashAggregate
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK, CNT]
group: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
aggregation: [COUNT()]
- est: (rows=25987)
+ est: (rows=12993)
Project
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
projection: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
- est: (rows=72186)
+ est: (rows=36093)
HashJoin
predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=72186)
+ est: (rows=36093)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=409353)
+ est: (rows=204677)
Exchange
distribution: single
est: (rows=2880404)
@@ -49,18 +49,18 @@ Sort
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=1023)
+ est: (rows=512)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'5001-10000', _UTF-8'>10000':CHAR(10) CHARACTER SET "UTF-8"]:CHAR(10) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), >(CASE(>(HD_VEHICLE_COUNT, 0), /(HD_DEP_COUNT, HD_VEHICLE_COUNT), null:INTEGER), 1))
+ predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'5001-10000', _UTF-8'>10000':CHAR(10) CHARACTER SET "UTF-8"]:CHAR(10) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), CASE(>(HD_VEHICLE_COUNT, 0), >(/(HD_DEP_COUNT, HD_VEHICLE_COUNT), 1), false))
fieldNames: [HD_DEMO_SK, HD_BUY_POTENTIAL, HD_DEP_COUNT, HD_VEHICLE_COUNT]
- est: (rows=1023)
+ est: (rows=512)
Exchange
distribution: single
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q73_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q73_colocated.plan
index a06e8eeadb9..eb5090aad76 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q73_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q73_colocated.plan
@@ -1,14 +1,14 @@
Sort
collation: [CNT DESC, C_LAST_NAME ASC]
- est: (rows=6497)
+ est: (rows=3248)
Project
fieldNames: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
projection: [C_LAST_NAME, C_FIRST_NAME, C_SALUTATION, C_PREFERRED_CUST_FLAG, SS_TICKET_NUMBER, CNT]
- est: (rows=6497)
+ est: (rows=3248)
HashJoin
predicate: =(SS_CUSTOMER_SK, C_CUSTOMER_SK)
type: inner
- est: (rows=6497)
+ est: (rows=3248)
Exchange
distribution: single
est: (rows=100000)
@@ -18,28 +18,28 @@ Sort
est: (rows=100000)
Filter
predicate: SEARCH(CNT, Sarg[[1L:BIGINT..5L:BIGINT]]:BIGINT)
- est: (rows=6497)
+ est: (rows=3248)
ColocatedHashAggregate
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK, CNT]
group: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
aggregation: [COUNT()]
- est: (rows=25987)
+ est: (rows=12993)
Project
fieldNames: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
projection: [SS_TICKET_NUMBER, SS_CUSTOMER_SK]
- est: (rows=72186)
+ est: (rows=36093)
HashJoin
predicate: =(SS_STORE_SK, S_STORE_SK)
type: inner
- est: (rows=72186)
+ est: (rows=36093)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=77851)
+ est: (rows=38926)
HashJoin
predicate: =(SS_HDEMO_SK, HD_DEMO_SK)
type: inner
- est: (rows=409353)
+ est: (rows=204677)
Exchange
distribution: single
est: (rows=2880404)
@@ -49,18 +49,18 @@ Sort
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=1023)
+ est: (rows=512)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'5001-10000', _UTF-8'>10000':CHAR(10) CHARACTER SET "UTF-8"]:CHAR(10) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), >(CASE(>(HD_VEHICLE_COUNT, 0), /(HD_DEP_COUNT, HD_VEHICLE_COUNT), null:INTEGER), 1))
+ predicate: AND(SEARCH(HD_BUY_POTENTIAL, Sarg[_UTF-8'5001-10000', _UTF-8'>10000':CHAR(10) CHARACTER SET "UTF-8"]:CHAR(10) CHARACTER SET "UTF-8"), >(HD_VEHICLE_COUNT, 0), CASE(>(HD_VEHICLE_COUNT, 0), >(/(HD_DEP_COUNT, HD_VEHICLE_COUNT), 1), false))
fieldNames: [HD_DEMO_SK, HD_BUY_POTENTIAL, HD_DEP_COUNT, HD_VEHICLE_COUNT]
- est: (rows=1023)
+ est: (rows=512)
Exchange
distribution: single
est: (rows=13893)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), OR(=(D_YEAR, 2000), =(D_YEAR, +(2000, 1)), =(D_YEAR, +(2000, 2))))
+ predicate: AND(SEARCH(D_DOM, Sarg[[1..2]]), SEARCH(D_YEAR, Sarg[2000, 2001, 2002]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOM]
est: (rows=13893)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan
index 405bc091944..3f9d361b35c 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan
@@ -4,38 +4,38 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
- est: (rows=874578399118912500)
+ est: (rows=1353181325902280450)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0.00), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0)), false), false), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, year$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
type: inner
- est: (rows=874578399118912500)
+ est: (rows=1353181325902280450)
Sort
collation: [CUSTOMER_LAST_NAME ASC, CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC]
- est: (rows=321922)
+ est: (rows=566298)
UnionAll
- est: (rows=321922)
+ est: (rows=566298)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, _UTF-8's']
- est: (rows=321921)
+ est: (rows=566297)
ColocatedHashAggregate
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
aggregation: [SUM(SS_NET_PAID)]
- est: (rows=321921)
+ est: (rows=566297)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
- est: (rows=545259)
+ est: (rows=959175)
HashJoin
predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
type: inner
- est: (rows=545259)
+ est: (rows=959175)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=545259)
+ est: (rows=959175)
Exchange
distribution: single
est: (rows=2880404)
@@ -45,12 +45,12 @@ Limit
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=13828)
+ est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=13828)
+ est: (rows=24325)
Exchange
distribution: single
est: (rows=100000)
@@ -58,35 +58,24 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
type: inner
- est: (rows=36223234343827)
+ est: (rows=63720617168891)
Sort
collation: [CUSTOMER_ID ASC]
est: (rows=70718)
UnionAll
est: (rows=70718)
- Project
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST(SS_NET_PAID):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
@@ -123,7 +112,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ predicate: =(D_YEAR, 1998)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -137,7 +126,7 @@ Limit
predicate: =(CUSTOMER_ID, CUSTOMER_ID$0)
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0]
type: inner
- est: (rows=3414825094)
+ est: (rows=6007049521)
Sort
collation: [CUSTOMER_ID ASC]
est: (rows=283149)
@@ -179,7 +168,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ predicate: =(D_YEAR, 1998)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -189,48 +178,37 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST(WS_NET_PAID):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
- tuples: []
- est: (rows=1)
UnionAll
- est: (rows=80401)
- Project
+ est: (rows=141434)
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
- est: (rows=80400)
+ est: (rows=141433)
ColocatedHashAggregate
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
aggregation: [SUM(WS_NET_PAID)]
- est: (rows=80400)
+ est: (rows=141433)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
- est: (rows=136179)
+ est: (rows=239555)
HashJoin
predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
type: inner
- est: (rows=136179)
+ est: (rows=239555)
HashJoin
predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=136179)
+ est: (rows=239555)
Exchange
distribution: single
est: (rows=719384)
@@ -240,12 +218,12 @@ Limit
est: (rows=719384)
Exchange
distribution: single
- est: (rows=13828)
+ est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=13828)
+ est: (rows=24325)
Exchange
distribution: single
est: (rows=100000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan
index 405bc091944..3f9d361b35c 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan
@@ -4,38 +4,38 @@ Limit
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
- est: (rows=874578399118912500)
+ est: (rows=1353181325902280450)
HashJoin
- predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ predicate: AND(CASE(>(YEAR_TOTAL$0$0, 0.00), CASE(>(YEAR_TOTAL$0, 0.00), >(/(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), /(YEAR_TOTAL, YEAR_TOTAL$0$0)), false), false), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, year$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
type: inner
- est: (rows=874578399118912500)
+ est: (rows=1353181325902280450)
Sort
collation: [CUSTOMER_LAST_NAME ASC, CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC]
- est: (rows=321922)
+ est: (rows=566298)
UnionAll
- est: (rows=321922)
+ est: (rows=566298)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, _UTF-8's']
- est: (rows=321921)
+ est: (rows=566297)
ColocatedHashAggregate
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
aggregation: [SUM(SS_NET_PAID)]
- est: (rows=321921)
+ est: (rows=566297)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
- est: (rows=545259)
+ est: (rows=959175)
HashJoin
predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
type: inner
- est: (rows=545259)
+ est: (rows=959175)
HashJoin
predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=545259)
+ est: (rows=959175)
Exchange
distribution: single
est: (rows=2880404)
@@ -45,12 +45,12 @@ Limit
est: (rows=2880404)
Exchange
distribution: single
- est: (rows=13828)
+ est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=13828)
+ est: (rows=24325)
Exchange
distribution: single
est: (rows=100000)
@@ -58,35 +58,24 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
- tuples: []
- est: (rows=1)
MergeJoin
predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
type: inner
- est: (rows=36223234343827)
+ est: (rows=63720617168891)
Sort
collation: [CUSTOMER_ID ASC]
est: (rows=70718)
UnionAll
est: (rows=70718)
- Project
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST(SS_NET_PAID):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
@@ -123,7 +112,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ predicate: =(D_YEAR, 1998)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -137,7 +126,7 @@ Limit
predicate: =(CUSTOMER_ID, CUSTOMER_ID$0)
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0]
type: inner
- est: (rows=3414825094)
+ est: (rows=6007049521)
Sort
collation: [CUSTOMER_ID ASC]
est: (rows=283149)
@@ -179,7 +168,7 @@ Limit
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ predicate: =(D_YEAR, 1998)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -189,48 +178,37 @@ Limit
table: PUBLIC.CUSTOMER
fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
est: (rows=100000)
- Project
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ tuples: []
est: (rows=1)
- Filter
- predicate: >(CAST(WS_NET_PAID):DECIMAL(32767, 2), 0.00)
- est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
- tuples: []
- est: (rows=1)
UnionAll
- est: (rows=80401)
- Project
+ est: (rows=141434)
+ Values
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
- projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ tuples: []
est: (rows=1)
- Values
- fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
- tuples: []
- est: (rows=1)
Project
fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
- est: (rows=80400)
+ est: (rows=141433)
ColocatedHashAggregate
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
aggregation: [SUM(WS_NET_PAID)]
- est: (rows=80400)
+ est: (rows=141433)
Project
fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
- est: (rows=136179)
+ est: (rows=239555)
HashJoin
predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
type: inner
- est: (rows=136179)
+ est: (rows=239555)
HashJoin
predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
type: inner
- est: (rows=136179)
+ est: (rows=239555)
Exchange
distribution: single
est: (rows=719384)
@@ -240,12 +218,12 @@ Limit
est: (rows=719384)
Exchange
distribution: single
- est: (rows=13828)
+ est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ predicate: =(D_YEAR, 1999)
fieldNames: [D_DATE_SK, D_YEAR]
- est: (rows=13828)
+ est: (rows=24325)
Exchange
distribution: single
est: (rows=100000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan
index a7bf23418d0..f5130c9afa0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan
@@ -205,7 +205,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -251,7 +251,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -297,7 +297,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan
index a7bf23418d0..f5130c9afa0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan
@@ -205,7 +205,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -251,7 +251,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
@@ -297,7 +297,7 @@ Sort
est: (rows=24325)
TableScan
table: PUBLIC.DATE_DIM
- predicate: =(D_YEAR, -(2001, 1))
+ predicate: =(D_YEAR, 2000)
fieldNames: [D_DATE_SK, D_YEAR]
est: (rows=24325)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
index 35a5aaa9221..3230a5c2d15 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
@@ -50,7 +50,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -89,7 +89,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -132,7 +132,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
ColocatedHashAggregate
@@ -160,7 +160,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Project
@@ -204,7 +204,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -243,7 +243,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan
index 35a5aaa9221..3230a5c2d15 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan
@@ -50,7 +50,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -89,7 +89,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -132,7 +132,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
ColocatedHashAggregate
@@ -160,7 +160,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Project
@@ -204,7 +204,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -243,7 +243,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q78.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q78.plan
index dac75f79a26..a48e673f748 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q78.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q78.plan
@@ -7,7 +7,7 @@ Sort
projection: [SS_CUSTOMER_SK, ROUND(/(SS_QTY, +(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT))), 2), SS_QTY, SS_WC, SS_SP, +(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT)), +(CASE(IS NOT NULL(WS_WC), CAST(WS_WC):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), CASE(IS NOT NULL(CS_WC), CAST(CS_WC):DECIMAL(327 [...]
est: (rows=174335870849843040000)
Filter
- predicate: OR(>(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), 0), >(CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT), 0))
+ predicate: OR(CASE(IS NOT NULL(WS_QTY), >(CAST(WS_QTY):BIGINT NOT NULL, 0), false), CASE(IS NOT NULL(CS_QTY), >(CAST(CS_QTY):BIGINT NOT NULL, 0), false))
est: (rows=174335870849843040000)
MergeJoin
predicate: AND(=(CS_SOLD_YEAR, SS_SOLD_YEAR), =(CS_ITEM_SK, SS_ITEM_SK), =(CS_CUSTOMER_SK, SS_CUSTOMER_SK))
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q78_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q78_colocated.plan
index dac75f79a26..a48e673f748 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q78_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q78_colocated.plan
@@ -7,7 +7,7 @@ Sort
projection: [SS_CUSTOMER_SK, ROUND(/(SS_QTY, +(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT))), 2), SS_QTY, SS_WC, SS_SP, +(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT)), +(CASE(IS NOT NULL(WS_WC), CAST(WS_WC):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), CASE(IS NOT NULL(CS_WC), CAST(CS_WC):DECIMAL(327 [...]
est: (rows=174335870849843040000)
Filter
- predicate: OR(>(CASE(IS NOT NULL(WS_QTY), CAST(WS_QTY):BIGINT NOT NULL, 0:BIGINT), 0), >(CASE(IS NOT NULL(CS_QTY), CAST(CS_QTY):BIGINT NOT NULL, 0:BIGINT), 0))
+ predicate: OR(CASE(IS NOT NULL(WS_QTY), >(CAST(WS_QTY):BIGINT NOT NULL, 0), false), CASE(IS NOT NULL(CS_QTY), >(CAST(CS_QTY):BIGINT NOT NULL, 0), false))
est: (rows=174335870849843040000)
MergeJoin
predicate: AND(=(CS_SOLD_YEAR, SS_SOLD_YEAR), =(CS_ITEM_SK, SS_ITEM_SK), =(CS_CUSTOMER_SK, SS_CUSTOMER_SK))
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q79.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q79.plan
index a912720ad5b..2ee0f234039 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q79.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q79.plan
@@ -62,7 +62,7 @@ Sort
est: (rows=18505)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_DOW, 1), OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1)), =(D_YEAR, +(1998, 2))))
+ predicate: AND(=(D_DOW, 1), SEARCH(D_YEAR, Sarg[1998, 1999, 2000]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOW]
est: (rows=18505)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q79_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q79_colocated.plan
index a912720ad5b..2ee0f234039 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q79_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q79_colocated.plan
@@ -62,7 +62,7 @@ Sort
est: (rows=18505)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(=(D_DOW, 1), OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1)), =(D_YEAR, +(1998, 2))))
+ predicate: AND(=(D_DOW, 1), SEARCH(D_YEAR, Sarg[1998, 1999, 2000]))
fieldNames: [D_DATE_SK, D_YEAR, D_DOW]
est: (rows=18505)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
index 4ef30a74922..1191fa67560 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
@@ -70,7 +70,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -88,7 +88,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
@@ -157,7 +157,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -175,7 +175,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
@@ -247,7 +247,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -265,7 +265,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan
index 4ef30a74922..1191fa67560 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan
@@ -70,7 +70,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -88,7 +88,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
@@ -157,7 +157,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -175,7 +175,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
@@ -247,7 +247,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-08-06..2002-09-05]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -265,7 +265,7 @@ Sort
est: (rows=9000)
TableScan
table: PUBLIC.ITEM
- predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ predicate: >(I_CURRENT_PRICE, 50.00)
fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
est: (rows=9000)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan
index 8abf4ff3e9e..6b3e2f1f0c1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan
@@ -42,7 +42,7 @@ Sort
est: (rows=4173)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(49, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
+ predicate: AND(>=(I_CURRENT_PRICE, 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 79.00), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
est: (rows=4173)
Exchange
@@ -50,6 +50,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-01-28), <=(D_DATE, +(2001-01-28, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-01-28..2001-03-29]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan
index 8abf4ff3e9e..6b3e2f1f0c1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan
@@ -42,7 +42,7 @@ Sort
est: (rows=4173)
TableScan
table: PUBLIC.ITEM
- predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(49, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
+ predicate: AND(>=(I_CURRENT_PRICE, 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 79.00), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
est: (rows=4173)
Exchange
@@ -50,6 +50,6 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-01-28), <=(D_DATE, +(2001-01-28, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-01-28..2001-03-29]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan
index 2ca85b1eb48..67208957ced 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan
@@ -5,12 +5,12 @@ Sort
Project
fieldNames: [ITEM_ID, SR_ITEM_QTY, SR_DEV, CR_ITEM_QTY, CR_DEV, WR_ITEM_QTY, WR_DEV, AVERAGE]
projection: [ITEM_ID$0, SR_ITEM_QTY, *(/(/(SR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), CR_ITEM_QTY, *(/(/(CR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), WR_ITEM_QTY, *(/(/(WR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), /(+(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY), 3.0:DECIMAL(2, 1))]
- est: (rows=1131225932799338900)
+ est: (rows=1131225932799338880)
MergeJoin
predicate: =(ITEM_ID$0, ITEM_ID)
fieldNames: [ITEM_ID, CR_ITEM_QTY, ITEM_ID$0, SR_ITEM_QTY, ITEM_ID$0$0, WR_ITEM_QTY]
type: inner
- est: (rows=1131225932799338900)
+ est: (rows=1131225932799338880)
Sort
collation: [ITEM_ID ASC]
est: (rows=21919)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan
index 2ca85b1eb48..67208957ced 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan
@@ -5,12 +5,12 @@ Sort
Project
fieldNames: [ITEM_ID, SR_ITEM_QTY, SR_DEV, CR_ITEM_QTY, CR_DEV, WR_ITEM_QTY, WR_DEV, AVERAGE]
projection: [ITEM_ID$0, SR_ITEM_QTY, *(/(/(SR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), CR_ITEM_QTY, *(/(/(CR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), WR_ITEM_QTY, *(/(/(WR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), /(+(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY), 3.0:DECIMAL(2, 1))]
- est: (rows=1131225932799338900)
+ est: (rows=1131225932799338880)
MergeJoin
predicate: =(ITEM_ID$0, ITEM_ID)
fieldNames: [ITEM_ID, CR_ITEM_QTY, ITEM_ID$0, SR_ITEM_QTY, ITEM_ID$0$0, WR_ITEM_QTY]
type: inner
- est: (rows=1131225932799338900)
+ est: (rows=1131225932799338880)
Sort
collation: [ITEM_ID ASC]
est: (rows=21919)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q84.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q84.plan
index 79d977668f9..acf16ae5e23 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q84.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q84.plan
@@ -65,7 +65,7 @@ Limit
est: (rows=5)
TableScan
table: PUBLIC.INCOME_BAND
- predicate: AND(>=(IB_LOWER_BOUND, 37855), <=(IB_UPPER_BOUND, +(37855, 50000)))
+ predicate: AND(>=(IB_LOWER_BOUND, 37855), <=(IB_UPPER_BOUND, 87855))
fieldNames: [IB_INCOME_BAND_SK, IB_LOWER_BOUND, IB_UPPER_BOUND]
est: (rows=5)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q84_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q84_colocated.plan
index 79d977668f9..acf16ae5e23 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q84_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q84_colocated.plan
@@ -65,7 +65,7 @@ Limit
est: (rows=5)
TableScan
table: PUBLIC.INCOME_BAND
- predicate: AND(>=(IB_LOWER_BOUND, 37855), <=(IB_UPPER_BOUND, +(37855, 50000)))
+ predicate: AND(>=(IB_LOWER_BOUND, 37855), <=(IB_UPPER_BOUND, 87855))
fieldNames: [IB_INCOME_BAND_SK, IB_LOWER_BOUND, IB_UPPER_BOUND]
est: (rows=5)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q87.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q87.plan
index 775294e74b8..9aad500e5f6 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q87.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q87.plan
@@ -34,7 +34,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -72,7 +72,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -110,7 +110,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q87_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q87_colocated.plan
index 775294e74b8..9aad500e5f6 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q87_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q87_colocated.plan
@@ -34,7 +34,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -72,7 +72,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
@@ -110,7 +110,7 @@ ColocatedHashAggregate
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1221), <=(D_MONTH_SEQ, +(1221, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1221..1232]])
fieldNames: [D_DATE_SK, D_DATE, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q88.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q88.plan
index d05dd2f83ab..26ade7672b7 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q88.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q88.plan
@@ -59,7 +59,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -107,7 +107,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -155,7 +155,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -203,7 +203,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -251,7 +251,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -299,7 +299,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -347,7 +347,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -395,7 +395,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q88_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q88_colocated.plan
index d05dd2f83ab..26ade7672b7 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q88_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q88_colocated.plan
@@ -59,7 +59,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -107,7 +107,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -155,7 +155,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -203,7 +203,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -251,7 +251,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -299,7 +299,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -347,7 +347,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
@@ -395,7 +395,7 @@ Project
est: (rows=1199)
TableScan
table: PUBLIC.HOUSEHOLD_DEMOGRAPHICS
- predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, +(2, 2))), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, +(4, 2))), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, +(3, 2))))
+ predicate: OR(AND(=(HD_DEP_COUNT, 2), <=(HD_VEHICLE_COUNT, 4)), AND(=(HD_DEP_COUNT, 4), <=(HD_VEHICLE_COUNT, 6)), AND(=(HD_DEP_COUNT, 3), <=(HD_VEHICLE_COUNT, 5)))
fieldNames: [HD_DEMO_SK, HD_DEP_COUNT, HD_VEHICLE_COUNT]
est: (rows=1199)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q89.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q89.plan
index a2a2fe0f3c8..aabaf998c74 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q89.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q89.plan
@@ -9,10 +9,10 @@ Project
Project
fieldNames: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES, EXPR$8]
projection: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES, -(SUM_SALES, AVG_MONTHLY_SALES)]
- est: (rows=22117)
+ est: (rows=11058)
Filter
- predicate: >(CASE(<>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=22117)
+ predicate: CASE(<>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), 0), false)
+ est: (rows=11058)
Project
fieldNames: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES]
projection: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME))):DECIMAL(32781, 16)]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q89_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q89_colocated.plan
index a2a2fe0f3c8..aabaf998c74 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q89_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q89_colocated.plan
@@ -9,10 +9,10 @@ Project
Project
fieldNames: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES, EXPR$8]
projection: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES, -(SUM_SALES, AVG_MONTHLY_SALES)]
- est: (rows=22117)
+ est: (rows=11058)
Filter
- predicate: >(CASE(<>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), /(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), null:DECIMAL(32767, 0)), 0)
- est: (rows=22117)
+ predicate: CASE(<>(CAST(AVG_MONTHLY_SALES):DECIMAL(32767, 2), 0.00), >(/(ABS(-(SUM_SALES, AVG_MONTHLY_SALES)), AVG_MONTHLY_SALES), 0), false)
+ est: (rows=11058)
Project
fieldNames: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, AVG_MONTHLY_SALES]
projection: [I_CATEGORY, I_CLASS, I_BRAND, S_STORE_NAME, S_COMPANY_NAME, D_MOY, SUM_SALES, CAST(/(CAST(CASE(>(COUNT(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME), 0), CAST(SUM(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME)):DECIMAL(32767, 2), null:DECIMAL(32767, 2))):DECIMAL(32781, 16), COUNT(SUM_SALES) OVER (PARTITION BY I_CATEGORY, I_BRAND, S_STORE_NAME, S_COMPANY_NAME))):DECIMAL(32781, 16)]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q90.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q90.plan
index cd65f838cd5..148d0317a1b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q90.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q90.plan
@@ -51,7 +51,7 @@ Sort
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_HOUR, 16), <=(T_HOUR, +(16, 1)))
+ predicate: SEARCH(T_HOUR, Sarg[[16..17]])
fieldNames: [T_TIME_SK, T_HOUR]
est: (rows=21600)
Exchange
@@ -103,7 +103,7 @@ Sort
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_HOUR, 9), <=(T_HOUR, +(9, 1)))
+ predicate: SEARCH(T_HOUR, Sarg[[9..10]])
fieldNames: [T_TIME_SK, T_HOUR]
est: (rows=21600)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q90_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q90_colocated.plan
index cd65f838cd5..148d0317a1b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q90_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q90_colocated.plan
@@ -51,7 +51,7 @@ Sort
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_HOUR, 16), <=(T_HOUR, +(16, 1)))
+ predicate: SEARCH(T_HOUR, Sarg[[16..17]])
fieldNames: [T_TIME_SK, T_HOUR]
est: (rows=21600)
Exchange
@@ -103,7 +103,7 @@ Sort
est: (rows=21600)
TableScan
table: PUBLIC.TIME_DIM
- predicate: AND(>=(T_HOUR, 9), <=(T_HOUR, +(9, 1)))
+ predicate: SEARCH(T_HOUR, Sarg[[9..10]])
fieldNames: [T_TIME_SK, T_HOUR]
est: (rows=21600)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q91.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q91.plan
index 8e2e35120cd..b6de4803bd0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q91.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q91.plan
@@ -56,7 +56,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -7.00)
+ predicate: =(CA_GMT_OFFSET, -7.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q91_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q91_colocated.plan
index 8e2e35120cd..b6de4803bd0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q91_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q91_colocated.plan
@@ -56,7 +56,7 @@ Sort
est: (rows=16650)
TableScan
table: PUBLIC.CUSTOMER_ADDRESS
- predicate: =(CAST(CA_GMT_OFFSET):DECIMAL(12, 2), -7.00)
+ predicate: =(CA_GMT_OFFSET, -7.00)
fieldNames: [CA_ADDRESS_SK, CA_GMT_OFFSET]
est: (rows=16650)
HashJoin
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan
index dd8367471cc..19f203693cf 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan
@@ -43,7 +43,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-12..2001-06-10]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -99,6 +99,6 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-12..2001-06-10]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan
index dd8367471cc..19f203693cf 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan
@@ -43,7 +43,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-12..2001-06-10]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
@@ -99,6 +99,6 @@ Sort
est: (rows=239555)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2001-03-12..2001-06-10]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan
index 3ffd77615bf..59d06400bb8 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan
@@ -66,7 +66,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-04-01..1999-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan
index 3ffd77615bf..59d06400bb8 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan
@@ -66,7 +66,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[1999-04-01..1999-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan
index f48a8b08424..badec824169 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-04-01), <=(D_DATE, +(2002-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-04-01..2002-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
HashJoin
@@ -50,7 +50,7 @@ Sort
HashJoin
predicate: =(WS_ORDER_NUMBER, WR_ORDER_NUMBER)
type: inner
- est: (rows=9016888221786429000)
+ est: (rows=9016888221786429400)
Exchange
distribution: single
est: (rows=719384)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan
index f48a8b08424..badec824169 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-04-01), <=(D_DATE, +(2002-04-01, *(60, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-04-01..2002-05-31]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
HashJoin
@@ -50,7 +50,7 @@ Sort
HashJoin
predicate: =(WS_ORDER_NUMBER, WR_ORDER_NUMBER)
type: inner
- est: (rows=9016888221786429000)
+ est: (rows=9016888221786429400)
Exchange
distribution: single
est: (rows=719384)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q97.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q97.plan
index 593e8cf2951..65b00fcbe6f 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q97.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q97.plan
@@ -39,7 +39,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1190), <=(D_MONTH_SEQ, +(1190, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1190..1201]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
ColocatedHashAggregate
@@ -66,6 +66,6 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1190), <=(D_MONTH_SEQ, +(1190, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1190..1201]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q97_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q97_colocated.plan
index 593e8cf2951..65b00fcbe6f 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q97_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q97_colocated.plan
@@ -39,7 +39,7 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1190), <=(D_MONTH_SEQ, +(1190, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1190..1201]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
ColocatedHashAggregate
@@ -66,6 +66,6 @@ Limit
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1190), <=(D_MONTH_SEQ, +(1190, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1190..1201]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan
index 144a59f82c8..f8dcac76fd0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan
@@ -34,7 +34,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-01-05), <=(D_DATE, +(2002-01-05, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-01-05..2002-02-04]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan
index 144a59f82c8..f8dcac76fd0 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan
@@ -34,7 +34,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_DATE, 2002-01-05), <=(D_DATE, +(2002-01-05, *(30, 86400000:INTERVAL DAY))))
+ predicate: SEARCH(D_DATE, Sarg[[2002-01-05..2002-02-04]])
fieldNames: [D_DATE_SK, D_DATE]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan
index 4f9da7b2141..a2e0190149c 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1178), <=(D_MONTH_SEQ, +(1178, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1178..1189]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan
index 4f9da7b2141..a2e0190149c 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan
@@ -39,7 +39,7 @@ Sort
est: (rows=18262)
TableScan
table: PUBLIC.DATE_DIM
- predicate: AND(>=(D_MONTH_SEQ, 1178), <=(D_MONTH_SEQ, +(1178, 11)))
+ predicate: SEARCH(D_MONTH_SEQ, Sarg[[1178..1189]])
fieldNames: [D_DATE_SK, D_MONTH_SEQ]
est: (rows=18262)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q1.plan b/modules/sql-engine/src/test/resources/tpch/plan/q1.plan
index cef36ac555f..b02872e4192 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q1.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q1.plan
@@ -26,8 +26,8 @@ Sort
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: <=(L_SHIPDATE, -(1998-12-01, 7776000000:INTERVAL DAY))
- searchBounds: [RangeBounds [lowerBound=null, upperBound=-(1998-12-01, 7776000000:INTERVAL DAY), lowerInclude=true, upperInclude=true]]
+ predicate: <=(L_SHIPDATE, 1998-09-02)
+ searchBounds: [RangeBounds [lowerBound=null, upperBound=1998-09-02, lowerInclude=true, upperInclude=true]]
fieldNames: [L_RETURNFLAG, L_LINESTATUS, L_QUANTITY, L_EXTENDEDPRICE, $f4, $f5, L_DISCOUNT]
projection: [L_RETURNFLAG, L_LINESTATUS, L_QUANTITY, L_EXTENDEDPRICE, *(L_EXTENDEDPRICE, -(1, L_DISCOUNT)), *(*(L_EXTENDEDPRICE, -(1, L_DISCOUNT)), +(1, L_TAX)), L_DISCOUNT]
collation: []
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q10.plan b/modules/sql-engine/src/test/resources/tpch/plan/q10.plan
index 4216b309933..6f29f765957 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q10.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q10.plan
@@ -38,8 +38,8 @@ Sort
table: PUBLIC.ORDERS
index: O_OD
type: SORTED
- predicate: AND(>=(O_ORDERDATE, 1993-10-01), <(O_ORDERDATE, +(1993-10-01, 3:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1993-10-01, upperBound=+(1993-10-01, 3:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(O_ORDERDATE, Sarg[[1993-10-01..1994-01-01)])
+ searchBounds: [RangeBounds [lowerBound=1993-10-01, upperBound=1994-01-01, lowerInclude=true, upperInclude=false]]
fieldNames: [O_ORDERKEY, O_CUSTKEY, O_ORDERDATE]
collation: [O_ORDERDATE ASC]
est: (rows=375000)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q12.plan b/modules/sql-engine/src/test/resources/tpch/plan/q12.plan
index bcdce222bc9..29bc0681476 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q12.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q12.plan
@@ -33,8 +33,8 @@ Sort
table: PUBLIC.LINEITEM
index: L_RD
type: SORTED
- predicate: AND(SEARCH(L_SHIPMODE, Sarg[_UTF-8'MAIL':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'SHIP':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8"), <(L_COMMITDATE, L_RECEIPTDATE), <(L_SHIPDATE, L_COMMITDATE), >=(L_RECEIPTDATE, 1994-01-01), <(L_RECEIPTDATE, +(1994-01-01, 12:INTERVAL YEAR)))
- searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=+(1994-01-01, 12:INTERVAL YEAR), lowerInclude=true, upperInclude=false]]
+ predicate: AND(SEARCH(L_SHIPMODE, Sarg[_UTF-8'MAIL':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'SHIP':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8"), <(L_COMMITDATE, L_RECEIPTDATE), <(L_SHIPDATE, L_COMMITDATE), SEARCH(L_RECEIPTDATE, Sarg[[1994-01-01..1995-01-01)]))
+ searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=1995-01-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_ORDERKEY, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPMODE]
collation: [L_RECEIPTDATE ASC]
est: (rows=213218)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q14.plan b/modules/sql-engine/src/test/resources/tpch/plan/q14.plan
index 5cebbfda13b..d5736b1f4a6 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q14.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q14.plan
@@ -32,8 +32,8 @@ Project
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: AND(>=(L_SHIPDATE, 1995-09-01), <(L_SHIPDATE, +(1995-09-01, 1:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1995-09-01, upperBound=+(1995-09-01, 1:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(L_SHIPDATE, Sarg[[1995-09-01..1995-10-01)])
+ searchBounds: [RangeBounds [lowerBound=1995-09-01, upperBound=1995-10-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_PARTKEY, L_EXTENDEDPRICE, L_DISCOUNT, L_SHIPDATE]
collation: [L_SHIPDATE ASC]
est: (rows=1500304)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q15.plan b/modules/sql-engine/src/test/resources/tpch/plan/q15.plan
index 017394068de..8c938265136 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q15.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q15.plan
@@ -30,8 +30,8 @@ Project
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: AND(>=(L_SHIPDATE, 1996-01-01), <(L_SHIPDATE, +(1996-01-01, 3:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1996-01-01, upperBound=+(1996-01-01, 3:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(L_SHIPDATE, Sarg[[1996-01-01..1996-04-01)])
+ searchBounds: [RangeBounds [lowerBound=1996-01-01, upperBound=1996-04-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_SUPPKEY, $f1]
projection: [L_SUPPKEY, *(L_EXTENDEDPRICE, -(1, L_DISCOUNT))]
collation: []
@@ -62,8 +62,8 @@ Project
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: AND(>=(L_SHIPDATE, 1996-01-01), <(L_SHIPDATE, +(1996-01-01, 3:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1996-01-01, upperBound=+(1996-01-01, 3:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(L_SHIPDATE, Sarg[[1996-01-01..1996-04-01)])
+ searchBounds: [RangeBounds [lowerBound=1996-01-01, upperBound=1996-04-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_SUPPKEY, $f1]
projection: [L_SUPPKEY, *(L_EXTENDEDPRICE, -(1, L_DISCOUNT))]
collation: []
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q19.plan b/modules/sql-engine/src/test/resources/tpch/plan/q19.plan
index 8e6d9345f34..62d9eebb6d3 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q19.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q19.plan
@@ -16,19 +16,19 @@ ReduceSortAggregate
Project
fieldNames: [$f0]
projection: [*(L_EXTENDEDPRICE, -(1, L_DISCOUNT))]
- est: (rows=12)
+ est: (rows=3)
HashJoin
- predicate: AND(=(P_PARTKEY, L_PARTKEY), OR(=(P_PARTKEY, L_PARTKEY), =(P_BRAND, _UTF-8'Brand#34')), OR(=(P_PARTKEY, L_PARTKEY), SEARCH(P_CONTAINER, Sarg[_UTF-8'LG BOX':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG CASE':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PACK':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PKG':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8")), OR(=(P_PARTKEY, L_PARTKEY), >=(L_QUANTITY, 20.00)), OR(=(P_PARTKEY, L_PARTKEY), <=(L_QUAN [...]
+ predicate: AND(=(P_PARTKEY, L_PARTKEY), OR(=(P_PARTKEY, L_PARTKEY), =(P_BRAND, _UTF-8'Brand#34')), OR(=(P_PARTKEY, L_PARTKEY), SEARCH(P_CONTAINER, Sarg[_UTF-8'LG BOX':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG CASE':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PACK':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PKG':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8")), OR(=(P_PARTKEY, L_PARTKEY), SEARCH(L_QUANTITY, Sarg[[20.00:DECIMAL(15, 2)..30.00:DECIMAL( [...]
type: inner
- est: (rows=12)
+ est: (rows=3)
Exchange
distribution: table PUBLIC.PART in zone "Default" by [L_PARTKEY]
- est: (rows=33720)
+ est: (rows=9584)
TableScan
table: PUBLIC.LINEITEM
- predicate: AND(>=(L_QUANTITY, 1.00), OR(<=(L_QUANTITY, CAST(+(1, 10)):DECIMAL(15, 2) NOT NULL), >=(L_QUANTITY, 10.00)), OR(<=(L_QUANTITY, CAST(+(1, 10)):DECIMAL(15, 2) NOT NULL), >=(L_QUANTITY, 10.00), <=(L_QUANTITY, CAST(+(20, 10)):DECIMAL(15, 2) NOT NULL)), OR(<=(L_QUANTITY, CAST(+(1, 10)):DECIMAL(15, 2) NOT NULL), >=(L_QUANTITY, 10.00), SEARCH(L_SHIPMODE, Sarg[_UTF-8'AIR':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'AIR REG':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) [...]
+ predicate: AND(SEARCH(L_QUANTITY, Sarg[[1.00:DECIMAL(15, 2)..30.00:DECIMAL(15, 2)]]:DECIMAL(15, 2)), OR(SEARCH(L_QUANTITY, Sarg[[1.00:DECIMAL(15, 2)..20.00:DECIMAL(15, 2)]]:DECIMAL(15, 2)), SEARCH(L_SHIPMODE, Sarg[_UTF-8'AIR':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'AIR REG':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8")), OR(SEARCH(L_QUANTITY, Sarg[[1.00:DECIMAL(15, 2)..11.00:DECIMAL(15, 2)], [20.00:DECIMAL(15, 2)..30.00:DECIMAL(15, 2)]]:DECIMAL(1 [...]
fieldNames: [L_PARTKEY, L_QUANTITY, L_EXTENDEDPRICE, L_DISCOUNT, L_SHIPINSTRUCT, L_SHIPMODE]
- est: (rows=33720)
+ est: (rows=9584)
TableScan
table: PUBLIC.PART
predicate: AND(SEARCH(P_BRAND, Sarg[_UTF-8'Brand#12', _UTF-8'Brand#23', _UTF-8'Brand#34']:CHAR(8) CHARACTER SET "UTF-8"), OR(SEARCH(P_BRAND, Sarg[_UTF-8'Brand#12', _UTF-8'Brand#23']:CHAR(8) CHARACTER SET "UTF-8"), SEARCH(P_CONTAINER, Sarg[_UTF-8'LG BOX':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG CASE':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PACK':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'LG PKG':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8")), [...]
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q20.plan b/modules/sql-engine/src/test/resources/tpch/plan/q20.plan
index 1ae1d025ca2..01ea48efb0c 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q20.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q20.plan
@@ -90,7 +90,7 @@ Project
table: PUBLIC.LINEITEM
index: L_SK_PK
type: SORTED
- predicate: AND(=(L_PARTKEY, $cor2.PS_PARTKEY), =(L_SUPPKEY, $cor2.PS_SUPPKEY), >=(L_SHIPDATE, 1994-01-01), <(L_SHIPDATE, +(1994-01-01, 12:INTERVAL YEAR)))
+ predicate: AND(=(L_PARTKEY, $cor2.PS_PARTKEY), =(L_SUPPKEY, $cor2.PS_SUPPKEY), SEARCH(L_SHIPDATE, Sarg[[1994-01-01..1995-01-01)]))
searchBounds: [ExactBounds [bound=$cor2.PS_SUPPKEY], ExactBounds [bound=$cor2.PS_PARTKEY]]
fieldNames: [L_QUANTITY]
collation: []
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q4.plan b/modules/sql-engine/src/test/resources/tpch/plan/q4.plan
index d56b1fadb6a..96df505592a 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q4.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q4.plan
@@ -23,8 +23,8 @@ ColocatedSortAggregate
table: PUBLIC.ORDERS
index: O_OD
type: SORTED
- predicate: AND(>=(O_ORDERDATE, 1993-07-01), <(O_ORDERDATE, +(1993-07-01, 3:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1993-07-01, upperBound=+(1993-07-01, 3:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(O_ORDERDATE, Sarg[[1993-07-01..1993-10-01)])
+ searchBounds: [RangeBounds [lowerBound=1993-07-01, upperBound=1993-10-01, lowerInclude=true, upperInclude=false]]
fieldNames: [O_ORDERKEY, O_ORDERPRIORITY]
collation: []
est: (rows=375000)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q5.plan b/modules/sql-engine/src/test/resources/tpch/plan/q5.plan
index c6dc504bd6c..affc1cdd968 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q5.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q5.plan
@@ -34,7 +34,7 @@ Sort
est: (rows=375000)
TableScan
table: PUBLIC.ORDERS
- predicate: AND(>=(O_ORDERDATE, 1994-01-01), <(O_ORDERDATE, +(1994-01-01, 12:INTERVAL YEAR)))
+ predicate: SEARCH(O_ORDERDATE, Sarg[[1994-01-01..1995-01-01)])
fieldNames: [O_ORDERKEY, O_CUSTKEY, O_ORDERDATE]
est: (rows=375000)
Exchange
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q6.plan b/modules/sql-engine/src/test/resources/tpch/plan/q6.plan
index 5c06c113a23..92727f32c24 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q6.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q6.plan
@@ -17,8 +17,8 @@ ReduceSortAggregate
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: AND(>=(L_SHIPDATE, 1994-01-01), <(L_SHIPDATE, +(1994-01-01, 12:INTERVAL YEAR)), >=(L_DISCOUNT, -(0.06:DECIMAL(3, 2), 0.01:DECIMAL(3, 2))), <=(L_DISCOUNT, +(0.06:DECIMAL(3, 2), 0.01:DECIMAL(3, 2))), <(L_QUANTITY, 24.00))
- searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=+(1994-01-01, 12:INTERVAL YEAR), lowerInclude=true, upperInclude=false]]
+ predicate: AND(SEARCH(L_SHIPDATE, Sarg[[1994-01-01..1995-01-01)]), SEARCH(L_DISCOUNT, Sarg[[0.05:DECIMAL(4, 2)..0.07:DECIMAL(4, 2)]]:DECIMAL(4, 2)), <(L_QUANTITY, 24.00))
+ searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=1995-01-01, lowerInclude=true, upperInclude=false]]
fieldNames: [$f0]
projection: [*(L_EXTENDEDPRICE, L_DISCOUNT)]
collation: []
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/variant_q12.plan b/modules/sql-engine/src/test/resources/tpch/plan/variant_q12.plan
index ceec8c2d548..ad7e07a6aca 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/variant_q12.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/variant_q12.plan
@@ -33,8 +33,8 @@ Sort
table: PUBLIC.LINEITEM
index: L_RD
type: SORTED
- predicate: AND(SEARCH(L_SHIPMODE, Sarg[_UTF-8'MAIL':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'SHIP':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8"), <(L_COMMITDATE, L_RECEIPTDATE), <(L_SHIPDATE, L_COMMITDATE), >=(L_RECEIPTDATE, 1994-01-01), <(L_RECEIPTDATE, +(1994-01-01, 12:INTERVAL YEAR)))
- searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=+(1994-01-01, 12:INTERVAL YEAR), lowerInclude=true, upperInclude=false]]
+ predicate: AND(SEARCH(L_SHIPMODE, Sarg[_UTF-8'MAIL':VARCHAR(10) CHARACTER SET "UTF-8", _UTF-8'SHIP':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(10) CHARACTER SET "UTF-8"), <(L_COMMITDATE, L_RECEIPTDATE), <(L_SHIPDATE, L_COMMITDATE), SEARCH(L_RECEIPTDATE, Sarg[[1994-01-01..1995-01-01)]))
+ searchBounds: [RangeBounds [lowerBound=1994-01-01, upperBound=1995-01-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_ORDERKEY, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPMODE]
collation: [L_RECEIPTDATE ASC]
est: (rows=213218)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/variant_q14.plan b/modules/sql-engine/src/test/resources/tpch/plan/variant_q14.plan
index 95e1a8ce010..5b2362f73e2 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/variant_q14.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/variant_q14.plan
@@ -32,8 +32,8 @@ Project
table: PUBLIC.LINEITEM
index: L_SD
type: SORTED
- predicate: AND(>=(L_SHIPDATE, 1995-09-01), <(L_SHIPDATE, +(1995-09-01, 1:INTERVAL MONTH)))
- searchBounds: [RangeBounds [lowerBound=1995-09-01, upperBound=+(1995-09-01, 1:INTERVAL MONTH), lowerInclude=true, upperInclude=false]]
+ predicate: SEARCH(L_SHIPDATE, Sarg[[1995-09-01..1995-10-01)])
+ searchBounds: [RangeBounds [lowerBound=1995-09-01, upperBound=1995-10-01, lowerInclude=true, upperInclude=false]]
fieldNames: [L_PARTKEY, L_EXTENDEDPRICE, L_DISCOUNT, L_SHIPDATE]
collation: [L_SHIPDATE ASC]
est: (rows=1500304)