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 8d7abf60f94 [Bug](materialized-view)
SelectMaterializedIndexWithAggregate do not change plan when match ba… (#26145)
8d7abf60f94 is described below
commit 8d7abf60f94d2d1208b71e96b9290ea02122b8d8
Author: Pxl <[email protected]>
AuthorDate: Tue Oct 31 14:11:08 2023 +0800
[Bug](materialized-view) SelectMaterializedIndexWithAggregate do not change
plan when match ba… (#26145)
* SelectMaterializedIndexWithAggregate do not change plan when match base
index
* forbid table withh alias
---
.../doris/analysis/CreateMaterializedViewStmt.java | 3 ++
.../mv/SelectMaterializedIndexWithAggregate.java | 40 ++++++++++++++++++++++
.../ut/testProjectionMV1/testProjectionMV1.out | 8 +++++
.../ut/testProjectionMV1/testProjectionMV1.groovy | 17 +++++++++
4 files changed, 68 insertions(+)
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 5c3c117a71f..c42f3734f3d 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
@@ -298,6 +298,9 @@ public class CreateMaterializedViewStmt extends DdlStmt {
if (tableRefList.size() != 1) {
throw new AnalysisException("The materialized view only support
one table in from clause.");
}
+ if (!isReplay && tableRefList.get(0).hasExplicitAlias()) {
+ throw new AnalysisException("The materialized view not support
table with alias.");
+ }
TableName tableName = tableRefList.get(0).getName();
if (tableName == null) {
throw new AnalysisException("table in from clause is invalid,
please check if it's single table "
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
index 12fe7b75c9c..4c3179c2903 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
@@ -116,6 +116,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
agg.getGroupByExpressions(),
new HashSet<>(agg.getExpressions()));
+ if (result.indexId == scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -162,6 +166,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -207,6 +215,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
collectRequireExprWithAggAndProject(agg.getExpressions(), project.getProjects())
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -265,6 +277,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -322,6 +338,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -369,6 +389,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
nonVirtualGroupByExprs(agg),
new HashSet<>(agg.getExpressions()));
+ if (result.indexId == scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -422,6 +446,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -474,6 +502,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
collectRequireExprWithAggAndProject(agg.getExpressions(), project.getProjects())
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -539,6 +571,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
@@ -605,6 +641,10 @@ public class SelectMaterializedIndexWithAggregate extends
AbstractSelectMaterial
requiredExpr
);
+ if (result.indexId ==
scan.getTable().getBaseIndexId()) {
+ return ctx.root;
+ }
+
LogicalOlapScan mvPlan =
scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId);
SlotContext slotContext =
generateBaseScanExprToMvExpr(mvPlan);
diff --git
a/regression-test/data/mv_p0/ut/testProjectionMV1/testProjectionMV1.out
b/regression-test/data/mv_p0/ut/testProjectionMV1/testProjectionMV1.out
index ba455b7e850..523176bb0a5 100644
--- a/regression-test/data/mv_p0/ut/testProjectionMV1/testProjectionMV1.out
+++ b/regression-test/data/mv_p0/ut/testProjectionMV1/testProjectionMV1.out
@@ -9,3 +9,11 @@
1 1
2 2
+-- !select_mv --
+1 2
+2 2
+
+-- !select_mv --
+1 2
+2 2
+
diff --git
a/regression-test/suites/mv_p0/ut/testProjectionMV1/testProjectionMV1.groovy
b/regression-test/suites/mv_p0/ut/testProjectionMV1/testProjectionMV1.groovy
index c23b533832f..329e54a1f2d 100644
--- a/regression-test/suites/mv_p0/ut/testProjectionMV1/testProjectionMV1.groovy
+++ b/regression-test/suites/mv_p0/ut/testProjectionMV1/testProjectionMV1.groovy
@@ -34,6 +34,11 @@ suite ("testProjectionMV1") {
sql """insert into emps values("2020-01-01",1,"a",1,1,1);"""
sql """insert into emps values("2020-01-02",2,"b",2,2,2);"""
+ test {
+ sql "create materialized view emps_mv as select deptno, empid from
emps t order by deptno;"
+ exception "errCode = 2,"
+ }
+
createMV("create materialized view emps_mv as select deptno, empid from
emps order by deptno;")
sql """insert into emps values("2020-01-01",1,"a",1,1,1);"""
@@ -50,4 +55,16 @@ suite ("testProjectionMV1") {
contains "(emps_mv)"
}
qt_select_mv "select empid, deptno from emps order by empid;"
+
+ explain {
+ sql("select empid, sum(deptno) from emps group by empid order by
empid;")
+ contains "(emps_mv)"
+ }
+ qt_select_mv "select empid, sum(deptno) from emps group by empid order by
empid;"
+
+ explain {
+ sql("select deptno, sum(empid) from emps group by deptno order by
deptno;")
+ contains "(emps_mv)"
+ }
+ qt_select_mv "select deptno, sum(empid) from emps group by deptno order by
deptno;"
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]