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

jooger 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 d90255b5bbe ignite-27446 Extended string and literals in union (#7297)
d90255b5bbe is described below

commit d90255b5bbe47c336e81e0bb93987dafa6c4bdf2
Author: ygerzhedovich <[email protected]>
AuthorDate: Mon Dec 29 16:37:52 2025 +0200

    ignite-27446 Extended string and literals in union (#7297)
---
 RELEASE.md                                         |   7 +-
 .../aggregate/group/test_group_by_distinct.test    |  16 +-
 .../sql/group1/function/generic/test_coalesce.test |  15 +
 .../function/generic/test_coalesce.test_ignore     |  15 -
 .../sql/group1/function/generic/test_decode.test   |   8 +-
 .../function/generic/test_decode.test_ignore       |  20 -
 .../sql/group1/set/test_basic_union.test           |  12 +
 .../internal/sql/engine/type/IgniteTypeSystem.java |   5 +
 .../planner/AbstractTpcQueryPlannerTest.java       |  80 +++-
 .../sql/engine/planner/TpcdsQueryPlannerTest.java  |  59 +--
 .../sql/engine/planner/TpchQueryPlannerTest.java   |  28 +-
 .../src/test/resources/tpcds/plan/q13.plan         |   6 +-
 .../src/test/resources/tpcds/plan/q14.plan         | 441 +++++++++++----------
 .../src/test/resources/tpcds/plan/q34.plan         |   2 +-
 .../src/test/resources/tpcds/plan/q41.plan         |   2 +-
 .../src/test/resources/tpcds/plan/q5.plan          |  99 ++---
 .../src/test/resources/tpcds/plan/q71.plan         |   2 +-
 .../src/test/resources/tpcds/plan/q73.plan         |   2 +-
 .../src/test/resources/tpcds/plan/q76.plan         |  53 +--
 .../src/test/resources/tpcds/plan/q77.plan         | 117 +++---
 .../src/test/resources/tpcds/plan/q80.plan         | 111 +++---
 .../src/test/resources/tpcds/plan/q85.plan         |   6 +-
 .../src/test/resources/tpch/plan/q12.plan          |   2 +-
 .../src/test/resources/tpch/plan/q7.plan           |   4 +-
 .../src/test/resources/tpch/plan/variant_q12.plan  |   2 +-
 .../ignite/tests/docker/ItDockerConfigTest.java    |   2 +-
 26 files changed, 562 insertions(+), 554 deletions(-)

diff --git a/RELEASE.md b/RELEASE.md
index 333e6a37c2e..8aba2c359bf 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -103,15 +103,14 @@ For all the commands going forward:
    ```
    cp packaging/build/release/* {dist.dev}/{version}-rc{rc}
    ```
-15. Check for ignite.version.full (TODO 
[IGNITE-IGNITE-26834](https://issues.apache.org/jira/browse/IGNITE-26834)), 
remove this step if it will be done automatically through gradle task.
-16. Commit ZIP and DEB\RPM packages:
+15. Commit ZIP and DEB\RPM packages:
    ```
    cd {dist.dev}
    svn add {version}-rc{rc}
    svn commit -m “Apache Ignite {version} RC{rc}”
    ``` 
-17. Put the release on a vote on the developers mailing list.
-18. If vote is passed - send appropriate message for dev-list, otherwise apply 
appropriate changes, don't forget to move `git tag` if there are code related 
changes `git tag -d {version}-rc{rc}; git tag -a {version}-rc{rc} -m 
'{version}-rc{rc}'; git push --tags`.
+16. Put the release on a vote on the developers mailing list.
+17. If vote is passed - send appropriate message for dev-list, otherwise apply 
appropriate changes, don't forget to move `git tag` if there are code related 
changes `git tag -d {version}-rc{rc}; git tag -a {version}-rc{rc} -m 
'{version}-rc{rc}'; git push --tags`.
 
 ## Finalizing the Release
 
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/aggregate/group/test_group_by_distinct.test
 
b/modules/sql-engine/src/integrationTest/sql/group1/aggregate/group/test_group_by_distinct.test
index caf5146ee35..6c86c23f062 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/aggregate/group/test_group_by_distinct.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/group1/aggregate/group/test_group_by_distinct.test
@@ -45,24 +45,24 @@ SELECT val FROM ( VALUES (1), (1.0::REAL), (2::DOUBLE), 
(1.5::REAL), (2::DECIMAL
 1.5
 2.0
 
-# NOTE: Results include trailing whitespace
+# NOTE: Results don't include trailing whitespace
 query I rowsort
 SELECT val FROM ( VALUES ('abc'), ('ed'), ('f') ) t(val) GROUP BY DISTINCT 
GROUPING SETS ((val), (val))
 ----
 abc
-ed 
-f  
+ed
+f
 
-# NOTE: Results include trailing whitespace
+# NOTE: Results don't include trailing whitespace
 query T rowsort
 SELECT val FROM ( VALUES ('abc'), ('ed'), ('f') ) t(val) GROUP BY ALL GROUPING 
SETS ((val), (val))
 ----
 abc
 abc
-ed 
-ed 
-f  
-f  
+ed
+ed
+f
+f
 
 query IT rowsort
 SELECT id, val FROM ( VALUES ('c4a0327c-44be-416d-ae90-75c05079789f'::UUID, 
1), ('367fc6f1-40c3-4237-8545-3fd102d29134'::UUID, 2) ) t(val, id) GROUP BY ALL 
GROUPING SETS ((val, id), (id, val))
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test
 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test
index 637aa8caa67..43bf10bee30 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test
@@ -4,6 +4,21 @@
 
 # COALESCE
 
+query T
+SELECT COALESCE(null, null, 'first', 'second', null)
+----
+first
+
+query T
+SELECT COALESCE(COALESCE(null::varchar, 'world'), 'blabla')
+----
+world
+
+query I
+SELECT COALESCE('a', 'aa')
+----
+a
+
 query T
 SELECT COALESCE(null, DATE '2021-07-08', DATE '2020-01-01')
 ----
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test_ignore
 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test_ignore
deleted file mode 100644
index ded9835e6d7..00000000000
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_coalesce.test_ignore
+++ /dev/null
@@ -1,15 +0,0 @@
-# name: test/sql/function/generic/test_coalesce.test
-# description: Test COALESCE function
-# group: [generic]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-15080
-
-# COALESCE
-query T
-SELECT COALESCE(null, null, 'first', 'second', null)
-----
-first
-
-query T
-SELECT COALESCE(COALESCE(null, 'world'), 'blabla')
-----
-world
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test
 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test
index 9da7f4c8822..ee1a7e95be9 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test
@@ -4,21 +4,21 @@
 
 
 query I
-SELECT DECODE(102, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hew','BALL')
+SELECT DECODE(102, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
 ----
 GRIDGAIN
 
 query T
-SELECT DECODE(108, 101, 'IBM', 102, 'GRI', 103, 'Hew','BALL')
+SELECT DECODE(108, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
 ----
 BALL
 
 query T
-SELECT DECODE(NULL, 101, 'IBM', 102, 'GRI', 103, 'Hew','BALL')
+SELECT DECODE(NULL, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
 ----
 BALL
 
 query T
-SELECT DECODE(108, 101, 'IBM', 102, 'GRI', 103, 'Hew')
+SELECT DECODE(108, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard')
 ----
 NULL
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test_ignore
 
b/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test_ignore
deleted file mode 100644
index d16866f1825..00000000000
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/function/generic/test_decode.test_ignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# name: test/sql/function/generic/test_decode.test
-# description: Test DECODE function
-# group: [generic]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-15080
-
-query I
-SELECT DECODE(102, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
-----
-GRIDGAIN
-
-query T
-SELECT DECODE(108, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
-----
-BALL
-
-query T
-SELECT DECODE(NULL, 101, 'IBM', 102, 'GRIDGAIN', 103, 'Hewlett Packard','BALL')
-----
-BALL
-
diff --git 
a/modules/sql-engine/src/integrationTest/sql/group1/set/test_basic_union.test 
b/modules/sql-engine/src/integrationTest/sql/group1/set/test_basic_union.test
index d97aa61f94d..aa4131edcc4 100644
--- 
a/modules/sql-engine/src/integrationTest/sql/group1/set/test_basic_union.test
+++ 
b/modules/sql-engine/src/integrationTest/sql/group1/set/test_basic_union.test
@@ -111,6 +111,18 @@ SELECT 1.1::FLOAT AS two UNION SELECT 2 UNION ALL SELECT 
2.0::FLOAT ORDER BY 1;
 2
 2
 
+# Test Char to Varchar conversion
+query I
+SELECT 'aa' UNION ALL SELECT 'a'
+----
+aa
+a
+
+query II
+SELECT i, TYPEOF(i) FROM (SELECT 'a' i UNION ALL SELECT 'aa' i) t1 WHERE i='a'
+----
+a      VARCHAR(2)
+
 # Implicit type coercion for set operation should not happen 
 
 statement error: Type mismatch in column 1 of UNION
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeSystem.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeSystem.java
index 3246adecbda..ecedf164489 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeSystem.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeSystem.java
@@ -275,4 +275,9 @@ public class IgniteTypeSystem extends RelDataTypeSystemImpl 
{
 
         return null;
     }
+
+    /** {@inheritDoc} */
+    @Override public boolean shouldConvertRaggedUnionTypesToVarying() {
+        return true;
+    }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractTpcQueryPlannerTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractTpcQueryPlannerTest.java
index 345c36d24c2..c7c5b8a17b7 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractTpcQueryPlannerTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/AbstractTpcQueryPlannerTest.java
@@ -33,6 +33,8 @@ import java.lang.annotation.Target;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
@@ -62,7 +64,7 @@ abstract class AbstractTpcQueryPlannerTest extends 
AbstractPlannerTest {
 
     private static Function<String, String> queryLoader;
     private static Function<String, String> planLoader;
-    private static @Nullable BiConsumer<String, String> planUpdater;
+    private static @Nullable BiConsumer<String, String[]> planUpdater;
 
     @BeforeAll
     static void startCluster(TestInfo info) throws NoSuchMethodException {
@@ -78,7 +80,7 @@ abstract class AbstractTpcQueryPlannerTest extends 
AbstractPlannerTest {
         Method planLoaderMethod = 
testClass.getDeclaredMethod(suiteInfo.planLoader(), String.class); 
 
         if (!nullOrBlank(suiteInfo.planUpdater())) {
-            Method planUpdaterMethod = 
testClass.getDeclaredMethod(suiteInfo.planUpdater(), String.class, 
String.class);
+            Method planUpdaterMethod = 
testClass.getDeclaredMethod(suiteInfo.planUpdater(), String.class, 
String[].class);
 
             planUpdater = (queryId, newPlan) -> invoke(planUpdaterMethod, 
queryId, newPlan);
         }
@@ -111,6 +113,12 @@ abstract class AbstractTpcQueryPlannerTest extends 
AbstractPlannerTest {
         TestNode node = CLUSTER.node("N1");
 
         List<QueryPlan> plans = node.prepareScript(queryLoader.apply(queryId));
+        String[] actualPlans = 
plans.stream().map(ExplainablePlan.class::cast).map(ExplainablePlan::explain).toArray(String[]::new);
+
+        if (planUpdater != null) {
+            planUpdater.accept(queryId, actualPlans);
+            return;
+        }
 
         String[] expectedPlans = 
planLoader.apply(queryId).split("----(\\r\\n|\\n|\\r)");
 
@@ -119,16 +127,7 @@ abstract class AbstractTpcQueryPlannerTest extends 
AbstractPlannerTest {
 
         int pos = 0;
 
-        for (QueryPlan plan : plans) {
-            ExplainablePlan plan0 = (ExplainablePlan) plan;
-            String actualPlan = plan0.explain();
-
-            if (planUpdater != null) {
-                planUpdater.accept(queryId, actualPlan);
-
-                return;
-            }
-
+        for (String actualPlan : actualPlans) {
             String expectedPlan = expectedPlans[pos++];
 
             // Internally, costs are represented by double values and 
conversion to exact numeric representation
@@ -163,6 +162,63 @@ abstract class AbstractTpcQueryPlannerTest extends 
AbstractPlannerTest {
         }
     }
 
+    static void updateQueryPlan(String queryId, Path targetDirectory, 
String... newPlans) {
+        // A targetDirectory must be specified by hand when expected plans are 
generated.
+        if (targetDirectory == null) {
+            throw new RuntimeException("Please provide target directory to 
where save generated plans."
+                    + " Usually plans are kept in resource folder of tests 
within the same module.");
+        }
+
+        // variant query ends with "v"
+        boolean variant = queryId.endsWith("v");
+        int numericId;
+
+        if (variant) {
+            String idString = queryId.substring(0, queryId.length() - 1);
+            numericId = Integer.parseInt(idString);
+        } else {
+            numericId = Integer.parseInt(queryId);
+        }
+
+        Path planLocation;
+        if (variant) {
+            planLocation = 
targetDirectory.resolve(String.format("variant_q%d.plan", numericId));
+        } else {
+            planLocation = targetDirectory.resolve(String.format("q%s.plan", 
numericId));
+        }
+
+        try {
+            Files.createDirectories(targetDirectory);
+
+            String plans = String.join("----" + System.lineSeparator(), 
newPlans);
+            Files.writeString(planLocation, plans);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @SuppressWarnings("unused") // used reflectively by 
AbstractTpcQueryPlannerTest
+    static String getQueryPlan(String queryId, String testType) {
+        // variant query ends with "v"
+        boolean variant = queryId.endsWith("v");
+        int numericId;
+
+        if (variant) {
+            String idString = queryId.substring(0, queryId.length() - 1);
+            numericId = Integer.parseInt(idString);
+        } else {
+            numericId = Integer.parseInt(queryId);
+        }
+
+        if (variant) {
+            var variantQueryFile = String.format("%s/plan/variant_q%d.plan", 
testType, numericId);
+            return loadFromResource(variantQueryFile);
+        } else {
+            var queryFile = String.format("%s/plan/q%s.plan", testType, 
numericId);
+            return loadFromResource(queryFile);
+        }
+    }
+
     @Target(TYPE)
     @Retention(RUNTIME)
     public @interface TpcSuiteInfo {
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpcdsQueryPlannerTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpcdsQueryPlannerTest.java
index 47de8692ac8..8420730b8ee 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpcdsQueryPlannerTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/TpcdsQueryPlannerTest.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.sql.engine.planner;
 import static 
org.apache.ignite.internal.sql.engine.planner.AbstractTpcQueryPlannerTest.TpcSuiteInfo;
 
 import it.unimi.dsi.fastutil.ints.IntSet;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import org.apache.ignite.internal.sql.engine.util.tpcds.TpcdsHelper;
 import org.apache.ignite.internal.sql.engine.util.tpcds.TpcdsTables;
@@ -35,8 +34,10 @@ import org.junitpioneer.jupiter.params.IntRangeSource;
         tables = TpcdsTables.class,
         queryLoader = "getQueryString",
         planLoader = "getQueryPlan"
+//            , planUpdater = "updateQueryPlan" // uncomment the line to 
regenerate plans
 )
 public class TpcdsQueryPlannerTest extends AbstractTpcQueryPlannerTest {
+    private static final String TEST_TYPE = "tpcds";
 
     private static final IntSet UNSUPPORTED_TESTS = IntSet.of(
             // TODO https://issues.apache.org/jira/browse/IGNITE-14642 Support 
STDDEV_SAMP function and unmute tests.
@@ -60,60 +61,12 @@ public class TpcdsQueryPlannerTest extends 
AbstractTpcQueryPlannerTest {
 
     @SuppressWarnings("unused") // used reflectively by 
AbstractTpcQueryPlannerTest
     static String getQueryPlan(String queryId) {
-        // variant query ends with "v"
-        boolean variant = queryId.endsWith("v");
-        int numericId;
-
-        if (variant) {
-            String idString = queryId.substring(0, queryId.length() - 1);
-            numericId = Integer.parseInt(idString);
-        } else {
-            numericId = Integer.parseInt(queryId);
-        }
-
-        if (variant) {
-            var variantQueryFile = 
String.format("tpcds/plan/variant_q%d.plan", numericId);
-            return loadFromResource(variantQueryFile);
-        } else {
-            var queryFile = String.format("tpcds/plan/q%s.plan", numericId);
-
-            return loadFromResource(queryFile);
-        }
+        return getQueryPlan(queryId, TEST_TYPE);
     }
 
     @SuppressWarnings("unused") // used reflectively by 
AbstractTpcQueryPlannerTest
-    static void updateQueryPlan(String queryId, String newPlan) {
-        Path targetDirectory = null;
-
-        // A targetDirectory must be specified by hand when expected plans are 
generated. 
-        //noinspection ConstantValue 
-        if (targetDirectory == null) {
-            throw new RuntimeException("Please provide target directory to 
where save generated plans." 
-                    + " Usually plans are kept in resource folder of tests 
within the same module.");
-        }
-
-        // variant query ends with "v"
-        boolean variant = queryId.endsWith("v");
-        int numericId;
-
-        if (variant) {
-            String idString = queryId.substring(0, queryId.length() - 1);
-            numericId = Integer.parseInt(idString);
-        } else {
-            numericId = Integer.parseInt(queryId);
-        }
-
-        Path planLocation;
-        if (variant) {
-            planLocation = 
targetDirectory.resolve(String.format("variant_q%d.plan", numericId));
-        } else {
-            planLocation = targetDirectory.resolve(String.format("q%s.plan", 
numericId));
-        }
-
-        try {
-            Files.writeString(planLocation, newPlan);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
+    static void updateQueryPlan(String queryId, String... newPlans) {
+        Path targetDirectory = Path.of("./src/test/resources", TEST_TYPE, 
"plan");
+        updateQueryPlan(queryId, targetDirectory, newPlans);
     }
 }
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 90dd5ccd27f..45b178a5864 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
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.planner;
 
 import static 
org.apache.ignite.internal.sql.engine.planner.AbstractTpcQueryPlannerTest.TpcSuiteInfo;
 
+import java.nio.file.Path;
 import org.apache.ignite.internal.sql.engine.util.tpch.TpchHelper;
 import org.apache.ignite.internal.sql.engine.util.tpch.TpchTables;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -33,8 +34,11 @@ import org.junit.jupiter.params.provider.ValueSource;
         tables = TpchTables.class,
         queryLoader = "getQueryString",
         planLoader = "getQueryPlan"
+//        , planUpdater = "updateQueryPlan" // uncomment the line to 
regenerate plans
 )
 public class TpchQueryPlannerTest extends AbstractTpcQueryPlannerTest {
+    private static final String TEST_TYPE = "tpch";
+
     @ParameterizedTest
     @ValueSource(strings = {
             "1", "2", "3", "4", "5", "6", "7", "8", "8v", "9", "10", "11", 
"12", "12v",
@@ -51,28 +55,12 @@ public class TpchQueryPlannerTest extends 
AbstractTpcQueryPlannerTest {
 
     @SuppressWarnings("unused") // used reflectively by 
AbstractTpcQueryPlannerTest
     static String getQueryPlan(String queryId) {
-        // variant query ends with "v"
-        boolean variant = queryId.endsWith("v");
-        int numericId;
-
-        if (variant) {
-            String idString = queryId.substring(0, queryId.length() - 1);
-            numericId = Integer.parseInt(idString);
-        } else {
-            numericId = Integer.parseInt(queryId);
-        }
-
-        if (variant) {
-            var variantQueryFile = String.format("tpch/plan/variant_q%d.plan", 
numericId);
-            return loadFromResource(variantQueryFile);
-        } else {
-            var queryFile = String.format("tpch/plan/q%s.plan", numericId);
-            return loadFromResource(queryFile);
-        }
+        return getQueryPlan(queryId, TEST_TYPE);
     }
 
     @SuppressWarnings("unused") // used reflectively by 
AbstractTpcQueryPlannerTest
-    static void updateQueryPlan(String queryId, String newPlan) {
-        TpcdsQueryPlannerTest.updateQueryPlan(queryId, newPlan);
+    static void updateQueryPlan(String queryId, String... newPlans) {
+        Path targetDirectory = Path.of("./src/test/resources", TEST_TYPE, 
"plan");
+        updateQueryPlan(queryId, targetDirectory, newPlans);
     }
 }
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q13.plan 
b/modules/sql-engine/src/test/resources/tpcds/plan/q13.plan
index a36cb344a60..a35030cf0b5 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q13.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q13.plan
@@ -12,7 +12,7 @@ ColocatedHashAggregate
         type: inner
         est: (rows=55)
       HashJoin
-          predicate: AND(=(SS_HDEMO_SK, HD_DEMO_SK), OR(=(SS_HDEMO_SK, 
HD_DEMO_SK), =(CD_DEMO_SK, SS_CDEMO_SK)), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
=(CD_MARITAL_STATUS, _UTF-8'D')), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
=(CD_EDUCATION_STATUS, _UTF-8'Primary')), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
SEARCH(SS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(SS_HDEMO_SK, HD_DEMO_SK), =(HD_DEP_COUNT, 1)), 
OR(=(SS_HDEMO_SK, HD_DEMO_SK), =(CD_DEMO_SK, SS_CDEMO_SK), =(CD_MAR [...]
+          predicate: AND(=(SS_HDEMO_SK, HD_DEMO_SK), OR(=(SS_HDEMO_SK, 
HD_DEMO_SK), =(CD_DEMO_SK, SS_CDEMO_SK)), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
=(CD_MARITAL_STATUS, _UTF-8'D')), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
=(CD_EDUCATION_STATUS, _UTF-8'Primary')), OR(=(SS_HDEMO_SK, HD_DEMO_SK), 
SEARCH(SS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(SS_HDEMO_SK, HD_DEMO_SK), =(HD_DEP_COUNT, 1)), 
OR(=(SS_HDEMO_SK, HD_DEMO_SK), =(CD_DEMO_SK, SS_CDEMO_SK), =(CD_MAR [...]
           type: inner
           est: (rows=55)
         Exchange
@@ -48,7 +48,7 @@ ColocatedHashAggregate
                   fieldNames: [CA_ADDRESS_SK, CA_STATE, CA_COUNTRY]
                   est: (rows=12138)
             HashJoin
-                predicate: AND(=(CD_DEMO_SK, SS_CDEMO_SK), OR(=(CD_DEMO_SK, 
SS_CDEMO_SK), =(CD_MARITAL_STATUS, _UTF-8'D')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), 
=(CD_EDUCATION_STATUS, _UTF-8'Primary')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), 
SEARCH(SS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(CD_DEMO_SK, SS_CDEMO_SK), =(CD_MARITAL_STATUS, 
_UTF-8'W')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'D', _UTF-8'W']:CHAR(1) CHARACTER SET "U [...]
+                predicate: AND(=(CD_DEMO_SK, SS_CDEMO_SK), OR(=(CD_DEMO_SK, 
SS_CDEMO_SK), =(CD_MARITAL_STATUS, _UTF-8'D')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), 
=(CD_EDUCATION_STATUS, _UTF-8'Primary')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), 
SEARCH(SS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(CD_DEMO_SK, SS_CDEMO_SK), =(CD_MARITAL_STATUS, 
_UTF-8'W')), OR(=(CD_DEMO_SK, SS_CDEMO_SK), SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'D', _UTF-8'W']:CHAR(1) CHARACTER SET "U [...]
                 type: inner
                 est: (rows=2461)
               Exchange
@@ -64,7 +64,7 @@ ColocatedHashAggregate
                   est: (rows=37512)
                 TableScan
                     table: PUBLIC.CUSTOMER_DEMOGRAPHICS
-                    predicate: AND(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', 
_UTF-8'U', _UTF-8'W']:CHAR(1) CHARACTER SET "UTF-8"), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'U', _UTF-8'W']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'Primary')), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', _UTF-8'U']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'College')), OR(=(CD_MARITAL_STATUS, 
_UTF-8'U'), SEARCH(CD_EDUCATION_STATUS, Sarg[_UTF-8'College', _UTF-8'Primary' 
[...]
+                    predicate: AND(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', 
_UTF-8'U', _UTF-8'W']:CHAR(1) CHARACTER SET "UTF-8"), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'U', _UTF-8'W']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'Primary')), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', _UTF-8'U']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'College')), OR(=(CD_MARITAL_STATUS, 
_UTF-8'U'), SEARCH(CD_EDUCATION_STATUS, Sarg[_UTF-8'College', _UTF-8'Primary' 
[...]
                     fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, 
CD_EDUCATION_STATUS]
                     est: (rows=37512)
       Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q14.plan 
b/modules/sql-engine/src/test/resources/tpcds/plan/q14.plan
index 091a5fca4cc..e3e03b08d40 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q14.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q14.plan
@@ -11,7 +11,7 @@ Sort
     UnionAll
         est: (rows=136403)
       Project
-          projection: [CAST(CHANNEL):CHAR(7) CHARACTER SET "UTF-8" NOT NULL, 
I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, NUMBER_SALES]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, NUMBER_SALES]
           est: (rows=77935)
         Project
             fieldNames: [CHANNEL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
SALES, NUMBER_SALES]
@@ -283,275 +283,278 @@ Sort
                                   fieldNames: [D_DATE_SK, D_YEAR]
                                   est: (rows=18262)
       Project
-          fieldNames: [CHANNEL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, 
NUMBER_SALES]
-          projection: [_UTF-8'catalog', I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
SALES, NUMBER_SALES]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, NUMBER_SALES]
           est: (rows=39004)
-        NestedLoopJoin
-            predicate: >(CAST(SALES):DECIMAL(48, 16), 
CAST(AVERAGE_SALES):DECIMAL(48, 16))
-            type: inner
+        Project
+            fieldNames: [CHANNEL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
SALES, NUMBER_SALES]
+            projection: [_UTF-8'catalog', I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID, SALES, NUMBER_SALES]
             est: (rows=39004)
-          ColocatedHashAggregate
-              fieldNames: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, 
NUMBER_SALES]
-              group: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID]
-              aggregation: [SUM($f3), COUNT()]
-              est: (rows=78008)
-            Project
-                fieldNames: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, $f3]
-                projection: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
*(CS_QUANTITY, CS_LIST_PRICE)]
-                est: (rows=159852)
-              HashJoin
-                  predicate: =(CS_ITEM_SK, I_ITEM_SK)
-                  type: inner
+          NestedLoopJoin
+              predicate: >(CAST(SALES):DECIMAL(48, 16), 
CAST(AVERAGE_SALES):DECIMAL(48, 16))
+              type: inner
+              est: (rows=39004)
+            ColocatedHashAggregate
+                fieldNames: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, 
NUMBER_SALES]
+                group: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID]
+                aggregation: [SUM($f3), COUNT()]
+                est: (rows=78008)
+              Project
+                  fieldNames: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, $f3]
+                  projection: [I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
*(CS_QUANTITY, CS_LIST_PRICE)]
                   est: (rows=159852)
                 HashJoin
-                    predicate: =(CS_ITEM_SK, SS_ITEM_SK)
+                    predicate: =(CS_ITEM_SK, I_ITEM_SK)
                     type: inner
                     est: (rows=159852)
                   HashJoin
-                      predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                      predicate: =(CS_ITEM_SK, SS_ITEM_SK)
                       type: inner
                       est: (rows=159852)
-                    Exchange
-                        distribution: single
-                        est: (rows=1441548)
-                      TableScan
-                          table: PUBLIC.CATALOG_SALES
-                          fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, 
CS_QUANTITY, CS_LIST_PRICE]
+                    HashJoin
+                        predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                        type: inner
+                        est: (rows=159852)
+                      Exchange
+                          distribution: single
                           est: (rows=1441548)
-                    Exchange
-                        distribution: single
-                        est: (rows=8100)
-                      TableScan
-                          table: PUBLIC.DATE_DIM
-                          predicate: AND(=(D_YEAR, 2002), =(D_MOY, 11))
-                          fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+                        TableScan
+                            table: PUBLIC.CATALOG_SALES
+                            fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, 
CS_QUANTITY, CS_LIST_PRICE]
+                            est: (rows=1441548)
+                      Exchange
+                          distribution: single
                           est: (rows=8100)
-                  ColocatedSortAggregate
-                      collation: [SS_ITEM_SK ASC]
-                      group: [SS_ITEM_SK]
-                      aggregation: []
-                      est: (rows=1092564)
-                    Project
-                        fieldNames: [SS_ITEM_SK]
-                        projection: [I_ITEM_SK]
-                        est: (rows=5462822)
-                      HashJoin
-                          predicate: AND(=(I_BRAND_ID, BRAND_ID), 
=(I_CLASS_ID, CLASS_ID), =(I_CATEGORY_ID, CATEGORY_ID))
-                          type: inner
+                        TableScan
+                            table: PUBLIC.DATE_DIM
+                            predicate: AND(=(D_YEAR, 2002), =(D_MOY, 11))
+                            fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+                            est: (rows=8100)
+                    ColocatedSortAggregate
+                        collation: [SS_ITEM_SK ASC]
+                        group: [SS_ITEM_SK]
+                        aggregation: []
+                        est: (rows=1092564)
+                      Project
+                          fieldNames: [SS_ITEM_SK]
+                          projection: [I_ITEM_SK]
                           est: (rows=5462822)
-                        Exchange
-                            distribution: single
-                            est: (rows=18000)
-                          Sort
-                              collation: [I_ITEM_SK ASC]
+                        HashJoin
+                            predicate: AND(=(I_BRAND_ID, BRAND_ID), 
=(I_CLASS_ID, CLASS_ID), =(I_CATEGORY_ID, CATEGORY_ID))
+                            type: inner
+                            est: (rows=5462822)
+                          Exchange
+                              distribution: single
                               est: (rows=18000)
-                            TableScan
-                                table: PUBLIC.ITEM
-                                fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
+                            Sort
+                                collation: [I_ITEM_SK ASC]
                                 est: (rows=18000)
-                        ColocatedIntersect
-                            all: false
-                            est: (rows=89923)
-                          Project
-                              fieldNames: [BRAND_ID, CLASS_ID, CATEGORY_ID]
-                              projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
-                              est: (rows=720101)
-                            HashJoin
-                                predicate: =(SS_ITEM_SK, I_ITEM_SK)
-                                type: inner
+                              TableScan
+                                  table: PUBLIC.ITEM
+                                  fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
+                                  est: (rows=18000)
+                          ColocatedIntersect
+                              all: false
+                              est: (rows=89923)
+                            Project
+                                fieldNames: [BRAND_ID, CLASS_ID, CATEGORY_ID]
+                                projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
                                 est: (rows=720101)
                               HashJoin
-                                  predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+                                  predicate: =(SS_ITEM_SK, I_ITEM_SK)
                                   type: inner
                                   est: (rows=720101)
-                                Exchange
-                                    distribution: single
-                                    est: (rows=2880404)
-                                  TableScan
-                                      table: PUBLIC.STORE_SALES
-                                      fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK]
+                                HashJoin
+                                    predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+                                    type: inner
+                                    est: (rows=720101)
+                                  Exchange
+                                      distribution: single
                                       est: (rows=2880404)
+                                    TableScan
+                                        table: PUBLIC.STORE_SALES
+                                        fieldNames: [SS_SOLD_DATE_SK, 
SS_ITEM_SK]
+                                        est: (rows=2880404)
+                                  Exchange
+                                      distribution: single
+                                      est: (rows=18262)
+                                    TableScan
+                                        table: PUBLIC.DATE_DIM
+                                        predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
+                                        fieldNames: [D_DATE_SK, D_YEAR]
+                                        est: (rows=18262)
                                 Exchange
                                     distribution: single
-                                    est: (rows=18262)
-                                  TableScan
-                                      table: PUBLIC.DATE_DIM
-                                      predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
-                                      fieldNames: [D_DATE_SK, D_YEAR]
-                                      est: (rows=18262)
-                              Exchange
-                                  distribution: single
-                                  est: (rows=18000)
-                                TableScan
-                                    table: PUBLIC.ITEM
-                                    fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
                                     est: (rows=18000)
-                          Project
-                              fieldNames: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
-                              projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
-                              est: (rows=360387)
-                            HashJoin
-                                predicate: =(CS_ITEM_SK, I_ITEM_SK)
-                                type: inner
+                                  TableScan
+                                      table: PUBLIC.ITEM
+                                      fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
+                                      est: (rows=18000)
+                            Project
+                                fieldNames: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
+                                projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
                                 est: (rows=360387)
                               HashJoin
-                                  predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                                  predicate: =(CS_ITEM_SK, I_ITEM_SK)
                                   type: inner
                                   est: (rows=360387)
-                                Exchange
-                                    distribution: single
-                                    est: (rows=1441548)
-                                  TableScan
-                                      table: PUBLIC.CATALOG_SALES
-                                      fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK]
+                                HashJoin
+                                    predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                                    type: inner
+                                    est: (rows=360387)
+                                  Exchange
+                                      distribution: single
                                       est: (rows=1441548)
+                                    TableScan
+                                        table: PUBLIC.CATALOG_SALES
+                                        fieldNames: [CS_SOLD_DATE_SK, 
CS_ITEM_SK]
+                                        est: (rows=1441548)
+                                  Exchange
+                                      distribution: single
+                                      est: (rows=18262)
+                                    TableScan
+                                        table: PUBLIC.DATE_DIM
+                                        predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
+                                        fieldNames: [D_DATE_SK, D_YEAR]
+                                        est: (rows=18262)
                                 Exchange
                                     distribution: single
-                                    est: (rows=18262)
-                                  TableScan
-                                      table: PUBLIC.DATE_DIM
-                                      predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
-                                      fieldNames: [D_DATE_SK, D_YEAR]
-                                      est: (rows=18262)
-                              Exchange
-                                  distribution: single
-                                  est: (rows=18000)
-                                TableScan
-                                    table: PUBLIC.ITEM
-                                    fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
                                     est: (rows=18000)
-                          Project
-                              fieldNames: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
-                              projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
-                              est: (rows=179846)
-                            HashJoin
-                                predicate: =(WS_ITEM_SK, I_ITEM_SK)
-                                type: inner
+                                  TableScan
+                                      table: PUBLIC.ITEM
+                                      fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
+                                      est: (rows=18000)
+                            Project
+                                fieldNames: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
+                                projection: [I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
                                 est: (rows=179846)
                               HashJoin
-                                  predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+                                  predicate: =(WS_ITEM_SK, I_ITEM_SK)
                                   type: inner
                                   est: (rows=179846)
-                                Exchange
-                                    distribution: single
-                                    est: (rows=719384)
-                                  TableScan
-                                      table: PUBLIC.WEB_SALES
-                                      fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK]
+                                HashJoin
+                                    predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+                                    type: inner
+                                    est: (rows=179846)
+                                  Exchange
+                                      distribution: single
                                       est: (rows=719384)
+                                    TableScan
+                                        table: PUBLIC.WEB_SALES
+                                        fieldNames: [WS_SOLD_DATE_SK, 
WS_ITEM_SK]
+                                        est: (rows=719384)
+                                  Exchange
+                                      distribution: single
+                                      est: (rows=18262)
+                                    TableScan
+                                        table: PUBLIC.DATE_DIM
+                                        predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
+                                        fieldNames: [D_DATE_SK, D_YEAR]
+                                        est: (rows=18262)
                                 Exchange
                                     distribution: single
-                                    est: (rows=18262)
-                                  TableScan
-                                      table: PUBLIC.DATE_DIM
-                                      predicate: SEARCH(D_YEAR, 
Sarg[[2000..2002]])
-                                      fieldNames: [D_DATE_SK, D_YEAR]
-                                      est: (rows=18262)
-                              Exchange
-                                  distribution: single
-                                  est: (rows=18000)
-                                TableScan
-                                    table: PUBLIC.ITEM
-                                    fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
                                     est: (rows=18000)
-                Exchange
-                    distribution: single
-                    est: (rows=18000)
-                  TableScan
-                      table: PUBLIC.ITEM
-                      fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
+                                  TableScan
+                                      table: PUBLIC.ITEM
+                                      fieldNames: [I_ITEM_SK, I_BRAND_ID, 
I_CLASS_ID, I_CATEGORY_ID]
+                                      est: (rows=18000)
+                  Exchange
+                      distribution: single
                       est: (rows=18000)
-          Project
-              fieldNames: [AVERAGE_SALES]
-              projection: [CASE(=(CAST(f0_0):DECIMAL(34, 2), 0:DECIMAL(38, 
0)), null:DECIMAL(31, 16), DECIMAL_DIVIDE(CAST(f0_0):DECIMAL(34, 2), f1_1, 31, 
16))]
-              est: (rows=1)
-            ReduceSortAggregate
-                fieldNames: [f0_0, f1_1]
-                collation: []
-                group: []
-                aggregation: [SUM(0), $SUM0(1)]
+                    TableScan
+                        table: PUBLIC.ITEM
+                        fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, 
I_CATEGORY_ID]
+                        est: (rows=18000)
+            Project
+                fieldNames: [AVERAGE_SALES]
+                projection: [CASE(=(CAST(f0_0):DECIMAL(34, 2), 0:DECIMAL(38, 
0)), null:DECIMAL(31, 16), DECIMAL_DIVIDE(CAST(f0_0):DECIMAL(34, 2), f1_1, 31, 
16))]
                 est: (rows=1)
-              Project
-                  fieldNames: [0, 1]
-                  projection: [CAST(_ACC0):DECIMAL(68, 2), 
CAST(_ACC1):DECIMAL(38, 0) NOT NULL]
+              ReduceSortAggregate
+                  fieldNames: [f0_0, f1_1]
+                  collation: []
+                  group: []
+                  aggregation: [SUM(0), $SUM0(1)]
                   est: (rows=1)
-                Exchange
-                    distribution: single
+                Project
+                    fieldNames: [0, 1]
+                    projection: [CAST(_ACC0):DECIMAL(68, 2), 
CAST(_ACC1):DECIMAL(38, 0) NOT NULL]
                     est: (rows=1)
-                  MapSortAggregate
-                      fieldNames: [_ACC0, _ACC1]
-                      collation: []
-                      group: []
-                      aggregation: [SUM($f0), COUNT($f0)]
+                  Exchange
+                      distribution: single
                       est: (rows=1)
-                    Project
-                        fieldNames: [$f0]
-                        projection: [*(QUANTITY, LIST_PRICE)]
-                        est: (rows=1260334)
-                      UnionAll
+                    MapSortAggregate
+                        fieldNames: [_ACC0, _ACC1]
+                        collation: []
+                        group: []
+                        aggregation: [SUM($f0), COUNT($f0)]
+                        est: (rows=1)
+                      Project
+                          fieldNames: [$f0]
+                          projection: [*(QUANTITY, LIST_PRICE)]
                           est: (rows=1260334)
-                        Project
-                            fieldNames: [QUANTITY, LIST_PRICE]
-                            projection: [SS_QUANTITY, SS_LIST_PRICE]
-                            est: (rows=720101)
-                          HashJoin
-                              predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
-                              type: inner
+                        UnionAll
+                            est: (rows=1260334)
+                          Project
+                              fieldNames: [QUANTITY, LIST_PRICE]
+                              projection: [SS_QUANTITY, SS_LIST_PRICE]
                               est: (rows=720101)
-                            Exchange
-                                distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [SS_SOLD_DATE_SK]
-                                est: (rows=2880404)
-                              TableScan
-                                  table: PUBLIC.STORE_SALES
-                                  fieldNames: [SS_SOLD_DATE_SK, SS_QUANTITY, 
SS_LIST_PRICE]
+                            HashJoin
+                                predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+                                type: inner
+                                est: (rows=720101)
+                              Exchange
+                                  distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [SS_SOLD_DATE_SK]
                                   est: (rows=2880404)
-                            TableScan
-                                table: PUBLIC.DATE_DIM
-                                predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
-                                fieldNames: [D_DATE_SK, D_YEAR]
-                                est: (rows=18262)
-                        Project
-                            fieldNames: [QUANTITY, LIST_PRICE]
-                            projection: [CS_QUANTITY, CS_LIST_PRICE]
-                            est: (rows=360387)
-                          HashJoin
-                              predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
-                              type: inner
-                              est: (rows=360387)
-                            Exchange
-                                distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [CS_SOLD_DATE_SK]
-                                est: (rows=1441548)
+                                TableScan
+                                    table: PUBLIC.STORE_SALES
+                                    fieldNames: [SS_SOLD_DATE_SK, SS_QUANTITY, 
SS_LIST_PRICE]
+                                    est: (rows=2880404)
                               TableScan
-                                  table: PUBLIC.CATALOG_SALES
-                                  fieldNames: [CS_SOLD_DATE_SK, CS_QUANTITY, 
CS_LIST_PRICE]
+                                  table: PUBLIC.DATE_DIM
+                                  predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
+                                  fieldNames: [D_DATE_SK, D_YEAR]
+                                  est: (rows=18262)
+                          Project
+                              fieldNames: [QUANTITY, LIST_PRICE]
+                              projection: [CS_QUANTITY, CS_LIST_PRICE]
+                              est: (rows=360387)
+                            HashJoin
+                                predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                                type: inner
+                                est: (rows=360387)
+                              Exchange
+                                  distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [CS_SOLD_DATE_SK]
                                   est: (rows=1441548)
-                            TableScan
-                                table: PUBLIC.DATE_DIM
-                                predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
-                                fieldNames: [D_DATE_SK, D_YEAR]
-                                est: (rows=18262)
-                        Project
-                            fieldNames: [QUANTITY, LIST_PRICE]
-                            projection: [WS_QUANTITY, WS_LIST_PRICE]
-                            est: (rows=179846)
-                          HashJoin
-                              predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
-                              type: inner
-                              est: (rows=179846)
-                            Exchange
-                                distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [WS_SOLD_DATE_SK]
-                                est: (rows=719384)
+                                TableScan
+                                    table: PUBLIC.CATALOG_SALES
+                                    fieldNames: [CS_SOLD_DATE_SK, CS_QUANTITY, 
CS_LIST_PRICE]
+                                    est: (rows=1441548)
                               TableScan
-                                  table: PUBLIC.WEB_SALES
-                                  fieldNames: [WS_SOLD_DATE_SK, WS_QUANTITY, 
WS_LIST_PRICE]
+                                  table: PUBLIC.DATE_DIM
+                                  predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
+                                  fieldNames: [D_DATE_SK, D_YEAR]
+                                  est: (rows=18262)
+                          Project
+                              fieldNames: [QUANTITY, LIST_PRICE]
+                              projection: [WS_QUANTITY, WS_LIST_PRICE]
+                              est: (rows=179846)
+                            HashJoin
+                                predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+                                type: inner
+                                est: (rows=179846)
+                              Exchange
+                                  distribution: table PUBLIC.DATE_DIM in zone 
"Default" by [WS_SOLD_DATE_SK]
                                   est: (rows=719384)
-                            TableScan
-                                table: PUBLIC.DATE_DIM
-                                predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
-                                fieldNames: [D_DATE_SK, D_YEAR]
-                                est: (rows=18262)
+                                TableScan
+                                    table: PUBLIC.WEB_SALES
+                                    fieldNames: [WS_SOLD_DATE_SK, WS_QUANTITY, 
WS_LIST_PRICE]
+                                    est: (rows=719384)
+                              TableScan
+                                  table: PUBLIC.DATE_DIM
+                                  predicate: SEARCH(D_YEAR, Sarg[[2000..2002]])
+                                  fieldNames: [D_DATE_SK, D_YEAR]
+                                  est: (rows=18262)
       Project
-          projection: [CAST(CHANNEL):CHAR(7) CHARACTER SET "UTF-8" NOT NULL, 
I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, NUMBER_SALES]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, SALES, NUMBER_SALES]
           est: (rows=19464)
         Project
             fieldNames: [CHANNEL, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, 
SALES, NUMBER_SALES]
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 453b72f8be1..5ba6d0e38ec 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q34.plan
@@ -52,7 +52,7 @@ Sort
                       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), CASE(>(HD_VEHICLE_COUNT, 0), 
>(/(HD_DEP_COUNT, HD_VEHICLE_COUNT), 1), false))
+                        predicate: AND(SEARCH(HD_BUY_POTENTIAL, 
Sarg[_UTF-8'>10000':VARCHAR(7) CHARACTER SET "UTF-8", 
_UTF-8'Unknown':VARCHAR(7) CHARACTER SET "UTF-8"]:VARCHAR(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=512)
                 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 1c00faad04e..b0bec47c2a1 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q41.plan
@@ -47,6 +47,6 @@ Sort
                     est: (rows=1)
                   TableScan
                       table: PUBLIC.ITEM
-                      predicate: OR(AND(=(I_MANUFACT, $cor2.I_MANUFACT), 
OR(AND(=(I_CATEGORY, _UTF-8'Women'), SEARCH(I_COLOR, Sarg[_UTF-8'frosted', 
_UTF-8'rose':CHAR(7) CHARACTER SET "UTF-8"]:CHAR(7) CHARACTER SET "UTF-8"), 
SEARCH(I_UNITS, Sarg[_UTF-8'Gross', _UTF-8'Lb':CHAR(5) CHARACTER SET 
"UTF-8"]:CHAR(5) CHARACTER SET "UTF-8"), SEARCH(I_SIZE, 
Sarg[_UTF-8'large':CHAR(6) CHARACTER SET "UTF-8", _UTF-8'medium']:CHAR(6) 
CHARACTER SET "UTF-8")), AND(=(I_CATEGORY, _UTF-8'Women'), SEARCH(I_C [...]
+                      predicate: OR(AND(=(I_MANUFACT, $cor2.I_MANUFACT), 
OR(AND(=(I_CATEGORY, _UTF-8'Women'), SEARCH(I_COLOR, 
Sarg[_UTF-8'frosted':VARCHAR(7) CHARACTER SET "UTF-8", _UTF-8'rose':VARCHAR(7) 
CHARACTER SET "UTF-8"]:VARCHAR(7) CHARACTER SET "UTF-8"), SEARCH(I_UNITS, 
Sarg[_UTF-8'Gross':VARCHAR(5) CHARACTER SET "UTF-8", _UTF-8'Lb':VARCHAR(5) 
CHARACTER SET "UTF-8"]:VARCHAR(5) CHARACTER SET "UTF-8"), SEARCH(I_SIZE, 
Sarg[_UTF-8'large':VARCHAR(6) CHARACTER SET "UTF-8", _UTF-8'mediu [...]
                       fieldNames: [I_CATEGORY, I_MANUFACT, I_SIZE, I_COLOR, 
I_UNITS]
                       est: (rows=1499)
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 eb5c691920e..e53bfee7f3b 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
@@ -10,7 +10,7 @@ Sort
     UnionAll
         est: (rows=1532000739400)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
           est: (rows=3124078767)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
@@ -70,64 +70,67 @@ Sort
                         fieldNames: [S_STORE_SK, S_STORE_ID]
                         est: (rows=12)
       Project
-          fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
-          projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', 
CP_CATALOG_PAGE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, ID, SALES, RETURNS, PROFIT]
           est: (rows=1526926163852)
-        ColocatedHashAggregate
-            fieldNames: [CP_CATALOG_PAGE_ID, SALES, PROFIT, RETURNS, 
PROFIT_LOSS]
-            group: [CP_CATALOG_PAGE_ID]
-            aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), 
SUM(NET_LOSS)]
+        Project
+            fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+            projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', 
CP_CATALOG_PAGE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
             est: (rows=1526926163852)
-          Project
-              fieldNames: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
-              projection: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
-              est: (rows=7634630819261)
-            MergeJoin
-                predicate: =(PAGE_SK, CP_CATALOG_PAGE_SK)
-                type: inner
+          ColocatedHashAggregate
+              fieldNames: [CP_CATALOG_PAGE_ID, SALES, PROFIT, RETURNS, 
PROFIT_LOSS]
+              group: [CP_CATALOG_PAGE_ID]
+              aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), 
SUM(NET_LOSS)]
+              est: (rows=1526926163852)
+            Project
+                fieldNames: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
+                projection: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
                 est: (rows=7634630819261)
-              HashJoin
-                  predicate: =(DATE_SK, D_DATE_SK)
+              MergeJoin
+                  predicate: =(PAGE_SK, CP_CATALOG_PAGE_SK)
                   type: inner
-                  est: (rows=4343534630)
-                Exchange
-                    distribution: single
-                    est: (rows=1585615)
-                  Sort
-                      collation: [PAGE_SK ASC]
+                  est: (rows=7634630819261)
+                HashJoin
+                    predicate: =(DATE_SK, D_DATE_SK)
+                    type: inner
+                    est: (rows=4343534630)
+                  Exchange
+                      distribution: single
                       est: (rows=1585615)
-                    UnionAll
+                    Sort
+                        collation: [PAGE_SK ASC]
                         est: (rows=1585615)
-                      TableScan
-                          table: PUBLIC.CATALOG_SALES
-                          fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
-                          projection: [CS_CATALOG_PAGE_SK, CS_SOLD_DATE_SK, 
CS_EXT_SALES_PRICE, CS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
-                          est: (rows=1441548)
-                      TableScan
-                          table: PUBLIC.CATALOG_RETURNS
-                          fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, 
RETURN_AMT, NET_LOSS]
-                          projection: [CR_CATALOG_PAGE_SK, 
CR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), CR_RETURN_AMOUNT, 
CR_NET_LOSS]
-                          est: (rows=144067)
+                      UnionAll
+                          est: (rows=1585615)
+                        TableScan
+                            table: PUBLIC.CATALOG_SALES
+                            fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, 
PROFIT, RETURN_AMT, NET_LOSS]
+                            projection: [CS_CATALOG_PAGE_SK, CS_SOLD_DATE_SK, 
CS_EXT_SALES_PRICE, CS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+                            est: (rows=1441548)
+                        TableScan
+                            table: PUBLIC.CATALOG_RETURNS
+                            fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, 
PROFIT, RETURN_AMT, NET_LOSS]
+                            projection: [CR_CATALOG_PAGE_SK, 
CR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), CR_RETURN_AMOUNT, 
CR_NET_LOSS]
+                            est: (rows=144067)
+                  Exchange
+                      distribution: single
+                      est: (rows=18262)
+                    TableScan
+                        table: PUBLIC.DATE_DIM
+                        predicate: SEARCH(D_DATE, 
Sarg[[2000-08-19..2000-09-02]])
+                        fieldNames: [D_DATE_SK, D_DATE]
+                        est: (rows=18262)
                 Exchange
                     distribution: single
-                    est: (rows=18262)
-                  TableScan
-                      table: PUBLIC.DATE_DIM
-                      predicate: SEARCH(D_DATE, Sarg[[2000-08-19..2000-09-02]])
-                      fieldNames: [D_DATE_SK, D_DATE]
-                      est: (rows=18262)
-              Exchange
-                  distribution: single
-                  est: (rows=11718)
-                Sort
-                    collation: [CP_CATALOG_PAGE_SK ASC]
                     est: (rows=11718)
-                  TableScan
-                      table: PUBLIC.CATALOG_PAGE
-                      fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+                  Sort
+                      collation: [CP_CATALOG_PAGE_SK ASC]
                       est: (rows=11718)
+                    TableScan
+                        table: PUBLIC.CATALOG_PAGE
+                        fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+                        est: (rows=11718)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
           est: (rows=1950496781)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q71.plan 
b/modules/sql-engine/src/test/resources/tpcds/plan/q71.plan
index 0a883f12da7..7535f4ebced 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q71.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q71.plan
@@ -22,7 +22,7 @@ Sort
               est: (rows=49116)
             TableScan
                 table: PUBLIC.TIME_DIM
-                predicate: SEARCH(T_MEAL_TIME, Sarg[_UTF-8'breakfast', 
_UTF-8'dinner':CHAR(9) CHARACTER SET "UTF-8"]:CHAR(9) CHARACTER SET "UTF-8")
+                predicate: SEARCH(T_MEAL_TIME, 
Sarg[_UTF-8'breakfast':VARCHAR(9) CHARACTER SET "UTF-8", 
_UTF-8'dinner':VARCHAR(9) CHARACTER SET "UTF-8"]:VARCHAR(9) CHARACTER SET 
"UTF-8")
                 fieldNames: [T_TIME_SK, T_HOUR, T_MINUTE, T_MEAL_TIME]
                 est: (rows=49116)
           HashJoin
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 eb5090aad76..9d7678e9ec8 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q73.plan
@@ -52,7 +52,7 @@ Sort
                       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), 1), false))
+                        predicate: AND(SEARCH(HD_BUY_POTENTIAL, 
Sarg[_UTF-8'5001-10000':VARCHAR(10) CHARACTER SET "UTF-8", 
_UTF-8'>10000':VARCHAR(10) CHARACTER SET "UTF-8"]:VARCHAR(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=512)
                 Exchange
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q76.plan 
b/modules/sql-engine/src/test/resources/tpcds/plan/q76.plan
index 27e47ea95dc..d2c0ff39e09 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q76.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q76.plan
@@ -10,7 +10,7 @@ Sort
     UnionAll
         est: (rows=1260334)
       Project
-          projection: [CAST(CHANNEL):CHAR(7) CHARACTER SET "UTF-8" NOT NULL, 
CAST(COL_NAME):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, D_YEAR, D_QOY, 
I_CATEGORY, EXT_SALES_PRICE]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, CAST(COL_NAME):VARCHAR(15) CHARACTER SET "UTF-8" NOT NULL, D_YEAR, D_QOY, 
I_CATEGORY, EXT_SALES_PRICE]
           est: (rows=720101)
         Project
             fieldNames: [CHANNEL, COL_NAME, D_YEAR, D_QOY, I_CATEGORY, 
EXT_SALES_PRICE]
@@ -47,7 +47,7 @@ Sort
                   fieldNames: [I_ITEM_SK, I_CATEGORY]
                   est: (rows=18000)
       Project
-          projection: [CAST(CHANNEL):CHAR(7) CHARACTER SET "UTF-8" NOT NULL, 
COL_NAME, D_YEAR, D_QOY, I_CATEGORY, EXT_SALES_PRICE]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, CAST(COL_NAME):VARCHAR(15) CHARACTER SET "UTF-8" NOT NULL, D_YEAR, D_QOY, 
I_CATEGORY, EXT_SALES_PRICE]
           est: (rows=179846)
         Project
             fieldNames: [CHANNEL, COL_NAME, D_YEAR, D_QOY, I_CATEGORY, 
EXT_SALES_PRICE]
@@ -84,36 +84,39 @@ Sort
                   fieldNames: [I_ITEM_SK, I_CATEGORY]
                   est: (rows=18000)
       Project
-          fieldNames: [CHANNEL, COL_NAME, D_YEAR, D_QOY, I_CATEGORY, 
EXT_SALES_PRICE]
-          projection: [_UTF-8'catalog', _UTF-8'cs_ship_mode_sk', D_YEAR, 
D_QOY, I_CATEGORY, CS_EXT_SALES_PRICE]
+          projection: [CAST(CHANNEL):VARCHAR(7) CHARACTER SET "UTF-8" NOT 
NULL, CAST(COL_NAME):VARCHAR(15) CHARACTER SET "UTF-8" NOT NULL, D_YEAR, D_QOY, 
I_CATEGORY, EXT_SALES_PRICE]
           est: (rows=360387)
-        HashJoin
-            predicate: =(CS_ITEM_SK, I_ITEM_SK)
-            type: inner
+        Project
+            fieldNames: [CHANNEL, COL_NAME, D_YEAR, D_QOY, I_CATEGORY, 
EXT_SALES_PRICE]
+            projection: [_UTF-8'catalog', _UTF-8'cs_ship_mode_sk', D_YEAR, 
D_QOY, I_CATEGORY, CS_EXT_SALES_PRICE]
             est: (rows=360387)
           HashJoin
-              predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+              predicate: =(CS_ITEM_SK, I_ITEM_SK)
               type: inner
               est: (rows=360387)
-            Exchange
-                distribution: single
+            HashJoin
+                predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                type: inner
                 est: (rows=360387)
-              TableScan
-                  table: PUBLIC.CATALOG_SALES
-                  predicate: IS NULL(CS_SHIP_MODE_SK)
-                  fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_MODE_SK, CS_ITEM_SK, 
CS_EXT_SALES_PRICE]
+              Exchange
+                  distribution: single
                   est: (rows=360387)
+                TableScan
+                    table: PUBLIC.CATALOG_SALES
+                    predicate: IS NULL(CS_SHIP_MODE_SK)
+                    fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_MODE_SK, CS_ITEM_SK, 
CS_EXT_SALES_PRICE]
+                    est: (rows=360387)
+              Exchange
+                  distribution: single
+                  est: (rows=73049)
+                TableScan
+                    table: PUBLIC.DATE_DIM
+                    fieldNames: [D_DATE_SK, D_YEAR, D_QOY]
+                    est: (rows=73049)
             Exchange
                 distribution: single
-                est: (rows=73049)
-              TableScan
-                  table: PUBLIC.DATE_DIM
-                  fieldNames: [D_DATE_SK, D_YEAR, D_QOY]
-                  est: (rows=73049)
-          Exchange
-              distribution: single
-              est: (rows=18000)
-            TableScan
-                table: PUBLIC.ITEM
-                fieldNames: [I_ITEM_SK, I_CATEGORY]
                 est: (rows=18000)
+              TableScan
+                  table: PUBLIC.ITEM
+                  fieldNames: [I_ITEM_SK, I_CATEGORY]
+                  est: (rows=18000)
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 88a6c14f5de..b0f441a4950 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
@@ -10,7 +10,7 @@ Sort
     UnionAll
         est: (rows=519378729)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(14, 2), PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(14, 2), PROFIT]
           est: (rows=144020)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
@@ -100,71 +100,74 @@ Sort
                         fieldNames: [S_STORE_SK]
                         est: (rows=12)
       Project
-          fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
-          projection: [_UTF-8'catalog channel', CS_CALL_CENTER_SK, SALES, 
RETURNS, -(PROFIT, PROFIT_LOSS)]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, ID, SALES, RETURNS, PROFIT]
           est: (rows=519198739)
-        NestedLoopJoin
-            predicate: true
-            type: inner
+        Project
+            fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+            projection: [_UTF-8'catalog channel', CS_CALL_CENTER_SK, SALES, 
RETURNS, -(PROFIT, PROFIT_LOSS)]
             est: (rows=519198739)
-          ColocatedHashAggregate
-              fieldNames: [CS_CALL_CENTER_SK, SALES, PROFIT]
-              group: [CS_CALL_CENTER_SK]
-              aggregation: [SUM(CS_EXT_SALES_PRICE), SUM(CS_NET_PROFIT)]
-              est: (rows=72077)
-            Project
-                fieldNames: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, 
CS_NET_PROFIT]
-                projection: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, 
CS_NET_PROFIT]
-                est: (rows=360387)
-              HashJoin
-                  predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
-                  type: inner
+          NestedLoopJoin
+              predicate: true
+              type: inner
+              est: (rows=519198739)
+            ColocatedHashAggregate
+                fieldNames: [CS_CALL_CENTER_SK, SALES, PROFIT]
+                group: [CS_CALL_CENTER_SK]
+                aggregation: [SUM(CS_EXT_SALES_PRICE), SUM(CS_NET_PROFIT)]
+                est: (rows=72077)
+              Project
+                  fieldNames: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, 
CS_NET_PROFIT]
+                  projection: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, 
CS_NET_PROFIT]
                   est: (rows=360387)
-                Exchange
-                    distribution: single
-                    est: (rows=1441548)
-                  TableScan
-                      table: PUBLIC.CATALOG_SALES
-                      fieldNames: [CS_SOLD_DATE_SK, CS_CALL_CENTER_SK, 
CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+                HashJoin
+                    predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                    type: inner
+                    est: (rows=360387)
+                  Exchange
+                      distribution: single
                       est: (rows=1441548)
-                Exchange
-                    distribution: single
-                    est: (rows=18262)
-                  TableScan
-                      table: PUBLIC.DATE_DIM
-                      predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
-                      fieldNames: [D_DATE_SK, D_DATE]
+                    TableScan
+                        table: PUBLIC.CATALOG_SALES
+                        fieldNames: [CS_SOLD_DATE_SK, CS_CALL_CENTER_SK, 
CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+                        est: (rows=1441548)
+                  Exchange
+                      distribution: single
                       est: (rows=18262)
-          ColocatedHashAggregate
-              fieldNames: [CR_CALL_CENTER_SK, RETURNS, PROFIT_LOSS]
-              group: [CR_CALL_CENTER_SK]
-              aggregation: [SUM(CR_RETURN_AMOUNT), SUM(CR_NET_LOSS)]
-              est: (rows=7203)
-            Project
-                fieldNames: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
-                projection: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
-                est: (rows=36017)
-              HashJoin
-                  predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
-                  type: inner
+                    TableScan
+                        table: PUBLIC.DATE_DIM
+                        predicate: SEARCH(D_DATE, 
Sarg[[2000-08-16..2000-09-15]])
+                        fieldNames: [D_DATE_SK, D_DATE]
+                        est: (rows=18262)
+            ColocatedHashAggregate
+                fieldNames: [CR_CALL_CENTER_SK, RETURNS, PROFIT_LOSS]
+                group: [CR_CALL_CENTER_SK]
+                aggregation: [SUM(CR_RETURN_AMOUNT), SUM(CR_NET_LOSS)]
+                est: (rows=7203)
+              Project
+                  fieldNames: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, 
CR_NET_LOSS]
+                  projection: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, 
CR_NET_LOSS]
                   est: (rows=36017)
-                Exchange
-                    distribution: single
-                    est: (rows=144067)
-                  TableScan
-                      table: PUBLIC.CATALOG_RETURNS
-                      fieldNames: [CR_RETURNED_DATE_SK, CR_CALL_CENTER_SK, 
CR_RETURN_AMOUNT, CR_NET_LOSS]
+                HashJoin
+                    predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
+                    type: inner
+                    est: (rows=36017)
+                  Exchange
+                      distribution: single
                       est: (rows=144067)
-                Exchange
-                    distribution: single
-                    est: (rows=18262)
-                  TableScan
-                      table: PUBLIC.DATE_DIM
-                      predicate: SEARCH(D_DATE, Sarg[[2000-08-16..2000-09-15]])
-                      fieldNames: [D_DATE_SK, D_DATE]
+                    TableScan
+                        table: PUBLIC.CATALOG_RETURNS
+                        fieldNames: [CR_RETURNED_DATE_SK, CR_CALL_CENTER_SK, 
CR_RETURN_AMOUNT, CR_NET_LOSS]
+                        est: (rows=144067)
+                  Exchange
+                      distribution: single
                       est: (rows=18262)
+                    TableScan
+                        table: PUBLIC.DATE_DIM
+                        predicate: SEARCH(D_DATE, 
Sarg[[2000-08-16..2000-09-15]])
+                        fieldNames: [D_DATE_SK, D_DATE]
+                        est: (rows=18262)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(14, 2), PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(14, 2), PROFIT]
           est: (rows=35969)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
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 0b0c1904630..1beff4cb200 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
@@ -10,7 +10,7 @@ Sort
     UnionAll
         est: (rows=41969)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
           est: (rows=23979)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
@@ -91,85 +91,88 @@ Sort
                       fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
                       est: (rows=100)
       Project
-          fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
-          projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', 
CATALOG_PAGE_ID), SALES, RETURNS, PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, ID, SALES, RETURNS, PROFIT]
           est: (rows=12001)
-        ColocatedHashAggregate
-            fieldNames: [CATALOG_PAGE_ID, SALES, RETURNS, PROFIT]
-            group: [CATALOG_PAGE_ID]
-            aggregation: [SUM(CS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+        Project
+            fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+            projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', 
CATALOG_PAGE_ID), SALES, RETURNS, PROFIT]
             est: (rows=12001)
-          Project
-              fieldNames: [CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, $f2, $f3]
-              projection: [CP_CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, CASE(IS NOT 
NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(12, 2) NOT NULL, 
0.00:DECIMAL(12, 2)), -(CS_NET_PROFIT, CASE(IS NOT NULL(CR_NET_LOSS), 
CAST(CR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
-              est: (rows=60004)
-            HashJoin
-                predicate: =(CS_PROMO_SK, P_PROMO_SK)
-                type: inner
+          ColocatedHashAggregate
+              fieldNames: [CATALOG_PAGE_ID, SALES, RETURNS, PROFIT]
+              group: [CATALOG_PAGE_ID]
+              aggregation: [SUM(CS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+              est: (rows=12001)
+            Project
+                fieldNames: [CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, $f2, $f3]
+                projection: [CP_CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, CASE(IS 
NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(12, 2) NOT NULL, 
0.00:DECIMAL(12, 2)), -(CS_NET_PROFIT, CASE(IS NOT NULL(CR_NET_LOSS), 
CAST(CR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
                 est: (rows=60004)
               HashJoin
-                  predicate: =(CS_ITEM_SK, I_ITEM_SK)
+                  predicate: =(CS_PROMO_SK, P_PROMO_SK)
                   type: inner
-                  est: (rows=180194)
+                  est: (rows=60004)
                 HashJoin
-                    predicate: =(CS_CATALOG_PAGE_SK, CP_CATALOG_PAGE_SK)
+                    predicate: =(CS_ITEM_SK, I_ITEM_SK)
                     type: inner
-                    est: (rows=360387)
+                    est: (rows=180194)
                   HashJoin
-                      predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                      predicate: =(CS_CATALOG_PAGE_SK, CP_CATALOG_PAGE_SK)
                       type: inner
                       est: (rows=360387)
                     HashJoin
-                        predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), 
=(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
-                        type: left
-                        est: (rows=1441548)
-                      Exchange
-                          distribution: single
+                        predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+                        type: inner
+                        est: (rows=360387)
+                      HashJoin
+                          predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), 
=(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+                          type: left
                           est: (rows=1441548)
-                        TableScan
-                            table: PUBLIC.CATALOG_SALES
-                            fieldNames: [CS_SOLD_DATE_SK, CS_CATALOG_PAGE_SK, 
CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+                        Exchange
+                            distribution: single
                             est: (rows=1441548)
+                          TableScan
+                              table: PUBLIC.CATALOG_SALES
+                              fieldNames: [CS_SOLD_DATE_SK, 
CS_CATALOG_PAGE_SK, CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, 
CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+                              est: (rows=1441548)
+                        Exchange
+                            distribution: single
+                            est: (rows=144067)
+                          TableScan
+                              table: PUBLIC.CATALOG_RETURNS
+                              fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, 
CR_RETURN_AMOUNT, CR_NET_LOSS]
+                              est: (rows=144067)
                       Exchange
                           distribution: single
-                          est: (rows=144067)
+                          est: (rows=18262)
                         TableScan
-                            table: PUBLIC.CATALOG_RETURNS
-                            fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, 
CR_RETURN_AMOUNT, CR_NET_LOSS]
-                            est: (rows=144067)
+                            table: PUBLIC.DATE_DIM
+                            predicate: SEARCH(D_DATE, 
Sarg[[2002-08-06..2002-09-05]])
+                            fieldNames: [D_DATE_SK, D_DATE]
+                            est: (rows=18262)
                     Exchange
                         distribution: single
-                        est: (rows=18262)
+                        est: (rows=11718)
                       TableScan
-                          table: PUBLIC.DATE_DIM
-                          predicate: SEARCH(D_DATE, 
Sarg[[2002-08-06..2002-09-05]])
-                          fieldNames: [D_DATE_SK, D_DATE]
-                          est: (rows=18262)
+                          table: PUBLIC.CATALOG_PAGE
+                          fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+                          est: (rows=11718)
                   Exchange
                       distribution: single
-                      est: (rows=11718)
+                      est: (rows=9000)
                     TableScan
-                        table: PUBLIC.CATALOG_PAGE
-                        fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
-                        est: (rows=11718)
+                        table: PUBLIC.ITEM
+                        predicate: >(I_CURRENT_PRICE, 50.00)
+                        fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+                        est: (rows=9000)
                 Exchange
                     distribution: single
-                    est: (rows=9000)
-                  TableScan
-                      table: PUBLIC.ITEM
-                      predicate: >(I_CURRENT_PRICE, 50.00)
-                      fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
-                      est: (rows=9000)
-              Exchange
-                  distribution: single
-                  est: (rows=100)
-                TableScan
-                    table: PUBLIC.PROMOTION
-                    predicate: =(P_CHANNEL_TV, _UTF-8'N')
-                    fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
                     est: (rows=100)
+                  TableScan
+                      table: PUBLIC.PROMOTION
+                      predicate: =(P_CHANNEL_TV, _UTF-8'N')
+                      fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+                      est: (rows=100)
       Project
-          projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, 
CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+          projection: [CAST(CHANNEL):VARCHAR(15) CHARACTER SET "UTF-8" NOT 
NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
           est: (rows=5989)
         Project
             fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q85.plan 
b/modules/sql-engine/src/test/resources/tpcds/plan/q85.plan
index 9e4705c4d65..9894cda19ae 100644
--- a/modules/sql-engine/src/test/resources/tpcds/plan/q85.plan
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q85.plan
@@ -41,7 +41,7 @@ Sort
                 distribution: single
                 est: (rows=2)
               HashJoin
-                  predicate: AND(=(CD_DEMO_SK, WR_RETURNING_CDEMO_SK), 
=(CD_MARITAL_STATUS$0, CD_MARITAL_STATUS), =(CD_EDUCATION_STATUS$0, 
CD_EDUCATION_STATUS), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'M', 
_UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), =(CD_MARITAL_STATUS$0, 
CD_MARITAL_STATUS)), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'M', 
_UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), =(CD_EDUCATION_STATUS$0, 
CD_EDUCATION_STATUS)), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'D', 
_UTF-8'M']:C [...]
+                  predicate: AND(=(CD_DEMO_SK, WR_RETURNING_CDEMO_SK), 
=(CD_MARITAL_STATUS$0, CD_MARITAL_STATUS), =(CD_EDUCATION_STATUS$0, 
CD_EDUCATION_STATUS), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'M', 
_UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), =(CD_MARITAL_STATUS$0, 
CD_MARITAL_STATUS)), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'M', 
_UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), =(CD_EDUCATION_STATUS$0, 
CD_EDUCATION_STATUS)), OR(SEARCH(CD_MARITAL_STATUS$0, Sarg[_UTF-8'D', 
_UTF-8'M']:C [...]
                   fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, 
CD_EDUCATION_STATUS, D_DATE_SK, D_YEAR, CA_ADDRESS_SK, CA_STATE, CA_COUNTRY, 
WS_SOLD_DATE_SK, WS_ITEM_SK, WS_WEB_PAGE_SK, WS_ORDER_NUMBER, WS_QUANTITY, 
WS_SALES_PRICE, WS_NET_PROFIT, WR_ITEM_SK, WR_REFUNDED_CDEMO_SK, 
WR_REFUNDED_ADDR_SK, WR_RETURNING_CDEMO_SK, WR_REASON_SK, WR_ORDER_NUMBER, 
WR_FEE, WR_REFUNDED_CASH, CD_DEMO_SK$0, CD_MARITAL_STATUS$0, 
CD_EDUCATION_STATUS$0]
                   type: inner
                   est: (rows=2)
@@ -77,7 +77,7 @@ Sort
                             fieldNames: [CA_ADDRESS_SK, CA_STATE, CA_COUNTRY]
                             est: (rows=12138)
                       HashJoin
-                          predicate: AND(=(WS_ITEM_SK, WR_ITEM_SK), 
=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), OR(SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), 
SEARCH(WS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(CD_MARITAL_STATUS, _UTF-8'M'), 
=(CD_EDUCATION_STATUS, _UTF-8'College'), SEARCH(WS_SALES_PRICE, 
Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 2)]]:DECIMAL(5, 2))), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8 [...]
+                          predicate: AND(=(WS_ITEM_SK, WR_ITEM_SK), 
=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), OR(SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), 
SEARCH(WS_SALES_PRICE, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 
2)]]:DECIMAL(5, 2))), OR(=(CD_MARITAL_STATUS, _UTF-8'M'), 
=(CD_EDUCATION_STATUS, _UTF-8'College'), SEARCH(WS_SALES_PRICE, 
Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 2)]]:DECIMAL(5, 2))), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8 [...]
                           type: inner
                           est: (rows=61)
                         Exchange
@@ -104,6 +104,6 @@ Sort
                               est: (rows=37512)
                             TableScan
                                 table: PUBLIC.CUSTOMER_DEMOGRAPHICS
-                                predicate: AND(SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'D', _UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'Secondary')), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', _UTF-8'M']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'College')), OR(=(CD_MARITAL_STATUS, 
_UTF-8'M'), SEARCH(CD_EDUCATION_STATUS, Sarg[_UTF-8'College':CH [...]
+                                predicate: AND(SEARCH(CD_MARITAL_STATUS, 
Sarg[_UTF-8'D', _UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET "UTF-8"), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'M', _UTF-8'S']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'Secondary')), 
OR(SEARCH(CD_MARITAL_STATUS, Sarg[_UTF-8'D', _UTF-8'M']:CHAR(1) CHARACTER SET 
"UTF-8"), =(CD_EDUCATION_STATUS, _UTF-8'College')), OR(=(CD_MARITAL_STATUS, 
_UTF-8'M'), SEARCH(CD_EDUCATION_STATUS, Sarg[_UTF-8'College':VA [...]
                                 fieldNames: [CD_DEMO_SK, CD_MARITAL_STATUS, 
CD_EDUCATION_STATUS]
                                 est: (rows=37512)
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 d6e10143d12..39b01764fdb 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q12.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q12.plan
@@ -16,7 +16,7 @@ Sort
           est: (rows=42644)
         Project
             fieldNames: [L_SHIPMODE, $f1, $f2]
-            projection: [L_SHIPMODE, CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[_UTF-8'1-URGENT', _UTF-8'2-HIGH':CHAR(8) CHARACTER SET "UTF-8"]:CHAR(8) 
CHARACTER SET "UTF-8"), 1, 0), CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[(-∞.._UTF-8'1-URGENT'), (_UTF-8'1-URGENT'.._UTF-8'2-HIGH':CHAR(8) 
CHARACTER SET "UTF-8"), (_UTF-8'2-HIGH':CHAR(8) CHARACTER SET 
"UTF-8"..+∞)]:CHAR(8) CHARACTER SET "UTF-8"), 1, 0)]
+            projection: [L_SHIPMODE, CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[_UTF-8'1-URGENT':VARCHAR(8) CHARACTER SET "UTF-8", 
_UTF-8'2-HIGH':VARCHAR(8) CHARACTER SET "UTF-8"]:VARCHAR(8) CHARACTER SET 
"UTF-8"), 1, 0), CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[(-∞.._UTF-8'1-URGENT':VARCHAR(8) CHARACTER SET "UTF-8"), 
(_UTF-8'1-URGENT':VARCHAR(8) CHARACTER SET "UTF-8".._UTF-8'2-HIGH':VARCHAR(8) 
CHARACTER SET "UTF-8"), (_UTF-8'2-HIGH':VARCHAR(8) CHARACTER SET 
"UTF-8"..+∞)]:VARCHAR(8) CHARACTER SET "UTF-8 [...]
             est: (rows=213218)
           HashJoin
               predicate: =(O_ORDERKEY, L_ORDERKEY)
diff --git a/modules/sql-engine/src/test/resources/tpch/plan/q7.plan 
b/modules/sql-engine/src/test/resources/tpch/plan/q7.plan
index 47899b5420a..76a169d217f 100644
--- a/modules/sql-engine/src/test/resources/tpch/plan/q7.plan
+++ b/modules/sql-engine/src/test/resources/tpch/plan/q7.plan
@@ -43,7 +43,7 @@ Sort
                 est: (rows=14)
               TableScan
                   table: PUBLIC.NATION
-                  predicate: SEARCH(N_NAME, Sarg[_UTF-8'FRANCE':CHAR(7) 
CHARACTER SET "UTF-8", _UTF-8'GERMANY']:CHAR(7) CHARACTER SET "UTF-8")
+                  predicate: SEARCH(N_NAME, Sarg[_UTF-8'FRANCE':VARCHAR(7) 
CHARACTER SET "UTF-8", _UTF-8'GERMANY':VARCHAR(7) CHARACTER SET 
"UTF-8"]:VARCHAR(7) CHARACTER SET "UTF-8")
                   fieldNames: [N_NATIONKEY, N_NAME]
                   est: (rows=14)
         HashJoin
@@ -73,6 +73,6 @@ Sort
                 est: (rows=14)
               TableScan
                   table: PUBLIC.NATION
-                  predicate: SEARCH(N_NAME, Sarg[_UTF-8'FRANCE':CHAR(7) 
CHARACTER SET "UTF-8", _UTF-8'GERMANY']:CHAR(7) CHARACTER SET "UTF-8")
+                  predicate: SEARCH(N_NAME, Sarg[_UTF-8'FRANCE':VARCHAR(7) 
CHARACTER SET "UTF-8", _UTF-8'GERMANY':VARCHAR(7) CHARACTER SET 
"UTF-8"]:VARCHAR(7) CHARACTER SET "UTF-8")
                   fieldNames: [N_NATIONKEY, N_NAME]
                   est: (rows=14)
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 80cae2cead0..467a725e37e 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
@@ -16,7 +16,7 @@ Sort
           est: (rows=42644)
         Project
             fieldNames: [L_SHIPMODE, $f1, $f2]
-            projection: [L_SHIPMODE, CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[_UTF-8'1-URGENT', _UTF-8'2-HIGH':CHAR(8) CHARACTER SET "UTF-8"]:CHAR(8) 
CHARACTER SET "UTF-8"), 1, 0), CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[_UTF-8'1-URGENT', _UTF-8'2-HIGH':CHAR(8) CHARACTER SET "UTF-8"]:CHAR(8) 
CHARACTER SET "UTF-8"), 0, 1)]
+            projection: [L_SHIPMODE, CASE(SEARCH(O_ORDERPRIORITY, 
Sarg[_UTF-8'1-URGENT':VARCHAR(8) CHARACTER SET "UTF-8", 
_UTF-8'2-HIGH':VARCHAR(8) CHARACTER SET "UTF-8"]:VARCHAR(8) CHARACTER SET 
"UTF-8"), 1, 0), CASE(SEARCH(O_ORDERPRIORITY, Sarg[_UTF-8'1-URGENT':VARCHAR(8) 
CHARACTER SET "UTF-8", _UTF-8'2-HIGH':VARCHAR(8) CHARACTER SET 
"UTF-8"]:VARCHAR(8) CHARACTER SET "UTF-8"), 0, 1)]
             est: (rows=213218)
           HashJoin
               predicate: =(O_ORDERKEY, L_ORDERKEY)
diff --git 
a/packaging/test/src/integrationTest/java/org/apache/ignite/tests/docker/ItDockerConfigTest.java
 
b/packaging/test/src/integrationTest/java/org/apache/ignite/tests/docker/ItDockerConfigTest.java
index f07daca8474..25def31f398 100644
--- 
a/packaging/test/src/integrationTest/java/org/apache/ignite/tests/docker/ItDockerConfigTest.java
+++ 
b/packaging/test/src/integrationTest/java/org/apache/ignite/tests/docker/ItDockerConfigTest.java
@@ -41,7 +41,7 @@ import org.testcontainers.utility.MountableFile;
 /**
  * Basic tests for Docker configuration.
  */
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-15373";)
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-27471";)
 public class ItDockerConfigTest {
     private static final String DOCKER_IMAGE = "apacheignite/ignite:latest";
     private static final int CLUSTER_SIZE = 3;


Reply via email to