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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 4551b624619 [Bug](materialized-view) add limitation for duplicate expr 
on materialized view (#27523) (#27562)
4551b624619 is described below

commit 4551b6246192d8cc602639b322283650d93a899a
Author: Pxl <[email protected]>
AuthorDate: Fri Nov 24 21:20:27 2023 +0800

    [Bug](materialized-view) add limitation for duplicate expr on materialized 
view (#27523) (#27562)
---
 .../doris/analysis/CreateMaterializedViewStmt.java | 24 ++++++++++++----------
 .../test_mv_useless/agg_invalid/agg_invalid.groovy | 10 +++++++++
 2 files changed, 23 insertions(+), 11 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 eafc24c4fda..7c28a417296 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
@@ -39,6 +39,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -46,6 +47,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 
 /**
  * Materialized view is performed to materialize the results of query.
@@ -339,19 +341,19 @@ public class CreateMaterializedViewStmt extends DdlStmt {
             }
         }
 
-        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;
-                }
+        Set<String> selectExprNames = 
Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
+        for (Expr expr : selectExprs) {
+            String selectExprName = 
selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl();
+            if (selectExprNames.contains(selectExprName)) {
+                throw new AnalysisException("The select expr " + 
selectExprName + " is duplicated.");
             }
+            selectExprNames.add(selectExprName);
+        }
 
-            if (!match) {
-                throw new AnalysisException("The grouping expr " + rhs + " not 
in select list.");
+        for (Expr expr : groupingExprs) {
+            String groupExprName = 
selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl();
+            if (!selectExprNames.contains(groupExprName)) {
+                throw new AnalysisException("The grouping expr " + 
groupExprName + " not in select list.");
             }
         }
     }
diff --git 
a/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy 
b/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy
index bdf7a567beb..9bf940e2e4f 100644
--- 
a/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy
+++ 
b/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy
@@ -41,4 +41,14 @@ suite ("agg_invalid") {
         sql "CREATE MATERIALIZED VIEW mv_4 AS SELECT p1, SUM(abs(v1)) FROM t1 
GROUP BY p1;"
         exception "errCode = 2,"
     }
+
+    test {
+        sql "CREATE MATERIALIZED VIEW mv_5 AS SELECT p1, p2, p1, SUM(v1) FROM 
t1 GROUP BY p1,p2,p1;"
+        exception "errCode = 2,"
+    }
+
+    test {
+        sql "CREATE MATERIALIZED VIEW mv_5 AS SELECT p1, p2, SUM(v1), SUM(v1) 
FROM t1 GROUP BY p1,p2;"
+        exception "errCode = 2,"
+    }
 }


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

Reply via email to