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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new b93e04ab66 [test](Nereids) add regression test to check join order for 
tpch queries (#18543)
b93e04ab66 is described below

commit b93e04ab666a61da8f5a233c34fe5a2a2e311897
Author: minghong <engle...@gmail.com>
AuthorDate: Wed Apr 12 15:43:21 2023 +0800

    [test](Nereids) add regression test to check join order for tpch queries 
(#18543)
    
    by explain shape plan command, with stats injection, we add regression test 
to check tpch queries' plan shape.
---
 .../doris/nereids/stats/StatsCalculator.java       |   1 +
 .../doris/statistics/StatisticsRepository.java     |   4 +-
 .../data/nereids_tpchPlanShape_p0/shape/q1.out     |  12 +
 .../data/nereids_tpchPlanShape_p0/shape/q10.out    |  27 ++
 .../data/nereids_tpchPlanShape_p0/shape/q11.out    |  39 ++
 .../data/nereids_tpchPlanShape_p0/shape/q12.out    |  16 +
 .../data/nereids_tpchPlanShape_p0/shape/q13.out    |  20 +
 .../data/nereids_tpchPlanShape_p0/shape/q14.out    |  15 +
 .../data/nereids_tpchPlanShape_p0/shape/q15.out    |  30 ++
 .../data/nereids_tpchPlanShape_p0/shape/q16.out    |  22 +
 .../data/nereids_tpchPlanShape_p0/shape/q17.out    |  20 +
 .../data/nereids_tpchPlanShape_p0/shape/q18.out    |  27 ++
 .../data/nereids_tpchPlanShape_p0/shape/q19.out    |  14 +
 .../data/nereids_tpchPlanShape_p0/shape/q2.out     |  30 ++
 .../data/nereids_tpchPlanShape_p0/shape/q20.out    |  32 ++
 .../data/nereids_tpchPlanShape_p0/shape/q21.out    |  32 ++
 .../data/nereids_tpchPlanShape_p0/shape/q22.out    |  26 ++
 .../data/nereids_tpchPlanShape_p0/shape/q3.out     |  21 +
 .../data/nereids_tpchPlanShape_p0/shape/q4.out     |  17 +
 .../data/nereids_tpchPlanShape_p0/shape/q5.out     |  35 ++
 .../data/nereids_tpchPlanShape_p0/shape/q6.out     |   9 +
 .../data/nereids_tpchPlanShape_p0/shape/q7.out     |  36 ++
 .../data/nereids_tpchPlanShape_p0/shape/q8.out     |  48 +++
 .../data/nereids_tpchPlanShape_p0/shape/q9.out     |  35 ++
 .../suites/nereids_tpchPlanShape_p0/load.groovy    | 467 +++++++++++++++++++++
 .../nereids_tpchPlanShape_p0/shape/q1.groovy       |  52 +++
 .../nereids_tpchPlanShape_p0/shape/q10.groovy      |  64 +++
 .../nereids_tpchPlanShape_p0/shape/q11.groovy      |  59 +++
 .../nereids_tpchPlanShape_p0/shape/q12.groovy      |  60 +++
 .../nereids_tpchPlanShape_p0/shape/q13.groovy      |  52 +++
 .../nereids_tpchPlanShape_p0/shape/q14.groovy      |  45 ++
 .../nereids_tpchPlanShape_p0/shape/q15.groovy      |  51 +++
 .../nereids_tpchPlanShape_p0/shape/q16.groovy      |  62 +++
 .../nereids_tpchPlanShape_p0/shape/q17.groovy      |  49 +++
 .../nereids_tpchPlanShape_p0/shape/q18.groovy      |  65 +++
 .../nereids_tpchPlanShape_p0/shape/q19.groovy      |  69 +++
 .../nereids_tpchPlanShape_p0/shape/q2.groovy       |  76 ++++
 .../nereids_tpchPlanShape_p0/shape/q20.groovy      |  70 +++
 .../nereids_tpchPlanShape_p0/shape/q21.groovy      |  72 ++++
 .../nereids_tpchPlanShape_p0/shape/q22.groovy      |  69 +++
 .../nereids_tpchPlanShape_p0/shape/q3.groovy       |  56 +++
 .../nereids_tpchPlanShape_p0/shape/q4.groovy       |  53 +++
 .../nereids_tpchPlanShape_p0/shape/q5.groovy       |  56 +++
 .../nereids_tpchPlanShape_p0/shape/q6.groovy       |  41 ++
 .../nereids_tpchPlanShape_p0/shape/q7.groovy       |  71 ++++
 .../nereids_tpchPlanShape_p0/shape/q8.groovy       |  69 +++
 .../nereids_tpchPlanShape_p0/shape/q9.groovy       |  64 +++
 47 files changed, 2359 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index 75b637890d..5be38b5dde 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -438,6 +438,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
                 columnStatisticMap.put(slotReference, cache);
                 continue;
             }
+            rowCount = Math.max(rowCount, cache.count);
             Histogram histogram = 
Env.getCurrentEnv().getStatisticsCache().getHistogram(table.getId(), colName);
             if (histogram != null) {
                 ColumnStatisticBuilder columnStatisticBuilder =
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
index 9a735cf98a..9199c74b25 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
@@ -233,7 +233,9 @@ public class StatisticsRepository {
             builder.setCount(Double.parseDouble(rowCount));
         }
         if (ndv != null) {
-            builder.setNdv(Double.parseDouble(ndv));
+            Double dNdv = Double.parseDouble(ndv);
+            builder.setNdv(dNdv);
+            builder.setOriginalNdv(dNdv);
         }
         if (nullCount != null) {
             builder.setNumNulls(Double.parseDouble(nullCount));
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q1.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q1.out
new file mode 100644
index 0000000000..00a7cf50f8
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q1.out
@@ -0,0 +1,12 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------filter((lineitem.l_shipdate <= 1998-09-02))
+----------------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q10.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q10.out
new file mode 100644
index 0000000000..5cdb232001
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q10.out
@@ -0,0 +1,27 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalTopN
+--PhysicalDistribute
+----PhysicalTopN
+------PhysicalProject
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN](lineitem.l_orderkey = orders.o_orderkey)
+------------------PhysicalProject
+--------------------filter((lineitem.l_returnflag = 'R'))
+----------------------PhysicalOlapScan[lineitem]
+------------------PhysicalDistribute
+--------------------hashJoin[INNER_JOIN](customer.c_nationkey = 
nation.n_nationkey)
+----------------------hashJoin[INNER_JOIN](customer.c_custkey = 
orders.o_custkey)
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[customer]
+------------------------PhysicalDistribute
+--------------------------PhysicalProject
+----------------------------filter((orders.o_orderdate < 
1994-01-01)(orders.o_orderdate >= 1993-10-01))
+------------------------------PhysicalOlapScan[orders]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q11.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q11.out
new file mode 100644
index 0000000000..b076fb1121
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q11.out
@@ -0,0 +1,39 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------PhysicalProject
+--------NestedLoopJoin[INNER_JOIN](value > (sum((ps_supplycost * ps_availqty)) 
* 0.000002))
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
+----------------PhysicalProject
+------------------PhysicalOlapScan[partsupp]
+----------------PhysicalDistribute
+------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[supplier]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------filter((nation.n_name = 'GERMANY'))
+--------------------------PhysicalOlapScan[nation]
+----------PhysicalDistribute
+------------PhysicalAssertNumRows
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](partsupp.ps_suppkey = 
supplier.s_suppkey)
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[partsupp]
+--------------------------PhysicalDistribute
+----------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[supplier]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((nation.n_name = 'GERMANY'))
+------------------------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q12.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q12.out
new file mode 100644
index 0000000000..6dd416cefa
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q12.out
@@ -0,0 +1,16 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN](orders.o_orderkey = lineitem.l_orderkey)
+----------------PhysicalProject
+------------------PhysicalOlapScan[orders]
+----------------PhysicalProject
+------------------filter(((lineitem.l_shipmode = 'MAIL') OR 
(lineitem.l_shipmode = 'SHIP'))(lineitem.l_shipdate < 
lineitem.l_commitdate)(lineitem.l_receiptdate < 
1995-01-01)(lineitem.l_receiptdate >= 1994-01-01)(lineitem.l_commitdate < 
lineitem.l_receiptdate))
+--------------------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q13.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q13.out
new file mode 100644
index 0000000000..6df8a92b08
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q13.out
@@ -0,0 +1,20 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashAgg[GLOBAL]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[RIGHT_OUTER_JOIN](customer.c_custkey = 
orders.o_custkey)
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------filter(( not (o_comment like '%special%requests%')))
+----------------------------PhysicalOlapScan[orders]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q14.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q14.out
new file mode 100644
index 0000000000..9ec9d4f3fa
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q14.out
@@ -0,0 +1,15 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalProject
+--hashAgg[GLOBAL]
+----PhysicalDistribute
+------hashAgg[LOCAL]
+--------PhysicalProject
+----------hashJoin[INNER_JOIN](lineitem.l_partkey = part.p_partkey)
+------------PhysicalProject
+--------------PhysicalOlapScan[part]
+------------PhysicalDistribute
+--------------PhysicalProject
+----------------filter((lineitem.l_shipdate < 1995-10-01)(lineitem.l_shipdate 
>= 1995-09-01))
+------------------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q15.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q15.out
new file mode 100644
index 0000000000..da9dd396be
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q15.out
@@ -0,0 +1,30 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------PhysicalProject
+--------hashJoin[INNER_JOIN](supplier.s_suppkey = revenue0.supplier_no)
+----------PhysicalProject
+------------PhysicalOlapScan[supplier]
+----------PhysicalDistribute
+------------hashJoin[INNER_JOIN](revenue0.total_revenue = max(total_revenue))
+--------------hashAgg[GLOBAL]
+----------------PhysicalDistribute
+------------------hashAgg[LOCAL]
+--------------------PhysicalProject
+----------------------filter((lineitem.l_shipdate >= 
1996-01-01)(lineitem.l_shipdate < 1996-04-01))
+------------------------PhysicalOlapScan[lineitem]
+--------------PhysicalDistribute
+----------------PhysicalAssertNumRows
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------filter((lineitem.l_shipdate >= 
1996-01-01)(lineitem.l_shipdate < 1996-04-01))
+------------------------------------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q16.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q16.out
new file mode 100644
index 0000000000..3b28129f40
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q16.out
@@ -0,0 +1,22 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[DISTINCT_LOCAL]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[LEFT_ANTI_JOIN](partsupp.ps_suppkey = 
supplier.s_suppkey)
+------------------hashJoin[INNER_JOIN](part.p_partkey = partsupp.ps_partkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[partsupp]
+--------------------PhysicalProject
+----------------------filter(( not (p_type like 'MEDIUM POLISHED%'))( not 
(p_brand = 'Brand#45'))p_size IN (3, 9, 14, 19, 23, 36, 45, 49))
+------------------------PhysicalOlapScan[part]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------filter((s_comment like '%Customer%Complaints%'))
+------------------------PhysicalOlapScan[supplier]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q17.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q17.out
new file mode 100644
index 0000000000..833dd1a625
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q17.out
@@ -0,0 +1,20 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalProject
+--hashAgg[GLOBAL]
+----PhysicalDistribute
+------hashAgg[LOCAL]
+--------PhysicalProject
+----------filter((cast(l_quantity as DECIMAL(27, 9)) < (avg(l_quantity) 
OVER(PARTITION BY p_partkey) * 0.200000000)))
+------------PhysicalWindow
+--------------PhysicalQuickSort
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN](part.p_partkey = lineitem.l_partkey)
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[lineitem]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------filter((part.p_container = 'MED BOX')(part.p_brand = 
'Brand#23'))
+----------------------------PhysicalOlapScan[part]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q18.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q18.out
new file mode 100644
index 0000000000..299b4bb581
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q18.out
@@ -0,0 +1,27 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalTopN
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
+--------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN](orders.o_orderkey = lineitem.l_orderkey)
+--------------PhysicalProject
+----------------PhysicalOlapScan[lineitem]
+--------------PhysicalDistribute
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN](customer.c_custkey = orders.o_custkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[customer]
+--------------------PhysicalDistribute
+----------------------hashJoin[LEFT_SEMI_JOIN](orders.o_orderkey = 
lineitem.l_orderkey)
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[orders]
+------------------------PhysicalProject
+--------------------------filter((sum(l_quantity) > 300.000000000))
+----------------------------hashAgg[GLOBAL]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q19.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q19.out
new file mode 100644
index 0000000000..f53d475bb5
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q19.out
@@ -0,0 +1,14 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+hashAgg[LOCAL]
+--PhysicalDistribute
+----PhysicalProject
+------hashJoin[INNER_JOIN](part.p_partkey = 
lineitem.l_partkey)((((((part.p_brand = 'Brand#12') AND p_container IN ('SM 
CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND ((lineitem.l_quantity >= 1.00) AND 
(lineitem.l_quantity <= 11.00))) AND (part.p_size <= 5)) OR ((((part.p_brand = 
'Brand#23') AND p_container IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')) 
AND ((lineitem.l_quantity >= 10.00) AND (lineitem.l_quantity <= 20.00))) AND 
(part.p_size <= 10))) OR ((((part.p_brand = 'Brand#34') AND  [...]
+--------PhysicalProject
+----------filter((lineitem.l_shipinstruct = 'DELIVER IN 
PERSON')((((lineitem.l_quantity >= 1.00) AND (lineitem.l_quantity <= 11.00)) OR 
((lineitem.l_quantity >= 10.00) AND (lineitem.l_quantity <= 20.00))) OR 
((lineitem.l_quantity >= 20.00) AND (lineitem.l_quantity <= 
30.00)))((lineitem.l_shipmode = 'AIR') OR (lineitem.l_shipmode = 'AIR REG')))
+------------PhysicalOlapScan[lineitem]
+--------PhysicalDistribute
+----------PhysicalProject
+------------filter((((((part.p_brand = 'Brand#12') AND p_container IN ('SM 
CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND (part.p_size <= 5)) OR 
(((part.p_brand = 'Brand#23') AND p_container IN ('MED BAG', 'MED BOX', 'MED 
PKG', 'MED PACK')) AND (part.p_size <= 10))) OR (((part.p_brand = 'Brand#34') 
AND p_container IN ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')) AND (part.p_size 
<= 15)))(part.p_size >= 1))
+--------------PhysicalOlapScan[part]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q2.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q2.out
new file mode 100644
index 0000000000..adca6a9c5a
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q2.out
@@ -0,0 +1,30 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalTopN
+--PhysicalDistribute
+----PhysicalTopN
+------PhysicalProject
+--------filter((cast(ps_supplycost as DECIMAL(27, 9)) = min(ps_supplycost) 
OVER(PARTITION BY p_partkey)))
+----------PhysicalWindow
+------------PhysicalQuickSort
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN](supplier.s_suppkey = partsupp.ps_suppkey)
+------------------hashJoin[INNER_JOIN](part.p_partkey = partsupp.ps_partkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[partsupp]
+--------------------PhysicalProject
+----------------------filter((part.p_size = 15)(p_type like '%BRASS'))
+------------------------PhysicalOlapScan[part]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+------------------------PhysicalOlapScan[supplier]
+------------------------PhysicalDistribute
+--------------------------hashJoin[INNER_JOIN](nation.n_regionkey = 
region.r_regionkey)
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[nation]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((region.r_name = 'EUROPE'))
+----------------------------------PhysicalOlapScan[region]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q20.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q20.out
new file mode 100644
index 0000000000..cd28676ad6
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q20.out
@@ -0,0 +1,32 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------PhysicalProject
+--------hashJoin[RIGHT_SEMI_JOIN](supplier.s_suppkey = partsupp.ps_suppkey)
+----------PhysicalDistribute
+------------PhysicalProject
+--------------hashJoin[RIGHT_SEMI_JOIN](lineitem.l_partkey = 
partsupp.ps_partkey)(lineitem.l_suppkey = partsupp.ps_suppkey)(cast(ps_availqty 
as DECIMAL(27, 9)) > (0.5 * sum(l_quantity)))
+----------------PhysicalProject
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------filter((lineitem.l_shipdate < 
1995-01-01)(lineitem.l_shipdate >= 1994-01-01))
+----------------------------PhysicalOlapScan[lineitem]
+----------------PhysicalDistribute
+------------------hashJoin[LEFT_SEMI_JOIN](partsupp.ps_partkey = 
part.p_partkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[partsupp]
+--------------------PhysicalProject
+----------------------filter((p_name like 'forest%'))
+------------------------PhysicalOlapScan[part]
+----------hashJoin[INNER_JOIN](supplier.s_nationkey = nation.n_nationkey)
+------------PhysicalProject
+--------------PhysicalOlapScan[supplier]
+------------PhysicalDistribute
+--------------PhysicalProject
+----------------filter((nation.n_name = 'CANADA'))
+------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q21.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q21.out
new file mode 100644
index 0000000000..1e26a0f353
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q21.out
@@ -0,0 +1,32 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalTopN
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[LOCAL]
+--------PhysicalDistribute
+----------PhysicalProject
+------------hashJoin[RIGHT_SEMI_JOIN](l2.l_orderkey = l1.l_orderkey)( not 
(l_suppkey = l_suppkey))
+--------------PhysicalProject
+----------------PhysicalOlapScan[lineitem]
+--------------hashJoin[INNER_JOIN](orders.o_orderkey = l1.l_orderkey)
+----------------PhysicalProject
+------------------filter((orders.o_orderstatus = 'F'))
+--------------------PhysicalOlapScan[orders]
+----------------hashJoin[RIGHT_ANTI_JOIN](l3.l_orderkey = l1.l_orderkey)( not 
(l_suppkey = l_suppkey))
+------------------PhysicalProject
+--------------------filter((l3.l_receiptdate > l3.l_commitdate))
+----------------------PhysicalOlapScan[lineitem]
+------------------hashJoin[INNER_JOIN](supplier.s_suppkey = l1.l_suppkey)
+--------------------PhysicalProject
+----------------------filter((l1.l_receiptdate > l1.l_commitdate))
+------------------------PhysicalOlapScan[lineitem]
+--------------------PhysicalDistribute
+----------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[supplier]
+------------------------PhysicalDistribute
+--------------------------PhysicalProject
+----------------------------filter((nation.n_name = 'SAUDI ARABIA'))
+------------------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q22.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q22.out
new file mode 100644
index 0000000000..fd1ce6b324
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q22.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[RIGHT_ANTI_JOIN](orders.o_custkey = customer.c_custkey)
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------PhysicalOlapScan[orders]
+----------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMAL(27, 9)) > 
avg(c_acctbal))
+------------------PhysicalProject
+--------------------filter(substring(c_phone, 1, 2) IN ('13', '31', '23', 
'29', '30', '18', '17'))
+----------------------PhysicalOlapScan[customer]
+------------------PhysicalDistribute
+--------------------PhysicalAssertNumRows
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------filter((customer.c_acctbal > 
0.00)substring(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17'))
+--------------------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q3.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q3.out
new file mode 100644
index 0000000000..a8a3d52100
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q3.out
@@ -0,0 +1,21 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalTopN
+--PhysicalDistribute
+----PhysicalTopN
+------PhysicalProject
+--------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN](lineitem.l_orderkey = orders.o_orderkey)
+--------------PhysicalProject
+----------------filter((lineitem.l_shipdate > 1995-03-15))
+------------------PhysicalOlapScan[lineitem]
+--------------hashJoin[INNER_JOIN](customer.c_custkey = orders.o_custkey)
+----------------PhysicalProject
+------------------filter((orders.o_orderdate < 1995-03-15))
+--------------------PhysicalOlapScan[orders]
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------filter((customer.c_mktsegment = 'BUILDING'))
+----------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q4.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q4.out
new file mode 100644
index 0000000000..05c67b9b65
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q4.out
@@ -0,0 +1,17 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[RIGHT_SEMI_JOIN](lineitem.l_orderkey = 
orders.o_orderkey)
+----------------PhysicalProject
+------------------filter((lineitem.l_commitdate < lineitem.l_receiptdate))
+--------------------PhysicalOlapScan[lineitem]
+----------------PhysicalProject
+------------------filter((orders.o_orderdate >= 1993-07-01)(orders.o_orderdate 
< 1993-10-01))
+--------------------PhysicalOlapScan[orders]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q5.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q5.out
new file mode 100644
index 0000000000..e481a2b82e
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q5.out
@@ -0,0 +1,35 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN](customer.c_nationkey = 
supplier.s_nationkey)(customer.c_custkey = orders.o_custkey)
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN](lineitem.l_suppkey = supplier.s_suppkey)
+--------------------hashJoin[INNER_JOIN](lineitem.l_orderkey = 
orders.o_orderkey)
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[lineitem]
+----------------------PhysicalProject
+------------------------filter((orders.o_orderdate < 
1995-01-01)(orders.o_orderdate >= 1994-01-01))
+--------------------------PhysicalOlapScan[orders]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[supplier]
+--------------------------PhysicalDistribute
+----------------------------hashJoin[INNER_JOIN](nation.n_regionkey = 
region.r_regionkey)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[nation]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((region.r_name = 'ASIA'))
+------------------------------------PhysicalOlapScan[region]
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q6.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q6.out
new file mode 100644
index 0000000000..c936040e8d
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q6.out
@@ -0,0 +1,9 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+hashAgg[GLOBAL]
+--PhysicalDistribute
+----hashAgg[LOCAL]
+------PhysicalProject
+--------filter((lineitem.l_shipdate >= 1994-01-01)(lineitem.l_discount >= 
0.050000000)(lineitem.l_discount <= 0.070000000)(lineitem.l_quantity < 
24.00)(lineitem.l_shipdate < 1995-01-01))
+----------PhysicalOlapScan[lineitem]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q7.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q7.out
new file mode 100644
index 0000000000..2c1b945352
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q7.out
@@ -0,0 +1,36 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN](customer.c_nationkey = 
n2.n_nationkey)(customer.c_custkey = orders.o_custkey)
+----------------PhysicalProject
+------------------PhysicalOlapScan[customer]
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN](orders.o_orderkey = 
lineitem.l_orderkey)
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[orders]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](supplier.s_suppkey = 
lineitem.l_suppkey)
+--------------------------PhysicalProject
+----------------------------filter((lineitem.l_shipdate <= 
1996-12-31)(lineitem.l_shipdate >= 1995-01-01))
+------------------------------PhysicalOlapScan[lineitem]
+--------------------------PhysicalDistribute
+----------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
n1.n_nationkey)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[supplier]
+------------------------------PhysicalDistribute
+--------------------------------NestedLoopJoin[INNER_JOIN](((n1.n_name = 
'FRANCE') AND (n2.n_name = 'GERMANY')) OR ((n1.n_name = 'GERMANY') AND 
(n2.n_name = 'FRANCE')))
+----------------------------------PhysicalProject
+------------------------------------filter(((n1.n_name = 'FRANCE') OR 
(n1.n_name = 'GERMANY')))
+--------------------------------------PhysicalOlapScan[nation]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(((n2.n_name = 'GERMANY') OR 
(n2.n_name = 'FRANCE')))
+----------------------------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q8.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q8.out
new file mode 100644
index 0000000000..cd339810e0
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q8.out
@@ -0,0 +1,48 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------PhysicalProject
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN](supplier.s_nationkey = n2.n_nationkey)
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN](supplier.s_suppkey = 
lineitem.l_suppkey)
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[supplier]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN](n1.n_regionkey = 
region.r_regionkey)
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN](customer.c_nationkey = 
n1.n_nationkey)
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN](orders.o_custkey = 
customer.c_custkey)
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[customer]
+------------------------------------PhysicalDistribute
+--------------------------------------hashJoin[INNER_JOIN](lineitem.l_orderkey 
= orders.o_orderkey)
+----------------------------------------PhysicalProject
+------------------------------------------filter((orders.o_orderdate <= 
1996-12-31)(orders.o_orderdate >= 1995-01-01))
+--------------------------------------------PhysicalOlapScan[orders]
+----------------------------------------PhysicalProject
+------------------------------------------hashJoin[INNER_JOIN](part.p_partkey 
= lineitem.l_partkey)
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[lineitem]
+--------------------------------------------PhysicalDistribute
+----------------------------------------------PhysicalProject
+------------------------------------------------filter((part.p_type = 'ECONOMY 
ANODIZED STEEL'))
+--------------------------------------------------PhysicalOlapScan[part]
+--------------------------------PhysicalDistribute
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[nation]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((region.r_name = 'AMERICA'))
+----------------------------------PhysicalOlapScan[region]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[nation]
+
diff --git a/regression-test/data/nereids_tpchPlanShape_p0/shape/q9.out 
b/regression-test/data/nereids_tpchPlanShape_p0/shape/q9.out
new file mode 100644
index 0000000000..181838fd9c
--- /dev/null
+++ b/regression-test/data/nereids_tpchPlanShape_p0/shape/q9.out
@@ -0,0 +1,35 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+PhysicalQuickSort
+--PhysicalDistribute
+----PhysicalQuickSort
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN](partsupp.ps_suppkey = 
lineitem.l_suppkey)(partsupp.ps_partkey = lineitem.l_partkey)
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN](orders.o_orderkey = lineitem.l_orderkey)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[orders]
+--------------------PhysicalProject
+----------------------hashJoin[INNER_JOIN](supplier.s_suppkey = 
lineitem.l_suppkey)
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN](part.p_partkey = 
lineitem.l_partkey)
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[lineitem]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((p_name like '%green%'))
+----------------------------------PhysicalOlapScan[part]
+------------------------PhysicalDistribute
+--------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[supplier]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[nation]
+----------------PhysicalDistribute
+------------------PhysicalProject
+--------------------PhysicalOlapScan[partsupp]
+
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/load.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/load.groovy
new file mode 100644
index 0000000000..1ddd23a60c
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/load.groovy
@@ -0,0 +1,467 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("load") {
+    String database = context.config.getDbNameByFile(context.file)
+    sql "drop database if exists ${database}"
+    sql "create database ${database}"
+    sql "use ${database}"
+    sql """
+    drop table if exists lineitem;
+    """
+    sql """
+    CREATE TABLE lineitem (
+        l_shipdate    DATEV2 NOT NULL,
+        l_orderkey    bigint NOT NULL,
+        l_linenumber  int not null,
+        l_partkey     int NOT NULL,
+        l_suppkey     int not null,
+        l_quantity    decimal(15, 2) NOT NULL,
+        l_extendedprice  decimal(15, 2) NOT NULL,
+        l_discount    decimal(15, 2) NOT NULL,
+        l_tax         decimal(15, 2) NOT NULL,
+        l_returnflag  VARCHAR(1) NOT NULL,
+        l_linestatus  VARCHAR(1) NOT NULL,
+        l_commitdate  DATEV2 NOT NULL,
+        l_receiptdate DATEV2 NOT NULL,
+        l_shipinstruct VARCHAR(25) NOT NULL,
+        l_shipmode     VARCHAR(10) NOT NULL,
+        l_comment      VARCHAR(44) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`l_shipdate`, `l_orderkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`l_orderkey`) BUCKETS 96
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "lineitem_orders"
+    );
+    """
+
+    sql """
+    drop table if exists orders;
+    """
+
+    sql '''
+    CREATE TABLE orders  (
+        o_orderkey       bigint NOT NULL,
+        o_orderdate      DATEV2 NOT NULL,
+        o_custkey        int NOT NULL,
+        o_orderstatus    VARCHAR(1) NOT NULL,
+        o_totalprice     decimal(15, 2) NOT NULL,
+        o_orderpriority  VARCHAR(15) NOT NULL,
+        o_clerk          VARCHAR(15) NOT NULL,
+        o_shippriority   int NOT NULL,
+        o_comment        VARCHAR(79) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`o_orderkey`, `o_orderdate`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`o_orderkey`) BUCKETS 96
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "lineitem_orders"
+    ); '''
+
+    sql '''
+    drop table if exists partsupp;
+    '''
+
+    sql '''
+    CREATE TABLE partsupp (
+        ps_partkey          int NOT NULL,
+        ps_suppkey     int NOT NULL,
+        ps_availqty    int NOT NULL,
+        ps_supplycost  decimal(15, 2)  NOT NULL,
+        ps_comment     VARCHAR(199) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`ps_partkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`ps_partkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "part_partsupp"
+    );
+    '''
+
+    sql '''
+    drop table if exists part;
+    '''
+
+    sql '''
+    CREATE TABLE part (
+        p_partkey          int NOT NULL,
+        p_name        VARCHAR(55) NOT NULL,
+        p_mfgr        VARCHAR(25) NOT NULL,
+        p_brand       VARCHAR(10) NOT NULL,
+        p_type        VARCHAR(25) NOT NULL,
+        p_size        int NOT NULL,
+        p_container   VARCHAR(10) NOT NULL,
+        p_retailprice decimal(15, 2) NOT NULL,
+        p_comment     VARCHAR(23) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`p_partkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "part_partsupp"
+    );
+    '''
+
+    sql '''
+    drop table if exists customer;
+    '''
+
+    sql '''
+    CREATE TABLE customer (
+        c_custkey     int NOT NULL,
+        c_name        VARCHAR(25) NOT NULL,
+        c_address     VARCHAR(40) NOT NULL,
+        c_nationkey   int NOT NULL,
+        c_phone       VARCHAR(15) NOT NULL,
+        c_acctbal     decimal(15, 2)   NOT NULL,
+        c_mktsegment  VARCHAR(10) NOT NULL,
+        c_comment     VARCHAR(117) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`c_custkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+
+    sql '''
+    drop table if exists supplier
+    '''
+    
+    sql '''
+    CREATE TABLE supplier (
+        s_suppkey       int NOT NULL,
+        s_name        VARCHAR(25) NOT NULL,
+        s_address     VARCHAR(40) NOT NULL,
+        s_nationkey   int NOT NULL,
+        s_phone       VARCHAR(15) NOT NULL,
+        s_acctbal     decimal(15, 2) NOT NULL,
+        s_comment     VARCHAR(101) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`s_suppkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 12
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+
+    sql '''
+    drop table if exists nation;
+    '''
+
+    sql '''
+    CREATE TABLE `nation` (
+    `n_nationkey` int(11) NOT NULL,
+    `n_name`      varchar(25) NOT NULL,
+    `n_regionkey` int(11) NOT NULL,
+    `n_comment`   varchar(152) NULL
+    ) ENGINE=OLAP
+    DUPLICATE KEY(`N_NATIONKEY`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`N_NATIONKEY`) BUCKETS 1
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+    
+    sql '''
+    drop table if exists region;
+    '''
+    
+    sql '''
+    CREATE TABLE region  (
+        r_regionkey      int NOT NULL,
+        r_name       VARCHAR(25) NOT NULL,
+        r_comment    VARCHAR(152)
+    )ENGINE=OLAP
+    DUPLICATE KEY(`r_regionkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`r_regionkey`) BUCKETS 1
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+    
+    sql '''
+    drop view if exists revenue0;
+    '''
+    
+    sql '''
+    create view revenue0 (supplier_no, total_revenue) as
+    select
+        l_suppkey,
+        sum(l_extendedprice * (1 - l_discount))
+    from
+        lineitem
+    where
+        l_shipdate >= date '1996-01-01'
+        and l_shipdate < date '1996-01-01' + interval '3' month
+    group by
+        l_suppkey;
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_receiptdate set stats ('ndv'='2567', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='1992-01-04', 
'max_value'='1998-12-31', 'row_count'='6001215')
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_returnflag set stats ('ndv'='3', 
'avg_size'='1', 'max_size'='1', 'num_nulls'='0', 'min_value'='A', 
'max_value'='R', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_tax set stats ('ndv'='9', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='0', 
'max_value'='0.08', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_shipmode set stats ('ndv'='7', 
'avg_size'='4', 'max_size'='7', 'num_nulls'='0', 'min_value'='AIR', 
'max_value'='TRUCK', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_suppkey set stats ('ndv'='9990', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_shipdate set stats ('ndv'='2549', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='1992-01-02', 
'max_value'='1998-12-01', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_commitdate set stats ('ndv'='2485', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='1992-01-31', 
'max_value'='1998-10-31', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_partkey set stats ('ndv'='196099', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='6001215');
+    '''
+
+    sql '''
+    alter table lineitem modify column l_orderkey set stats ('ndv'='1500000', 
'avg_size'='8', 'max_size'='8', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_quantity set stats ('ndv'='50', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_linestatus set stats ('ndv'='2', 
'avg_size'='1', 'max_size'='1', 'num_nulls'='0', 'min_value'='F', 
'max_value'='o', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_comment set stats ('ndv'='4619207', 
'avg_size'='26', 'max_size'='43', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_extendedprice set stats 
('ndv'='929697', 'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 
'min_value'='1', 'max_value'='10000', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_linenumber set stats ('ndv'='7', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='7', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_discount set stats ('ndv'='11', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='0', 
'max_value'='0.1', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table lineitem modify column l_shipinstruct set stats ('ndv'='4', 
'avg_size'='12', 'max_size'='17', 'num_nulls'='0', 'min_value'='COLLECT COD', 
'max_value'='TAKE BACK RETURN', 'row_count'='6001215');
+    '''
+    
+    sql '''
+    alter table partsupp modify column ps_suppkey set stats ('ndv'='10009', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='800000');
+    '''
+    
+    sql '''
+    alter table partsupp modify column ps_availqty set stats ('ndv'='10008', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='9999', 'row_count'='800000');
+    '''
+    
+    sql '''
+    alter table partsupp modify column ps_comment set stats ('ndv'='794782', 
'avg_size'='123.6', 'max_size'='198', 'num_nulls'='0', 'min_value'='Tiresias 
according to the quiet courts sleep against the ironic', 'max_value'='zzle. 
unusual decoys detec', 'row_count'='800000');
+    '''
+    
+    sql '''
+    alter table partsupp modify column ps_partkey set stats ('ndv'='196099', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='200000', 'row_count'='800000');
+    '''
+    
+    sql '''
+    alter table partsupp modify column ps_supplycost set stats 
('ndv'='100274', 'avg_size'='16.0', 'max_size'='16', 'num_nulls'='0', 
'min_value'='1', 'max_value'='1000', 'row_count'='800000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_comment set stats ('ndv'='10039', 
'avg_size'='62.56950', 'max_size'='100', 'num_nulls'='0', 'min_value'='about 
the blithely express foxes. bli', 'max_value'='zzle furiously. bold accounts 
haggle fu', 'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_phone set stats ('ndv'='10021', 
'avg_size'='15.0', 'max_size'='15', 'num_nulls'='0', 
'min_value'='10-102-116-6785', 'max_value'='34-998-900-4911', 
'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_nationkey set stats ('ndv'='25', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='24', 'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_name set stats ('ndv'='10002', 
'avg_size'='18.0', 'max_size'='18', 'num_nulls'='0', 
'min_value'='Supplier#000000001', 'max_value'='Supplier#000010000', 
'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_acctbal set stats ('ndv'='9954', 
'avg_size'='16.0', 'max_size'='16', 'num_nulls'='0', 'min_value'='-998.22', 
'max_value'='9999.72', 'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_address set stats ('ndv'='9888', 
'avg_size'='24.9771', 'max_size'='40', 'num_nulls'='0', 'min_value'='   
9aW1wwnBJJPnCx,n', 'max_value'='zzfDhdtZcvmVzA8rNFU,Yctj1zBN', 
'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table supplier modify column s_suppkey set stats ('ndv'='10000', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='10000', 'row_count'='10000');
+    '''
+    
+    sql '''
+    alter table part modify column p_partkey set stats ('ndv'='200000', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='200000', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_container set stats ('ndv'='40', 
'avg_size'='7.57', 'max_size'='10', 'num_nulls'='0', 'min_value'='JUMBO BAG', 
'max_value'='WRAP PKG', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_name set stats ('ndv'='200000', 
'avg_size'='32.0', 'max_size'='50', 'num_nulls'='0', 'min_value'='almond 
antique blue royal burnished', 'max_value'='yellow white seashell lavender 
black', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_comment set stats ('ndv'='133106', 
'avg_size'='13', 'max_size'='22', 'num_nulls'='0', 'min_value'='Tire', 
'max_value'='zzle. quickly si', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_brand set stats ('ndv'='25', 
'avg_size'='22', 'max_size'='22', 'num_nulls'='0', 'min_value'='Brand#11', 
'max_value'='Brand#55', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_retailprice set stats ('ndv'='21096', 
'avg_size'='16.0', 'max_size'='16', 'num_nulls'='0', 'min_value'='901', 
'max_value'='2098.99', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_type set stats ('ndv'='150', 
'avg_size'='20', 'max_size'='25', 'num_nulls'='0', 'min_value'='ECONOMY 
ANODIZED BRASSe', 'max_value'='STANDARD POLISHED TIN ', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_size set stats ('ndv'='50', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='50', 'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table part modify column p_mfgr set stats ('ndv'='5', 
'avg_size'='14', 'max_size'='14', 'num_nulls'='0', 
'min_value'='Manufacturer#1', 'max_value'='Manufacturer#5', 
'row_count'='200000');
+    '''
+    
+    sql '''
+    alter table region modify column r_regionkey set stats ('ndv'='5', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='4', 'row_count'='5');
+    '''
+    
+    sql '''
+    alter table region modify column r_name set stats ('ndv'='5', 
'avg_size'='14', 'max_size'='14', 'num_nulls'='0', 'min_value'='AFRICA', 
'max_value'='MIDDLE EAST', 'row_count'='5');
+    '''
+    
+    sql '''
+    alter table region modify column r_comment set stats ('ndv'='5', 
'avg_size'='14', 'max_size'='14', 'num_nulls'='0', 'min_value'='AFRICA', 
'max_value'='MIDDLE EAST', 'row_count'='5');
+    '''
+    
+    sql '''
+    alter table nation modify column n_nationkey set stats ('ndv'='25', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='24', 'row_count'='25');
+    '''
+    
+    sql '''
+    alter table nation modify column n_regionkey set stats ('ndv'='5', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='4', 'row_count'='25');
+    '''
+    
+    sql '''
+    alter table nation modify column n_name set stats ('ndv'='25', 
'avg_size'='14', 'max_size'='14', 'num_nulls'='0', 'min_value'='ALGERIA', 
'max_value'='VIETNAM', 'row_count'='25');
+    '''
+    
+    sql '''
+    alter table nation modify column n_comment set stats ('ndv'='25', 
'avg_size'='14', 'max_size'='14', 'num_nulls'='0', 'min_value'='ALGERIA', 
'max_value'='VIETNAM', 'row_count'='25');
+    '''
+    
+    sql '''
+    alter table customer modify column c_custkey set stats ('ndv'='150000', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='150000', 'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_acctbal set stats ('ndv'='142496', 
'avg_size'='16', 'max_size'='16', 'num_nulls'='0', 'min_value'='-999.99', 
'max_value'='9999.99', 'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_phone set stats ('ndv'='150000', 
'avg_size'='15', 'max_size'='15', 'num_nulls'='0', 
'min_value'='10-100-106-1617', 'max_value'='34-999-618-6881', 
'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_mktsegment set stats ('ndv'='5', 
'avg_size'='8.9', 'max_size'='10', 'num_nulls'='0', 'min_value'='AUTOMOBILE', 
'max_value'='MACHINERY', 'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_address set stats ('ndv'='150000', 
'avg_size'='25', 'max_size'='40', 'num_nulls'='0', 'min_value'='   2uZwVhQvwA', 
'max_value'='zzxGktzXTMKS1BxZlgQ9nqQ', 'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_nationkey set stats ('ndv'='25', 
'avg_size'='4', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='24', 'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_name set stats ('ndv'='150000', 
'avg_size'='25', 'max_size'='25', 'num_nulls'='0', 
'min_value'='Customer#000000001', 'max_value'='Customer#000150000', 
'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table customer modify column c_comment set stats ('ndv'='150000', 
'avg_size'='72', 'max_size'='116', 'num_nulls'='0', 'min_value'=' Tiresias 
according to the sly', 'max_value'='zzle. blithely regu0', 
'row_count'='150000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_orderstatus set stats ('ndv'='3', 
'avg_size'='1.0', 'max_size'='1', 'num_nulls'='0', 'min_value'='F', 
'max_value'='P', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_clerk set stats ('ndv'='988', 
'avg_size'='15.0', 'max_size'='15', 'num_nulls'='0', 
'min_value'='Clerk#000000001', 'max_value'='Clerk#000001000', 
'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_orderdate set stats ('ndv'='2417', 
'avg_size'='16.0', 'max_size'='16', 'num_nulls'='0', 'min_value'='1992-01-01', 
'max_value'='1998-08-02', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_shippriority set stats ('ndv'='1', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='0', 
'max_value'='0', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_custkey set stats ('ndv'='99149', 
'avg_size'='4.0', 'max_size'='4', 'num_nulls'='0', 'min_value'='1', 
'max_value'='149999', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_totalprice set stats ('ndv'='1462416', 
'avg_size'='16.0', 'max_size'='16', 'num_nulls'='0', 'min_value'='857.71', 
'max_value'='555285.16', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_orderkey set stats ('ndv'='1500000', 
'avg_size'='8.0', 'max_size'='8', 'num_nulls'='0', 'min_value'='1', 
'max_value'='6000000', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_comment set stats ('ndv'='1465415', 
'avg_size'='48.51387', 'max_size'='78', 'num_nulls'='0', 'min_value'='Tiresias 
about the blithely ironic a', 'max_value'='zzle? furiously ironic instructions 
among the unusual t ', 'row_count'='1500000');
+    '''
+    
+    sql '''
+    alter table orders modify column o_orderpriority set stats ('ndv'='5', 
'avg_size'='8.4', 'max_size'='15', 'num_nulls'='0', 'min_value'='1-URGENT', 
'max_value'='5-LOW', 'row_count'='1500000');
+    '''
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q1.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q1.groovy
new file mode 100644
index 0000000000..a368d2451b
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q1.groovy
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q1") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set exec_mem_limit=21G'
+
+
+    qt_select """
+    explain shape plan
+    select
+        l_returnflag,
+        l_linestatus,
+        sum(l_quantity) as sum_qty,
+        sum(l_extendedprice) as sum_base_price,
+        sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
+        sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
+        avg(l_quantity) as avg_qty,
+        avg(l_extendedprice) as avg_price,
+        avg(l_discount) as avg_disc,
+        count(*) as count_order
+    from
+        lineitem
+    where
+        l_shipdate <= date '1998-12-01' - interval '90' day
+    group by
+        l_returnflag,
+        l_linestatus
+    order by
+        l_returnflag,
+        l_linestatus;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q10.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q10.groovy
new file mode 100644
index 0000000000..e7a0ed87a9
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q10.groovy
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q10") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        c_custkey,
+        c_name,
+        sum(l_extendedprice * (1 - l_discount)) as revenue,
+        c_acctbal,
+        n_name,
+        c_address,
+        c_phone,
+        c_comment
+    from
+        customer,
+        orders,
+        lineitem,
+        nation
+    where
+        c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and o_orderdate >= date '1993-10-01'
+        and o_orderdate < date '1993-10-01' + interval '3' month
+        and l_returnflag = 'R'
+        and c_nationkey = n_nationkey
+    group by
+        c_custkey,
+        c_name,
+        c_acctbal,
+        c_phone,
+        n_name,
+        c_address,
+        c_comment
+    order by
+        revenue desc
+    limit 20;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q11.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q11.groovy
new file mode 100644
index 0000000000..028c7529aa
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q11.groovy
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q11") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select  
+        ps_partkey,
+        sum(ps_supplycost * ps_availqty) as value
+    from
+        partsupp,
+        supplier,
+        nation
+    where
+        ps_suppkey = s_suppkey
+        and s_nationkey = n_nationkey
+        and n_name = 'GERMANY'
+    group by
+        ps_partkey having
+            sum(ps_supplycost * ps_availqty) > (
+                select
+                    sum(ps_supplycost * ps_availqty) * 0.000002
+                from
+                    partsupp,
+                    supplier,
+                    nation
+                where
+                    ps_suppkey = s_suppkey
+                    and s_nationkey = n_nationkey
+                    and n_name = 'GERMANY'
+            )
+    order by
+        value desc;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q12.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q12.groovy
new file mode 100644
index 0000000000..6221ca9c90
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q12.groovy
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q12") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        l_shipmode,
+        sum(case
+            when o_orderpriority = '1-URGENT'
+                or o_orderpriority = '2-HIGH'
+                then 1
+            else 0
+        end) as high_line_count,
+        sum(case
+            when o_orderpriority <> '1-URGENT'
+                and o_orderpriority <> '2-HIGH'
+                then 1
+            else 0
+        end) as low_line_count
+    from
+        orders,
+        lineitem
+    where
+        o_orderkey = l_orderkey
+        and l_shipmode in ('MAIL', 'SHIP')
+        and l_commitdate < l_receiptdate
+        and l_shipdate < l_commitdate
+        and l_receiptdate >= date '1994-01-01'
+        and l_receiptdate < date '1994-01-01' + interval '1' year
+    group by
+        l_shipmode
+    order by
+        l_shipmode;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q13.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q13.groovy
new file mode 100644
index 0000000000..460a316b17
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q13.groovy
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q13") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        c_count,
+        count(*) as custdist
+    from
+        (
+            select
+                c_custkey,
+                count(o_orderkey) as c_count
+            from
+                customer left outer join orders on
+                    c_custkey = o_custkey
+                    and o_comment not like '%special%requests%'
+            group by
+                c_custkey
+        ) as c_orders
+    group by
+        c_count
+    order by
+        custdist desc,
+        c_count desc;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q14.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q14.groovy
new file mode 100644
index 0000000000..c8d28ef6ca
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q14.groovy
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q14") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        100.00 * sum(case
+            when p_type like 'PROMO%'
+                then l_extendedprice * (1 - l_discount)
+            else 0
+        end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
+    from
+        lineitem,
+        part
+    where
+        l_partkey = p_partkey
+        and l_shipdate >= date '1995-09-01'
+        and l_shipdate < date '1995-09-01' + interval '1' month;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q15.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q15.groovy
new file mode 100644
index 0000000000..b6888c2cc8
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q15.groovy
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q15") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        s_suppkey,
+        s_name,
+        s_address,
+        s_phone,
+        total_revenue
+    from
+        supplier,
+        revenue0
+    where
+        s_suppkey = supplier_no
+        and total_revenue = (
+            select
+                max(total_revenue)
+            from
+                revenue0
+        )
+    order by
+        s_suppkey;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q16.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q16.groovy
new file mode 100644
index 0000000000..565cbc8dd2
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q16.groovy
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q16") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        p_brand,
+        p_type,
+        p_size,
+        count(distinct ps_suppkey) as supplier_cnt
+    from
+        partsupp,
+        part
+    where
+        p_partkey = ps_partkey
+        and p_brand <> 'Brand#45'
+        and p_type not like 'MEDIUM POLISHED%'
+        and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
+        and ps_suppkey not in (
+            select
+                s_suppkey
+            from
+                supplier
+            where
+                s_comment like '%Customer%Complaints%'
+        )
+    group by
+        p_brand,
+        p_type,
+        p_size
+    order by
+        supplier_cnt desc,
+        p_brand,
+        p_type,
+        p_size;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q17.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q17.groovy
new file mode 100644
index 0000000000..bf85f08e54
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q17.groovy
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q17") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select
+        sum(l_extendedprice) / 7.0 as avg_yearly
+    from
+        lineitem,
+        part
+    where
+        p_partkey = l_partkey
+        and p_brand = 'Brand#23'
+        and p_container = 'MED BOX'
+        and l_quantity < (
+            select
+                0.2 * avg(l_quantity)
+            from
+                lineitem
+            where
+                l_partkey = p_partkey
+        );
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q18.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q18.groovy
new file mode 100644
index 0000000000..79ab60654d
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q18.groovy
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q18") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+    c_name,
+            c_custkey,
+            o_orderkey,
+            o_orderdate,
+            o_totalprice,
+            sum(l_quantity)
+    from
+            customer,
+            orders,
+            lineitem
+    where
+            o_orderkey  in  (
+                    select
+                            l_orderkey
+                    from
+                            lineitem
+                    group  by
+                            l_orderkey  having
+                                    sum(l_quantity)  >  300
+            )
+            and  c_custkey  =  o_custkey
+            and  o_orderkey  =  l_orderkey
+    group  by
+            c_name,
+            c_custkey,
+            o_orderkey,
+            o_orderdate,
+            o_totalprice
+    order  by
+            o_totalprice  desc,
+            o_orderdate
+    limit  100;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q19.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q19.groovy
new file mode 100644
index 0000000000..41b078eb40
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q19.groovy
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q19") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+        select
+                sum(l_extendedprice* (1 - l_discount)) as revenue
+        from
+                lineitem,
+                part
+        where
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#12'
+                and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
+                and l_quantity >= 1 and l_quantity <= 1 + 10
+                and p_size between 1 and 5
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        )
+        or
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#23'
+                and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED 
PACK')
+                and l_quantity >= 10 and l_quantity <= 10 + 10
+                and p_size between 1 and 10
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        )
+        or
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#34'
+                and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
+                and l_quantity >= 20 and l_quantity <= 20 + 10
+                and p_size between 1 and 15
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        );
+    
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q2.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q2.groovy
new file mode 100644
index 0000000000..8476049746
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q2.groovy
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q2") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        s_acctbal,
+        s_name,
+        n_name,
+        p_partkey,
+        p_mfgr,
+        s_address,
+        s_phone,
+        s_comment
+    from
+        part,
+        supplier,
+        partsupp,
+        nation,
+        region
+    where
+        p_partkey = ps_partkey
+        and s_suppkey = ps_suppkey
+        and p_size = 15
+        and p_type like '%BRASS'
+        and s_nationkey = n_nationkey
+        and n_regionkey = r_regionkey
+        and r_name = 'EUROPE'
+        and ps_supplycost = (
+            select
+                min(ps_supplycost)
+            from
+                partsupp,
+                supplier,
+                nation,
+                region
+            where
+                p_partkey = ps_partkey
+                and s_suppkey = ps_suppkey
+                and s_nationkey = n_nationkey
+                and n_regionkey = r_regionkey
+                and r_name = 'EUROPE'
+        )
+    order by
+        s_acctbal desc,
+        n_name,
+        s_name,
+        p_partkey
+    limit 100;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q20.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q20.groovy
new file mode 100644
index 0000000000..37c97ffe2f
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q20.groovy
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q20") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+        select 
+        s_name,
+        s_address
+        from
+        supplier,
+        nation
+        where
+        s_suppkey in (
+                select
+                ps_suppkey
+                from
+                partsupp
+                where
+                ps_partkey in (
+                        select
+                        p_partkey
+                        from
+                        part
+                        where
+                        p_name like 'forest%'
+                )
+                and ps_availqty > (
+                        select
+                        0.5 * sum(l_quantity)
+                        from
+                        lineitem
+                        where
+                        l_partkey = ps_partkey
+                        and l_suppkey = ps_suppkey
+                        and l_shipdate >= date '1994-01-01'
+                        and l_shipdate < date '1994-01-01' + interval '1' year
+                )
+        )
+        and s_nationkey = n_nationkey
+        and n_name = 'CANADA'
+        order by
+        s_name;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q21.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q21.groovy
new file mode 100644
index 0000000000..6a17489bc3
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q21.groovy
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q21") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+        select
+                s_name,
+                count(*) as numwait
+        from
+                supplier,
+                lineitem l1,
+                orders,
+                nation
+        where
+        s_suppkey = l1.l_suppkey
+        and o_orderkey = l1.l_orderkey
+        and o_orderstatus = 'F'
+        and l1.l_receiptdate > l1.l_commitdate
+        and exists (
+                select
+                *
+                from
+                lineitem l2
+                where
+                l2.l_orderkey = l1.l_orderkey
+                and l2.l_suppkey <> l1.l_suppkey
+        )
+        and not exists (
+                select
+                *
+                from
+                lineitem l3
+                where
+                l3.l_orderkey = l1.l_orderkey
+                and l3.l_suppkey <> l1.l_suppkey
+                and l3.l_receiptdate > l3.l_commitdate
+        )
+        and s_nationkey = n_nationkey
+        and n_name = 'SAUDI ARABIA'
+        group by
+        s_name
+        order by
+        numwait desc,
+        s_name
+        limit 100;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q22.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q22.groovy
new file mode 100644
index 0000000000..6b9ed6713b
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q22.groovy
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q22") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+        select 
+        cntrycode,
+        count(*) as numcust,
+        sum(c_acctbal) as totacctbal
+    from
+        (
+            select
+                substring(c_phone, 1, 2) as cntrycode,
+                c_acctbal
+            from
+                customer
+            where
+                substring(c_phone, 1, 2) in
+                    ('13', '31', '23', '29', '30', '18', '17')
+                and c_acctbal > (
+                    select
+                        avg(c_acctbal)
+                    from
+                        customer
+                    where
+                        c_acctbal > 0.00
+                        and substring(c_phone, 1, 2) in
+                            ('13', '31', '23', '29', '30', '18', '17')
+                )
+                and not exists (
+                    select
+                        *
+                    from
+                        orders
+                    where
+                        o_custkey = c_custkey
+                )
+        ) as custsale
+    group by
+        cntrycode
+    order by
+        cntrycode;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q3.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q3.groovy
new file mode 100644
index 0000000000..4fd26f615f
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q3.groovy
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q3") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    // db = "tpch"
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select  
+        l_orderkey,
+        sum(l_extendedprice * (1 - l_discount)) as revenue,
+        o_orderdate,
+        o_shippriority
+    from
+        customer,
+        orders,
+        lineitem
+    where
+        c_mktsegment = 'BUILDING'
+        and c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and o_orderdate < date '1995-03-15'
+        and l_shipdate > date '1995-03-15'
+    group by
+        l_orderkey,
+        o_orderdate,
+        o_shippriority
+    order by
+        revenue desc,
+        o_orderdate
+    limit 10;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q4.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q4.groovy
new file mode 100644
index 0000000000..67e98d6d66
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q4.groovy
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q4") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select  
+        o_orderpriority,
+        count(*) as order_count
+    from
+        orders
+    where
+        o_orderdate >= date '1993-07-01'
+        and o_orderdate < date '1993-07-01' + interval '3' month
+        and exists (
+            select
+                *
+            from
+                lineitem
+            where
+                l_orderkey = o_orderkey
+                and l_commitdate < l_receiptdate
+        )
+    group by
+        o_orderpriority
+    order by
+        o_orderpriority;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q5.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q5.groovy
new file mode 100644
index 0000000000..a070bb76fa
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q5.groovy
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q5") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        n_name,
+        sum(l_extendedprice * (1 - l_discount)) as revenue
+    from
+        customer,
+        orders,
+        lineitem,
+        supplier,
+        nation,
+        region
+    where
+        c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and l_suppkey = s_suppkey
+        and c_nationkey = s_nationkey
+        and s_nationkey = n_nationkey
+        and n_regionkey = r_regionkey
+        and r_name = 'ASIA'
+        and o_orderdate >= date '1994-01-01'
+        and o_orderdate < date '1994-01-01' + interval '1' year
+    group by
+        n_name
+    order by
+        revenue desc;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q6.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q6.groovy
new file mode 100644
index 0000000000..f846b4016a
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q6.groovy
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q6") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        sum(l_extendedprice * l_discount) as revenue
+    from
+        lineitem
+    where
+        l_shipdate >= date '1994-01-01'
+        and l_shipdate < date '1994-01-01' + interval '1' year
+        and l_discount between .06 - 0.01 and .06 + 0.01
+        and l_quantity < 24;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q7.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q7.groovy
new file mode 100644
index 0000000000..54e6eaf404
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q7.groovy
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q7") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        supp_nation,
+        cust_nation,
+        l_year,
+        sum(volume) as revenue
+    from
+        (
+            select
+                n1.n_name as supp_nation,
+                n2.n_name as cust_nation,
+                extract(year from l_shipdate) as l_year,
+                l_extendedprice * (1 - l_discount) as volume
+            from
+                supplier,
+                lineitem,
+                orders,
+                customer,
+                nation n1,
+                nation n2
+            where
+                s_suppkey = l_suppkey
+                and o_orderkey = l_orderkey
+                and c_custkey = o_custkey
+                and s_nationkey = n1.n_nationkey
+                and c_nationkey = n2.n_nationkey
+                and (
+                    (n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY')
+                    or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE')
+                )
+                and l_shipdate between date '1995-01-01' and date '1996-12-31'
+        ) as shipping
+    group by
+        supp_nation,
+        cust_nation,
+        l_year
+    order by
+        supp_nation,
+        cust_nation,
+        l_year;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q8.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q8.groovy
new file mode 100644
index 0000000000..73fbca0524
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q8.groovy
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q8") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        o_year,
+        sum(case
+            when nation = 'BRAZIL' then volume
+            else 0
+        end) / sum(volume) as mkt_share
+    from
+        (
+            select
+                extract(year from o_orderdate) as o_year,
+                l_extendedprice * (1 - l_discount) as volume,
+                n2.n_name as nation
+            from
+                part,
+                supplier,
+                lineitem,
+                orders,
+                customer,
+                nation n1,
+                nation n2,
+                region
+            where
+                p_partkey = l_partkey
+                and s_suppkey = l_suppkey
+                and l_orderkey = o_orderkey
+                and o_custkey = c_custkey
+                and c_nationkey = n1.n_nationkey
+                and n1.n_regionkey = r_regionkey
+                and r_name = 'AMERICA'
+                and s_nationkey = n2.n_nationkey
+                and o_orderdate between date '1995-01-01' and date '1996-12-31'
+                and p_type = 'ECONOMY ANODIZED STEEL'
+        ) as all_nations
+    group by
+        o_year
+    order by
+        o_year;
+    """
+}
diff --git a/regression-test/suites/nereids_tpchPlanShape_p0/shape/q9.groovy 
b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q9.groovy
new file mode 100644
index 0000000000..0e38b7bb7b
--- /dev/null
+++ b/regression-test/suites/nereids_tpchPlanShape_p0/shape/q9.groovy
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q9") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql "set runtime_filter_mode='GLOBAL'"
+    sql "set enable_runtime_filter_prune=true"
+    sql 'set exec_mem_limit=21G'
+
+    qt_select """
+    explain shape plan
+    select 
+        nation,
+        o_year,
+        sum(amount) as sum_profit
+    from
+        (
+            select
+                n_name as nation,
+                extract(year from o_orderdate) as o_year,
+                l_extendedprice * (1 - l_discount) - ps_supplycost * 
l_quantity as amount
+            from
+                part,
+                supplier,
+                lineitem,
+                partsupp,
+                orders,
+                nation
+            where
+                s_suppkey = l_suppkey
+                and ps_suppkey = l_suppkey
+                and ps_partkey = l_partkey
+                and p_partkey = l_partkey
+                and o_orderkey = l_orderkey
+                and s_nationkey = n_nationkey
+                and p_name like '%green%'
+        ) as profit
+    group by
+        nation,
+        o_year
+    order by
+        nation,
+        o_year desc;
+    """
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to