From a0d2b1ec56bf2034701a6a2f1673054905528a48 Mon Sep 17 00:00:00 2001 From: Pxl Date: Thu, 12 Oct 2023 11:02:55 +0800 Subject: [PATCH] [Bug](materialized-view) fix not match mv when some alias on agg (#25321) fix not match mv when some alias on agg --- .../mv/AbstractSelectMaterializedIndexRule.java | 14 +++++++++----- .../mv/SelectMaterializedIndexWithAggregate.java | 2 +- .../testAggQueryOnAggMV1/testAggQueryOnAggMV1.out | 3 +++ .../testAggQueryOnAggMV1.groovy | 6 +++++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java index f44900c762..45453f760d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java @@ -605,16 +605,20 @@ public abstract class AbstractSelectMaterializedIndexRule { } } - protected List generateProjectsAlias( - List oldProjects, SlotContext slotContext) { + protected List generateProjectsAlias(List oldProjects, + SlotContext slotContext) { return oldProjects.stream().map(e -> { + Expression real = e; + if (real instanceof Alias) { + real = real.child(0); + } if (slotContext.baseSlotToMvSlot.containsKey(e.toSlot())) { return new Alias(e.getExprId(), slotContext.baseSlotToMvSlot.get(e.toSlot()), e.getName()); } - if (slotContext.mvNameToMvSlot.containsKey(e.toSql())) { - return new Alias(e.getExprId(), slotContext.mvNameToMvSlot.get(e.toSql()), e.getName()); + if (slotContext.mvNameToMvSlot.containsKey(real.toSql())) { + return new Alias(e.getExprId(), slotContext.mvNameToMvSlot.get(real.toSql()), e.getName()); } - return e; + return e.toSlot(); }).collect(ImmutableList.toImmutableList()); } } 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 abc85eb3f1..108614e496 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 @@ -213,7 +213,7 @@ public class SelectMaterializedIndexWithAggregate extends AbstractSelectMaterial if (result.exprRewriteMap.isEmpty()) { return new LogicalProject<>( - generateProjectsAlias(agg.getOutput(), slotContext), + generateProjectsAlias(agg.getOutputs(), slotContext), new ReplaceExpressions(slotContext).replace( agg.withChildren( project.withProjectsAndChild( diff --git a/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out b/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out index 6db240393b..e64409afb2 100644 --- a/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out +++ b/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out @@ -10,3 +10,6 @@ 2 2 3 3 +-- !select_mv -- +7 + diff --git a/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy b/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy index 19c301ec6c..044b92425e 100644 --- a/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy +++ b/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy @@ -54,5 +54,9 @@ suite ("testAggQueryOnAggMV1") { } qt_select_mv "select sum(salary), deptno from emps group by deptno order by deptno;" - + explain { + sql("select sum(salary) as salary from emps;") + contains "(emps_mv)" + } + qt_select_mv "select sum(salary) as salary from emps;" } \ No newline at end of file