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]