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

panxiaolei 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 86841d8653 [Bug](materialized-view) fix some problems of mv and make 
ssb mv work on nereids (#21559)
86841d8653 is described below

commit 86841d86532978184433a267e0b386dcb5ff5642
Author: Pxl <[email protected]>
AuthorDate: Mon Jul 17 10:08:25 2023 +0800

    [Bug](materialized-view) fix some problems of mv and make ssb mv work on 
nereids (#21559)
    
    fix some problems of mv and make ssb mv work on nereids
---
 .../mv/AbstractSelectMaterializedIndexRule.java    |   7 +-
 .../doris/nereids/util/TypeCoercionUtils.java      |  26 ++-
 regression-test/data/mv_p0/k1s2m3/k1s2m3.out       |  64 ++++++
 .../ssb/multiple_no_where/multiple_no_where.out    |  24 +++
 regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy  | 101 +++++++++
 .../ssb/multiple_no_where/multiple_no_where.groovy | 226 +++++++++++++++++++++
 .../sql_functions/test_arith_functions.groovy      |   2 +-
 7 files changed, 444 insertions(+), 6 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
index 1960dbabdc..bc77b8d058 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
@@ -71,6 +71,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.TreeMap;
+import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -98,12 +99,12 @@ public abstract class AbstractSelectMaterializedIndexRule {
         OlapTable table = scan.getTable();
 
         Set<String> requiredMvColumnNames = requiredScanOutput.stream()
-                    .map(s -> 
normalizeName(Column.getNameWithoutMvPrefix(s.getName())))
-                    .collect(Collectors.toSet());
+                .map(s -> 
normalizeName(Column.getNameWithoutMvPrefix(s.getName())))
+                .collect(Collectors.toCollection(() -> new 
TreeSet<String>(String.CASE_INSENSITIVE_ORDER)));
 
         Set<String> mvColNames = table.getSchemaByIndexId(index.getId(), 
true).stream()
                 .map(c -> 
normalizeName(parseMvColumnToSql(c.getNameWithoutMvPrefix())))
-                .collect(Collectors.toSet());
+                .collect(Collectors.toCollection(() -> new 
TreeSet<String>(String.CASE_INSENSITIVE_ORDER)));
 
         return mvColNames.containsAll(requiredMvColumnNames)
                 || requiredExpr.stream()
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
index 05de35a388..afdc19b2fe 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
@@ -114,6 +114,18 @@ import java.util.stream.Stream;
  */
 public class TypeCoercionUtils {
 
+    /**
+     * integer type precedence for type promotion.
+     * bigger numeric has smaller ordinal
+     */
+    public static final List<DataType> INTEGER_PRECEDENCE = ImmutableList.of(
+            LargeIntType.INSTANCE,
+            BigIntType.INSTANCE,
+            IntegerType.INSTANCE,
+            SmallIntType.INSTANCE,
+            TinyIntType.INSTANCE
+    );
+
     /**
      * numeric type precedence for type promotion.
      * bigger numeric has smaller ordinal
@@ -486,8 +498,18 @@ public class TypeCoercionUtils {
         left = castIfNotSameType(left, t1);
         right = castIfNotSameType(right, t2);
 
-        Expression newLeft = TypeCoercionUtils.castIfNotSameType(left, 
BigIntType.INSTANCE);
-        Expression newRight = TypeCoercionUtils.castIfNotSameType(right, 
BigIntType.INSTANCE);
+        DataType commonType = BigIntType.INSTANCE;
+        if (t1.isIntegralType() && t2.isIntegralType()) {
+            for (DataType dataType : TypeCoercionUtils.INTEGER_PRECEDENCE) {
+                if (t1.equals(dataType) || t2.equals(dataType)) {
+                    commonType = dataType;
+                    break;
+                }
+            }
+        }
+
+        Expression newLeft = TypeCoercionUtils.castIfNotSameType(left, 
commonType);
+        Expression newRight = TypeCoercionUtils.castIfNotSameType(right, 
commonType);
         return divide.withChildren(newLeft, newRight);
     }
 
diff --git a/regression-test/data/mv_p0/k1s2m3/k1s2m3.out 
b/regression-test/data/mv_p0/k1s2m3/k1s2m3.out
new file mode 100644
index 0000000000..1da9198a32
--- /dev/null
+++ b/regression-test/data/mv_p0/k1s2m3/k1s2m3.out
@@ -0,0 +1,64 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select_star --
+\N     4       \N      d
+-4     -4      -4      d
+1      1       1       a
+2      2       2       b
+3      -3      \N      c
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
+-- !select_mv --
+\N     \N
+-4     16
+1      1
+2      4
+3      \N
+
diff --git 
a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out 
b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
new file mode 100644
index 0000000000..dd404cf8ed
--- /dev/null
+++ b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
@@ -0,0 +1,24 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select_star --
+1      1       1       1       1       1       1       1       1       1       
1       1       1       1       1       2023-06-09      shipmode        name    
address city    nation  AMERICA phone   mktsegment      name    address city    
nation  AMERICA phone   name    MFGR#1  category        brand   color   type    
4       container
+2      2       2       2       2       2       2       2       2       2       
2       2       2       2       2       2023-06-09      shipmode        name    
address city    nation  region  phone   mktsegment      name    address city    
nation  region  phone   name    mfgr    category        brand   color   type    
4       container
+19920101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      ASIA    ASIA    
ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    ASIA    
ASIA    ASIA    ASIA    MFGR#12 MFGR#12 brand   color   type    4       
container
+19930101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      shipmode        
name    address city    nation  AMERICA phone   mktsegment      name    address 
city    nation  AMERICA phone   name    MFGR#1  category        brand   color   
type    4       container
+19930101       1       1       1       1       1       1       1       1       
1       1       100     1       1       1       2023-06-09      shipmode        
name    address city    nation  AMERICA phone   mktsegment      name    address 
city    nation  AMERICA phone   name    MFGR#12 MFGR#12 brand   color   type    
4       container
+19930101       2       2       2       2       2       2       2       2       
2       2       2       2       2       2       2023-06-09      shipmode        
name    address city    nation  region  phone   mktsegment      name    address 
city    nation  region  phone   name    mfgr    category        brand   color   
type    4       container
+19930101       2       2       2       2       2       2       2       2       
2       2       2       2       2       2       2023-06-09      shipmode        
name    address city    nation  region  phone   mktsegment      name    address 
city    nation  region  phone   name    mfgr    category        brand   color   
type    4       container
+19930101       2       2       2       2       2       2       2       2       
2       2       2       2       2       2       2023-06-09      shipmode        
name    address city    nation  region  phone   mktsegment      name    address 
city    nation  region  phone   name    mfgr    category        brand   color   
type    4       container
+
+-- !select_q_1_1 --
+12
+
+-- !select_q_2_1 --
+1      1993    brand
+
+-- !select_mv --
+ASIA   ASIA    1992    1
+
+-- !select_mv --
+0      nation  0
+1993   nation  0
+
diff --git a/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy 
b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy
new file mode 100644
index 0000000000..9c732f5699
--- /dev/null
+++ b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy
@@ -0,0 +1,101 @@
+// 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.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite ("k1s2m3") {
+
+    sql """ DROP TABLE IF EXISTS d_table; """
+
+    sql """
+            create table d_table(
+                k1 int null,
+                k2 int not null,
+                k3 bigint null,
+                k4 varchar(100) null
+            )
+            duplicate key (k1,k2,k3)
+            distributed BY hash(k1) buckets 3
+            properties("replication_num" = "1");
+        """
+
+    sql "insert into d_table select 1,1,1,'a';"
+    sql "insert into d_table select 2,2,2,'b';"
+    sql "insert into d_table select 3,-3,null,'c';"
+
+    createMV("create materialized view k1s2m3 as select k1,sum(k2*k3) from 
d_table group by k1;")
+
+    sql "insert into d_table select -4,-4,-4,'d';"
+    sql "insert into d_table(k4,k2) values('d',4);"
+
+    qt_select_star "select * from d_table order by k1;"
+
+    sql "set enable_nereids_planner=false"
+    explain {
+        sql("select k1,sum(k2*k3) from d_table group by k1 order by k1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select k1,sum(k2*k3) from d_table group by k1 order by k1;"
+
+    explain {
+        sql("select K1,sum(K2*K3) from d_table group by K1 order by K1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select K1,sum(K2*K3) from d_table group by K1 order by K1;"
+
+    sql "set enable_nereids_planner=true"
+    explain {
+        sql("select k1,sum(k2*k3) from d_table group by k1 order by k1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select k1,sum(k2*k3) from d_table group by k1 order by k1;"
+
+    explain {
+        sql("select K1,sum(K2*K3) from d_table group by K1 order by K1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select K1,sum(K2*K3) from d_table group by K1 order by K1;"
+
+    sql""" drop materialized view k1s2m3 on d_table; """
+    createMV("create materialized view k1s2m3 as select K1,sum(K2*K3) from 
d_table group by K1;")
+
+    sql "set enable_nereids_planner=false"
+    explain {
+        sql("select k1,sum(k2*k3) from d_table group by k1 order by k1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select k1,sum(k2*k3) from d_table group by k1 order by k1;"
+
+    explain {
+        sql("select K1,sum(K2*K3) from d_table group by K1 order by K1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select K1,sum(K2*K3) from d_table group by K1 order by K1;"
+
+    sql "set enable_nereids_planner=true"
+    explain {
+        sql("select k1,sum(k2*k3) from d_table group by k1 order by k1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select k1,sum(k2*k3) from d_table group by k1 order by k1;"
+
+    explain {
+        sql("select K1,sum(K2*K3) from d_table group by K1 order by K1;")
+        contains "(k1s2m3)"
+    }
+    qt_select_mv "select K1,sum(K2*K3) from d_table group by K1 order by K1;"
+}
diff --git 
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
new file mode 100644
index 0000000000..36f6fc634a
--- /dev/null
+++ 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
@@ -0,0 +1,226 @@
+// 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.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite ("multiple_no_where") {
+    sql """ DROP TABLE IF EXISTS lineorder_flat; """
+    sql """set enable_nereids_planner=true"""
+    sql """SET enable_fallback_to_original_planner=false"""
+
+    sql """
+        CREATE TABLE IF NOT EXISTS `lineorder_flat` (
+        `LO_ORDERDATE` int(11) NOT NULL COMMENT "",
+        `LO_ORDERKEY` int(11) NOT NULL COMMENT "",
+        `LO_LINENUMBER` tinyint(4) NOT NULL COMMENT "",
+        `LO_CUSTKEY` int(11) NOT NULL COMMENT "",
+        `LO_PARTKEY` int(11) NOT NULL COMMENT "",
+        `LO_SUPPKEY` int(11) NOT NULL COMMENT "",
+        `LO_ORDERPRIORITY` varchar(100) NOT NULL COMMENT "",
+        `LO_SHIPPRIORITY` tinyint(4) NOT NULL COMMENT "",
+        `LO_QUANTITY` tinyint(4) NOT NULL COMMENT "",
+        `LO_EXTENDEDPRICE` int(11) NOT NULL COMMENT "",
+        `LO_ORDTOTALPRICE` int(11) NOT NULL COMMENT "",
+        `LO_DISCOUNT` tinyint(4) NOT NULL COMMENT "",
+        `LO_REVENUE` int(11) NOT NULL COMMENT "",
+        `LO_SUPPLYCOST` int(11) NOT NULL COMMENT "",
+        `LO_TAX` tinyint(4) NOT NULL COMMENT "",
+        `LO_COMMITDATE` date NOT NULL COMMENT "",
+        `LO_SHIPMODE` varchar(100) NOT NULL COMMENT "",
+        `C_NAME` varchar(100) NOT NULL COMMENT "",
+        `C_ADDRESS` varchar(100) NOT NULL COMMENT "",
+        `C_CITY` varchar(100) NOT NULL COMMENT "",
+        `C_NATION` varchar(100) NOT NULL COMMENT "",
+        `C_REGION` varchar(100) NOT NULL COMMENT "",
+        `C_PHONE` varchar(100) NOT NULL COMMENT "",
+        `C_MKTSEGMENT` varchar(100) NOT NULL COMMENT "",
+        `S_NAME` varchar(100) NOT NULL COMMENT "",
+        `S_ADDRESS` varchar(100) NOT NULL COMMENT "",
+        `S_CITY` varchar(100) NOT NULL COMMENT "",
+        `S_NATION` varchar(100) NOT NULL COMMENT "",
+        `S_REGION` varchar(100) NOT NULL COMMENT "",
+        `S_PHONE` varchar(100) NOT NULL COMMENT "",
+        `P_NAME` varchar(100) NOT NULL COMMENT "",
+        `P_MFGR` varchar(100) NOT NULL COMMENT "",
+        `P_CATEGORY` varchar(100) NOT NULL COMMENT "",
+        `P_BRAND` varchar(100) NOT NULL COMMENT "",
+        `P_COLOR` varchar(100) NOT NULL COMMENT "",
+        `P_TYPE` varchar(100) NOT NULL COMMENT "",
+        `P_SIZE` tinyint(4) NOT NULL COMMENT "",
+        `P_CONTAINER` varchar(100) NOT NULL COMMENT ""
+        ) ENGINE=OLAP
+        DUPLICATE KEY(`LO_ORDERDATE`, `LO_ORDERKEY`)
+        COMMENT "OLAP"
+        PARTITION BY RANGE(`LO_ORDERDATE`)
+        (PARTITION p1992 VALUES [("-2147483648"), ("19930101")),
+        PARTITION p1993 VALUES [("19930101"), ("19940101")),
+        PARTITION p1994 VALUES [("19940101"), ("19950101")),
+        PARTITION p1995 VALUES [("19950101"), ("19960101")),
+        PARTITION p1996 VALUES [("19960101"), ("19970101")),
+        PARTITION p1997 VALUES [("19970101"), ("19980101")),
+        PARTITION p1998 VALUES [("19980101"), ("19990101")))
+        DISTRIBUTED BY HASH(`LO_ORDERKEY`) BUCKETS 48
+        PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "groupxx1",
+        "in_memory" = "false",
+        "storage_format" = "DEFAULT"
+        );
+        """
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (19930101  [...]
+
+    test {
+        sql """create materialized view lineorder_q_1_1 as 
+                SELECT LO_ORDERKEY, SUM(LO_EXTENDEDPRICE * LO_DISCOUNT)
+                FROM lineorder_flat GROUP BY
+                    LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY;"""
+        exception "not in select list"
+    }
+
+    createMV ("""create materialized view lineorder_q_1_1 as 
+                SELECT LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY, 
SUM(LO_EXTENDEDPRICE * LO_DISCOUNT)
+                FROM lineorder_flat GROUP BY
+                    LO_ORDERKEY, LO_ORDERDATE, LO_DISCOUNT, LO_QUANTITY;""")
+
+    createMV ("""create materialized view lineorder_q_2_1 as 
+                SELECT
+                    (LO_ORDERDATE DIV 10000) AS YEAR,
+                    P_BRAND, P_CATEGORY, S_REGION,
+                    SUM(LO_REVENUE)
+                FROM lineorder_flat
+                GROUP BY YEAR, P_BRAND, P_CATEGORY,S_REGION;""")
+
+    createMV ("""create materialized view lineorder_q_3_1 as 
+                SELECT
+                    C_NATION,
+                    S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR, C_REGION, 
S_REGION, LO_ORDERDATE,
+                    SUM(LO_REVENUE) AS revenue
+                FROM lineorder_flat
+                GROUP BY C_NATION, S_NATION, YEAR, C_REGION, S_REGION, 
LO_ORDERDATE;""")
+
+    createMV ("""create materialized view lineorder_q_4_1 as 
+                SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
+                C_NATION,C_REGION,S_REGION,P_MFGR,
+                SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
+                FROM lineorder_flat
+                GROUP BY YEAR, C_NATION,C_REGION,S_REGION,P_MFGR;""")
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (19930101  [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (19920101  [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (19930101 , 2 , 2 , 2 , 2 ,  [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, 
LO_SHIPMODE,C_NAME,C_ADDRESS,C_CITY,C_NATION,C_REGION,C_PHONE,C_MKTSEGMENT,S_NAME,S_ADDRESS,S_CITY,S_NATION,S_REGION,S_PHONE,P_NAME,P_MFGR,P_CATEGORY,P_BRAND,P_COLOR,P_TYPE,P_SIZE,P_CONTAINER)
 VALUES (2 , 2 , 2 , 2 , 2 , 2 ,'2', [...]
+
+    sql """INSERT INTO lineorder_flat (LO_ORDERDATE, LO_ORDERKEY, 
LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERPRIORITY, 
LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, 
LO_REVENUE, LO_SUPPLYCOST, LO_TAX, LO_COMMITDATE, LO_SHIPMODE, C_NAME, 
C_ADDRESS, C_CITY, C_NATION, C_REGION, C_PHONE, C_MKTSEGMENT, S_NAME, 
S_ADDRESS, S_CITY, S_NATION, S_REGION, S_PHONE, P_NAME, P_MFGR, P_CATEGORY, 
P_BRAND, P_COLOR,P_TYPE,P_SIZE,P_CONTAINER) VALUES (1 , 1 , 1 [...]
+
+    qt_select_star "select * from lineorder_flat order by 1,2;"
+    
+    explain {
+        sql("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
+                FROM lineorder_flat
+                WHERE
+                    LO_ORDERDATE >= 19930101
+                    AND LO_ORDERDATE <= 19931231
+                    AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
+                    AND LO_QUANTITY < 25;""")
+        contains "(lineorder_q_1_1)"
+    }
+    qt_select_q_1_1 """SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
+                FROM lineorder_flat
+                WHERE
+                    LO_ORDERDATE >= 19930101
+                    AND LO_ORDERDATE <= 19931231
+                    AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
+                    AND LO_QUANTITY < 25;"""
+
+    explain {
+        sql("""SELECT
+                SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
+                P_BRAND
+            FROM lineorder_flat
+            WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
+            GROUP BY (LO_ORDERDATE DIV 10000), P_BRAND
+            ORDER BY YEAR, P_BRAND;""")
+        contains "(lineorder_q_2_1)"
+    }
+    qt_select_q_2_1 """SELECT
+                    SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
+                    P_BRAND
+                FROM lineorder_flat
+                WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
+                GROUP BY YEAR, P_BRAND
+                ORDER BY YEAR, P_BRAND;"""
+
+    explain {
+        sql("""SELECT
+                C_NATION,
+                S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
+                SUM(LO_REVENUE) AS revenue
+            FROM lineorder_flat
+            WHERE
+                C_REGION = 'ASIA'
+                AND S_REGION = 'ASIA'
+                AND LO_ORDERDATE >= 19920101
+                AND LO_ORDERDATE <= 19971231
+            GROUP BY C_NATION, S_NATION, YEAR
+            ORDER BY YEAR ASC, revenue DESC;""")
+        contains "(lineorder_q_3_1)"
+    }
+    qt_select_mv """SELECT
+                        C_NATION,
+                        S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
+                        SUM(LO_REVENUE) AS revenue
+                    FROM lineorder_flat
+                    WHERE
+                        C_REGION = 'ASIA'
+                        AND S_REGION = 'ASIA'
+                        AND LO_ORDERDATE >= 19920101
+                        AND LO_ORDERDATE <= 19971231
+                    GROUP BY C_NATION, S_NATION, YEAR
+                    ORDER BY YEAR ASC, revenue DESC;"""
+
+    explain {
+        sql("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
+                C_NATION,
+                SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
+                FROM lineorder_flat
+                WHERE
+                C_REGION = 'AMERICA'
+                AND S_REGION = 'AMERICA'
+                AND P_MFGR IN ('MFGR#1', 'MFGR#2')
+                GROUP BY YEAR, C_NATION
+                ORDER BY YEAR ASC, C_NATION ASC;""")
+        contains "(lineorder_q_4_1)"
+    }
+    qt_select_mv """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
+                C_NATION,
+                SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
+                FROM lineorder_flat
+                WHERE
+                C_REGION = 'AMERICA'
+                AND S_REGION = 'AMERICA'
+                AND P_MFGR IN ('MFGR#1', 'MFGR#2')
+                GROUP BY YEAR, C_NATION
+                ORDER BY YEAR ASC, C_NATION ASC;"""
+}
diff --git 
a/regression-test/suites/nereids_p0/sql_functions/test_arith_functions.groovy 
b/regression-test/suites/nereids_p0/sql_functions/test_arith_functions.groovy
index 5294a0e58e..2778d0f359 100644
--- 
a/regression-test/suites/nereids_p0/sql_functions/test_arith_functions.groovy
+++ 
b/regression-test/suites/nereids_p0/sql_functions/test_arith_functions.groovy
@@ -26,7 +26,7 @@ suite("test_arith_functions") {
     }
     test {
         sql 'select int_divide(1, 1), bitand(1, 1), bitor(2, 2), bitxor(3.0, 
2.0), bitnot(3.0)'
-        result([[1L, 1, 2, 1L, -4L]])
+        result([[1, 1, 2, 1L, -4L]])
     }
     test {
         sql 'select add(k1, k2) + subtract(k2, k3) + multiply(k3, k4), 
cast(divide(k4, k3) + mod(k4, k3) as bigint) from test order by k1 limit 1'


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to