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]