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 28c55f15c9 [Enchancement](Materialized-View) add more error infomation 
for select materialized view fail (#17262)
28c55f15c9 is described below

commit 28c55f15c98f0c6ffd403f532b7b1c951759150c
Author: Pxl <pxl...@qq.com>
AuthorDate: Mon Mar 6 18:59:46 2023 +0800

    [Enchancement](Materialized-View) add more error infomation for select 
materialized view fail (#17262)
    
    add more error infomation for select materialized view fail
---
 .../java/org/apache/doris/analysis/SlotRef.java    |  9 +++
 .../apache/doris/planner/SingleNodePlanner.java    | 13 ++++-
 .../mv_with_view/mv_with_view.groovy               |  4 ++
 .../test_mv_useless/test_agg_mv_useless.groovy     | 47 +---------------
 .../test_mv_useless/test_dup_mv_useless.groovy     | 65 ++--------------------
 .../test_mv_useless/test_uniq_mv_useless.groovy    | 16 +-----
 6 files changed, 33 insertions(+), 121 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
index aa10992ee8..ffb8c2ef37 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
@@ -551,10 +551,19 @@ public class SlotRef extends Expr {
         if (!(originExpr instanceof SlotRef)) {
             return true; // means this is alias of other expr.
         }
+
         SlotRef aliasExpr = (SlotRef) originExpr;
         if (aliasExpr.getColumnName() == null) {
+            if (desc.getSourceExprs() != null) {
+                for (Expr expr : desc.getSourceExprs()) {
+                    if (!expr.matchExprs(exprs, stmt, ignoreAlias, tableName)) 
{
+                        return false;
+                    }
+                }
+            }
             return true; // means this is alias of other expr.
         }
+
         if (aliasExpr.desc != null) {
             TableIf table = aliasExpr.desc.getParent().getTable();
             if (table != null && table.getName() != tableName) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
index b6abbb8b30..cab354b0be 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
@@ -68,6 +68,7 @@ import org.apache.doris.common.UserException;
 import org.apache.doris.common.util.VectorizedUtil;
 import org.apache.doris.planner.external.ExternalFileScanNode;
 import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.rewrite.mvrewrite.MVSelectFailedException;
 import org.apache.doris.thrift.TNullSide;
 import org.apache.doris.thrift.TPushAggOp;
 
@@ -1316,8 +1317,10 @@ public class SingleNodePlanner {
     }
 
     public boolean selectMaterializedView(QueryStmt queryStmt, Analyzer 
analyzer)
-            throws UserException {
+            throws UserException, MVSelectFailedException {
         boolean selectFailed = false;
+        boolean haveError = false;
+        String errorMsg = "select fail reason: ";
         if (queryStmt instanceof SelectStmt) {
             SelectStmt selectStmt = (SelectStmt) queryStmt;
             for (TableRef tableRef : selectStmt.getTableRefs()) {
@@ -1364,6 +1367,11 @@ public class SingleNodePlanner {
                             
selectStmt.getAggInfo().updateTypeOfAggregateExprs();
                         }
                     } catch (Exception e) {
+                        if (haveError) {
+                            errorMsg += ",";
+                        }
+                        errorMsg += e.getMessage();
+                        haveError = true;
                         tupleSelectFailed = true;
                     }
                 }
@@ -1379,6 +1387,9 @@ public class SingleNodePlanner {
                 selectFailed |= 
selectMaterializedView(unionOperand.getQueryStmt(), analyzer);
             }
         }
+        if (haveError) {
+            throw new MVSelectFailedException(errorMsg);
+        }
         return selectFailed;
     }
 
diff --git 
a/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy 
b/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
index 4b794b7cb1..4c147d51ac 100644
--- 
a/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
+++ 
b/regression-test/suites/materialized_view_p0/mv_with_view/mv_with_view.groovy
@@ -45,6 +45,10 @@ suite ("mv_with_view") {
     }
     qt_select_star "select * from d_table order by k1;"
 
+    sql """
+        drop view if exists v_k132;
+    """
+
     sql """
         create view v_k132 as select k1,k3,k2 from d_table where k1 = 1;
     """
diff --git 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
index 16bb73b2b8..e818fda575 100644
--- 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
+++ 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_agg_mv_useless.groovy
@@ -57,49 +57,8 @@ suite ("test_agg_mv_useless") {
         exception "errCode = 2,"
     }
 
-    sql "create materialized view k1_u1 as select k1 from ${testTable} group 
by k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-
-    sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable} 
group by k2,k1 order by k2,k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-
-    sql "create materialized view k1_sumk3 as select k1,sum(k3) from 
${testTable} group by k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
+    createMV("create materialized view k1_u1 as select k1 from ${testTable} 
group by k1;")
+    createMV("create materialized view k1_k2_u21 as select k2,k1 from 
${testTable} group by k2,k1 order by k2,k1;")
+    createMV("create materialized view k1_sumk3 as select k1,sum(k3) from 
${testTable} group by k1;")
     sql "insert into ${testTable} select 4,4,4;"
 }
diff --git 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
index 6cb308b8bd..914c713309 100644
--- 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
+++ 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_dup_mv_useless.groovy
@@ -49,66 +49,9 @@ suite ("test_dup_mv_useless") {
         exception "errCode = 2,"
     }
 
-    sql "create materialized view k1_u1 as select k1 from ${testTable} group 
by k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            Thread.sleep(5000)
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-    sql "create materialized view k1_k2_u12 as select k1,k2 from ${testTable} 
group by k1,k2;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            Thread.sleep(5000)
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-    sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable} 
group by k2,k1 order by k2,k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            Thread.sleep(5000)
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-    sql " create materialized view k1_k2_sumk3 as select k1,k2,sum(k3) from 
${testTable} group by k1,k2;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            Thread.sleep(5000)
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-
+    createMV("create materialized view k1_u1 as select k1 from ${testTable} 
group by k1;")
+    createMV("create materialized view k1_k2_u12 as select k1,k2 from 
${testTable} group by k1,k2;")
+    createMV("create materialized view k1_k2_u21 as select k2,k1 from 
${testTable} group by k2,k1 order by k2,k1;")
+    createMV("create materialized view k1_k2_sumk3 as select k1,k2,sum(k3) 
from ${testTable} group by k1,k2;")
     sql "insert into ${testTable} select 4,4,4;"
 }
diff --git 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
index 1d79d442db..50d12f4028 100644
--- 
a/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
+++ 
b/regression-test/suites/materialized_view_p0/test_mv_useless/test_uniq_mv_useless.groovy
@@ -53,20 +53,6 @@ suite ("test_uniq_mv_useless") {
         exception "errCode = 2,"
     }
 
-    sql "create materialized view k1_k2_u21 as select k2,k1 from ${testTable} 
group by k2,k1 order by k2,k1;"
-    max_try_secs = 60
-    while (max_try_secs--) {
-        String res = getJobState(testTable)
-        if (res == "FINISHED") {
-            break
-        } else {
-            Thread.sleep(2000)
-            if (max_try_secs < 1) {
-                println "test timeout," + "state:" + res
-                assertEquals("FINISHED",res)
-            }
-        }
-    }
-
+    createMV ("create materialized view k1_k2_u21 as select k2,k1 from 
${testTable} group by k2,k1 order by k2,k1;")
     sql "insert into ${testTable} select 4,4,4;"
 }


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

Reply via email to