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 e7bcd970f5 [Bug](materialized-view) fix isDisableTuplesMVRewriter 
rreturn true when expr is literal (#18246)
e7bcd970f5 is described below

commit e7bcd970f5795dafa4270242e2f2debd10dadc0f
Author: Pxl <[email protected]>
AuthorDate: Fri Mar 31 11:30:47 2023 +0800

    [Bug](materialized-view) fix isDisableTuplesMVRewriter rreturn true when 
expr is literal (#18246)
    
    fix isDisableTuplesMVRewriter rreturn true when expr is literal
---
 .../main/java/org/apache/doris/analysis/Expr.java  |  6 +++++
 .../java/org/apache/doris/analysis/QueryStmt.java  |  3 +++
 .../apache/doris/planner/SingleNodePlanner.java    |  4 +++-
 .../mv_p0/multi_slot_k123p/multi_slot_k123p.out    | 26 ++++++++++++++++++++++
 .../mv_p0/multi_slot_k123p/multi_slot_k123p.groovy | 13 +++++++++++
 5 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
index a2d03c50ae..d4ad469142 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
@@ -2201,6 +2201,12 @@ public abstract class Expr extends TreeNode<Expr> 
implements ParseNode, Cloneabl
 
     public boolean matchExprs(List<Expr> exprs, SelectStmt stmt, boolean 
ignoreAlias, String tableName)
             throws AnalysisException {
+        List<SlotRef> slots = new ArrayList<>();
+        collect(SlotRef.class, slots);
+        if (slots.size() == 0) {
+            return true;
+        }
+
         String name = MaterializedIndexMeta.normalizeName(toSqlWithoutTbl());
         for (Expr expr : exprs) {
             if (CreateMaterializedViewStmt.isMVColumnNormal(name)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
index 8fc52fbe33..f966b2ab98 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
@@ -272,6 +272,9 @@ public abstract class QueryStmt extends StatementBase 
implements Queriable {
     }
 
     public boolean isDisableTuplesMVRewriter(Expr expr) {
+        if (disableTuplesMVRewriter.isEmpty()) {
+            return false;
+        }
         return 
expr.isBoundByTupleIds(disableTuplesMVRewriter.stream().collect(Collectors.toList()));
     }
 
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 9b7e716b9d..99ebfa929a 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
@@ -1327,6 +1327,7 @@ public class SingleNodePlanner {
         String errorMsg = "select fail reason: ";
         if (queryStmt instanceof SelectStmt) {
             SelectStmt selectStmt = (SelectStmt) queryStmt;
+            Set<TupleId> disableTuplesMVRewriter = Sets.newHashSet();
             for (TableRef tableRef : selectStmt.getTableRefs()) {
                 if (tableRef instanceof InlineViewRef) {
                     selectFailed |= selectMaterializedView(((InlineViewRef) 
tableRef).getViewStmt(),
@@ -1386,9 +1387,10 @@ public class SingleNodePlanner {
                 }
                 if (tupleSelectFailed) {
                     selectFailed = true;
-                    
selectStmt.updateDisableTuplesMVRewriter(olapScanNode.getTupleId());
+                    disableTuplesMVRewriter.add(olapScanNode.getTupleId());
                 }
             }
+            selectStmt.updateDisableTuplesMVRewriter(disableTuplesMVRewriter);
         } else {
             Preconditions.checkState(queryStmt instanceof SetOperationStmt);
             SetOperationStmt unionStmt = (SetOperationStmt) queryStmt;
diff --git a/regression-test/data/mv_p0/multi_slot_k123p/multi_slot_k123p.out 
b/regression-test/data/mv_p0/multi_slot_k123p/multi_slot_k123p.out
index 8065838336..8cd7e32239 100644
--- a/regression-test/data/mv_p0/multi_slot_k123p/multi_slot_k123p.out
+++ b/regression-test/data/mv_p0/multi_slot_k123p/multi_slot_k123p.out
@@ -24,3 +24,29 @@
 3      \N
 3      \N
 
+-- !select_mv --
+-4     -4
+-4     -4
+-4     -4
+-4     -4
+1      1
+2      2
+3      -3
+3      -3
+3      -3
+3      -3
+3      -3
+3      -3
+3      -3
+3      -3
+3      -3
+
+-- !select_mv --
+-4     5.7.99
+-4     5.7.99
+1      5.7.99
+2      5.7.99
+3      5.7.99
+3      5.7.99
+3      5.7.99
+
diff --git 
a/regression-test/suites/mv_p0/multi_slot_k123p/multi_slot_k123p.groovy 
b/regression-test/suites/mv_p0/multi_slot_k123p/multi_slot_k123p.groovy
index a8e6595d79..90e98a4dc3 100644
--- a/regression-test/suites/mv_p0/multi_slot_k123p/multi_slot_k123p.groovy
+++ b/regression-test/suites/mv_p0/multi_slot_k123p/multi_slot_k123p.groovy
@@ -56,4 +56,17 @@ suite ("multi_slot_k123p") {
         contains "(k123p)"
     }
     qt_select_mv "select k1,k2+k3 from d_table order by k1;"
+
+    explain {
+        sql("select lhs.k1,rhs.k2 from d_table as lhs right join d_table as 
rhs on lhs.k1=rhs.k1;")
+        notContains "(k123p)"
+        notContains "`mv_"
+    }
+    qt_select_mv "select lhs.k1,rhs.k2 from d_table as lhs right join d_table 
as rhs on lhs.k1=rhs.k1 order by lhs.k1;"
+
+    explain {
+        sql("select k1,version() from d_table;")
+        contains "(k123p)"
+    }
+    qt_select_mv "select k1,version() from d_table order by k1;"
 }


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

Reply via email to