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 4d44cea784 [Bug](materialized-view) check group expr at create mv 
(#21798)
4d44cea784 is described below

commit 4d44cea7846c16175cb79980b9800fb8be16f0e9
Author: Pxl <[email protected]>
AuthorDate: Fri Jul 14 15:39:38 2023 +0800

    [Bug](materialized-view) check group expr at create mv (#21798)
    
    check group expr at create mv
---
 .../doris/analysis/CreateMaterializedViewStmt.java | 18 ++++++-
 .../doris/catalog/MaterializedIndexMeta.java       |  3 ++
 .../java/org/apache/doris/catalog/OlapTable.java   | 12 -----
 .../java/org/apache/doris/planner/PlanNode.java    |  4 +-
 .../data/mv_p0/group_check/group_check.out         |  7 +++
 .../suites/mv_p0/group_check/group_check.groovy    | 56 ++++++++++++++++++++++
 .../suites/mv_p0/ssb/q_1_1/q_1_1.groovy            |  6 +--
 .../suites/mv_p0/ssb/q_2_1/q_2_1.groovy            |  6 +--
 .../suites/mv_p0/ssb/q_3_1/q_3_1.groovy            |  6 +--
 .../suites/mv_p0/ssb/q_4_1/q_4_1.groovy            |  6 +--
 .../test_agg_mv_schema_change.groovy               |  2 +-
 11 files changed, 97 insertions(+), 29 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index b849125125..0ed198afe5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -266,7 +266,7 @@ public class CreateMaterializedViewStmt extends DdlStmt {
     }
 
     private void analyzeGroupByClause() throws AnalysisException {
-        if (selectStmt.getGroupByClause() == null) {
+        if (isReplay || selectStmt.getGroupByClause() == null) {
             return;
         }
         List<Expr> groupingExprs = 
selectStmt.getGroupByClause().getGroupingExprs();
@@ -296,6 +296,22 @@ public class CreateMaterializedViewStmt extends DdlStmt {
                 throw new AnalysisException("The select expr " + lhs + " not 
in grouping or aggregate columns");
             }
         }
+
+        for (Expr groupExpr : groupingExprs) {
+            boolean match = false;
+            String rhs = 
selectStmt.getExprFromAliasSMap(groupExpr).toSqlWithoutTbl();
+            for (Expr expr : selectExprs) {
+                String lhs = 
selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl();
+                if (lhs.equalsIgnoreCase(rhs)) {
+                    match = true;
+                    break;
+                }
+            }
+
+            if (!match) {
+                throw new AnalysisException("The grouping expr " + rhs + " not 
in select list.");
+            }
+        }
     }
 
     private void analyzeOrderByClause() throws AnalysisException {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
index 12cab9f7ec..1d446b0659 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
@@ -111,6 +111,9 @@ public class MaterializedIndexMeta implements Writable, 
GsonPostProcessable {
 
     public void setWhereClause(Expr whereClause) {
         this.whereClause = whereClause;
+        if (this.whereClause != null) {
+            this.whereClause.setDisableTableName(true);
+        }
     }
 
     public Expr getWhereClause() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index d76e2e7aaf..19a186607f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -457,18 +457,6 @@ public class OlapTable extends Table {
         return null;
     }
 
-    public boolean findWhereClause(Expr whereClause) {
-        for (MaterializedIndexMeta meta : getVisibleIndexIdToMeta().values()) {
-            if (meta.getWhereClause() != null) {
-                if 
(MaterializedIndexMeta.matchColumnName(meta.getWhereClause().toSqlWithoutTbl(),
-                        whereClause.toSqlWithoutTbl())) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     @Override
     public long getUpdateTime() {
         long updateTime = tempPartitions.getUpdateTime();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java
index cf5d14cb5e..fe7f5c2e9b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java
@@ -138,8 +138,6 @@ public abstract class PlanNode extends TreeNode<PlanNode> 
implements PlanStats {
     // Runtime filters assigned to this node.
     protected List<RuntimeFilter> runtimeFilters = new ArrayList<>();
 
-    private boolean cardinalityIsDone = false;
-
     protected List<SlotId> outputSlotIds;
 
     protected StatisticalType statisticalType = StatisticalType.DEFAULT;
@@ -432,7 +430,7 @@ public abstract class PlanNode extends TreeNode<PlanNode> 
implements PlanStats {
         return targetConjuncts.get(0);
     }
 
-    protected List<Expr> splitAndCompoundPredicateToConjuncts(Expr vconjunct) {
+    public static List<Expr> splitAndCompoundPredicateToConjuncts(Expr 
vconjunct) {
         List<Expr> conjuncts = Lists.newArrayList();
         if (vconjunct instanceof CompoundPredicate) {
             CompoundPredicate andCompound = (CompoundPredicate) vconjunct;
diff --git a/regression-test/data/mv_p0/group_check/group_check.out 
b/regression-test/data/mv_p0/group_check/group_check.out
new file mode 100644
index 0000000000..94203dd936
--- /dev/null
+++ b/regression-test/data/mv_p0/group_check/group_check.out
@@ -0,0 +1,7 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select_star --
+-4     -4      -4      d
+1      1       1       a
+2      2       2       b
+3      -3      \N      c
+
diff --git a/regression-test/suites/mv_p0/group_check/group_check.groovy 
b/regression-test/suites/mv_p0/group_check/group_check.groovy
new file mode 100644
index 0000000000..9762935e3b
--- /dev/null
+++ b/regression-test/suites/mv_p0/group_check/group_check.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.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite ("group_check") {
+
+    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';"
+
+    test {
+        sql "create materialized view kgroup as select sum(k3) from d_table 
group by k1,k2;"
+        exception "errCode = 2,"
+    }
+
+    test {
+        sql "create materialized view kgroup as select k1,sum(k3) from d_table 
group by k1,k2;"
+        exception "errCode = 2,"
+    }
+
+    createMV ("create materialized view kgroup as select k1,k2,sum(k3) from 
d_table group by k1,k2;")
+
+
+    sql "insert into d_table select -4,-4,-4,'d';"
+
+    qt_select_star "select * from d_table order by k1;"
+}
diff --git a/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
index 0e7b042d68..780e3506c0 100644
--- a/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
@@ -85,7 +85,7 @@ suite ("mv_ssb_q_1_1") {
 
     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  [...]
 
-    createMV ("""create materialized view lineorder_mv as 
+    createMV ("""create materialized view lineorder_q_1_1 as 
                 SELECT LO_ORDERKEY, SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS 
revenue
                 FROM lineorder_flat
                 WHERE
@@ -108,7 +108,7 @@ suite ("mv_ssb_q_1_1") {
                     AND LO_ORDERDATE <= 19931231
                     AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
                     AND LO_QUANTITY < 25;""")
-        contains "(lineorder_mv)"
+        contains "(lineorder_q_1_1)"
     }
     qt_select_mv """SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
                 FROM lineorder_flat
@@ -118,7 +118,7 @@ suite ("mv_ssb_q_1_1") {
                     AND LO_DISCOUNT >= 1 AND LO_DISCOUNT <= 3
                     AND LO_QUANTITY < 25;"""
 
-    sql""" drop materialized view lineorder_mv on lineorder_flat; """
+    sql""" drop materialized view lineorder_q_1_1 on lineorder_flat; """
 
     qt_select """SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
                 FROM lineorder_flat
diff --git a/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
index 02b61ceab5..7441073ae4 100644
--- a/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
@@ -85,7 +85,7 @@ suite ("mv_ssb_q_2_1") {
 
     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  [...]
 
-    createMV ("""create materialized view lineorder_mv as 
+    createMV ("""create materialized view lineorder_q_2_1 as 
                 SELECT
                     (LO_ORDERDATE DIV 10000) AS YEAR,
                     P_BRAND,
@@ -107,7 +107,7 @@ suite ("mv_ssb_q_2_1") {
             WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
             GROUP BY YEAR, P_BRAND
             ORDER BY YEAR, P_BRAND;""")
-        contains "(lineorder_mv)"
+        contains "(lineorder_q_2_1)"
     }
     qt_select_mv """SELECT
                     SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
@@ -117,7 +117,7 @@ suite ("mv_ssb_q_2_1") {
                 GROUP BY YEAR, P_BRAND
                 ORDER BY YEAR, P_BRAND;"""
 
-    sql""" drop materialized view lineorder_mv on lineorder_flat; """
+    sql""" drop materialized view lineorder_q_2_1 on lineorder_flat; """
 
     qt_select """SELECT
                     SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
diff --git a/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
index b8c6ed70c0..61f9ac035d 100644
--- a/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
@@ -85,7 +85,7 @@ suite ("mv_ssb_q_3_1") {
 
     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  [...]
 
-    createMV ("""create materialized view lineorder_mv as 
+    createMV ("""create materialized view lineorder_q_3_1 as 
                 SELECT
                     C_NATION,
                     S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
@@ -115,7 +115,7 @@ suite ("mv_ssb_q_3_1") {
                 AND LO_ORDERDATE <= 19971231
             GROUP BY C_NATION, S_NATION, YEAR
             ORDER BY YEAR ASC, revenue DESC;""")
-        contains "(lineorder_mv)"
+        contains "(lineorder_q_3_1)"
     }
     qt_select_mv """SELECT
                         C_NATION,
@@ -130,7 +130,7 @@ suite ("mv_ssb_q_3_1") {
                     GROUP BY C_NATION, S_NATION, YEAR
                     ORDER BY YEAR ASC, revenue DESC;"""
 
-    sql""" drop materialized view lineorder_mv on lineorder_flat; """
+    sql""" drop materialized view lineorder_q_3_1 on lineorder_flat; """
 
     qt_select """SELECT
                     C_NATION,
diff --git a/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
index 5869e05754..788b203486 100644
--- a/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
@@ -85,7 +85,7 @@ suite ("mv_ssb_q_4_1") {
 
     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 [...]
 
-    createMV ("""create materialized view lineorder_mv as 
+    createMV ("""create materialized view lineorder_q_4_1 as 
                 SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
                 C_NATION,
                 SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
@@ -112,7 +112,7 @@ suite ("mv_ssb_q_4_1") {
                 AND P_MFGR IN ('MFGR#1', 'MFGR#2')
                 GROUP BY YEAR, C_NATION
                 ORDER BY YEAR ASC, C_NATION ASC;""")
-        contains "(lineorder_mv)"
+        contains "(lineorder_q_4_1)"
     }
     qt_select_mv """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
                 C_NATION,
@@ -125,7 +125,7 @@ suite ("mv_ssb_q_4_1") {
                 GROUP BY YEAR, C_NATION
                 ORDER BY YEAR ASC, C_NATION ASC;"""
 
-    sql""" drop materialized view lineorder_mv on lineorder_flat; """
+    sql""" drop materialized view lineorder_q_4_1 on lineorder_flat; """
 
     qt_select """SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
             C_NATION,
diff --git 
a/regression-test/suites/schema_change_p0/test_agg_mv_schema_change.groovy 
b/regression-test/suites/schema_change_p0/test_agg_mv_schema_change.groovy
index 4e691679fd..c34522084a 100644
--- a/regression-test/suites/schema_change_p0/test_agg_mv_schema_change.groovy
+++ b/regression-test/suites/schema_change_p0/test_agg_mv_schema_change.groovy
@@ -94,7 +94,7 @@ suite ("test_agg_mv_schema_change") {
 
         //add materialized view
         def mvName = "mv1"
-        sql "create materialized view ${mvName} as select user_id, date, city, 
age, sum(cost) from ${tableName} group by user_id, date, city, age, sex;"
+        sql "create materialized view ${mvName} as select user_id, date, city, 
age, sum(cost) from ${tableName} group by user_id, date, city, age;"
 
         waitForJob(tableName, 3000)
 


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

Reply via email to