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) &lt;op&gt; 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)