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

Reply via email to