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 <pxl...@qq.com> 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org