diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java index d1e38d014e..70e24c676c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java @@ -46,6 +46,7 @@ import org.apache.doris.nereids.rules.analysis.ResolveOrdinalInOrderByAndGroupBy import org.apache.doris.nereids.rules.analysis.SubqueryToApply; import org.apache.doris.nereids.rules.rewrite.MergeProjects; import org.apache.doris.nereids.rules.rewrite.SemiJoinCommute; +import org.apache.doris.nereids.rules.rewrite.SimplifyAggGroupBy; import java.util.List; import java.util.Objects; @@ -162,6 +163,7 @@ public class Analyzer extends AbstractBatchJobExecutor { bottomUp(new CheckAnalysis()), topDown(new EliminateGroupByConstant()), + topDown(new SimplifyAggGroupBy()), topDown(new NormalizeAggregate()), topDown(new HavingToFilter()), bottomUp(new SemiJoinCommute()), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java index 98721f6c48..16ae4a3143 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java @@ -120,7 +120,6 @@ import org.apache.doris.nereids.rules.rewrite.PushProjectIntoUnion; import org.apache.doris.nereids.rules.rewrite.PushProjectThroughUnion; import org.apache.doris.nereids.rules.rewrite.ReorderJoin; import org.apache.doris.nereids.rules.rewrite.RewriteCteChildren; -import org.apache.doris.nereids.rules.rewrite.SimplifyAggGroupBy; import org.apache.doris.nereids.rules.rewrite.SplitLimit; import org.apache.doris.nereids.rules.rewrite.TransposeSemiJoinAgg; import org.apache.doris.nereids.rules.rewrite.TransposeSemiJoinAggProject; @@ -217,7 +216,6 @@ public class Rewriter extends AbstractBatchJobExecutor { // but when normalizeAggregate/normalizeSort is performed, the members in apply cannot be obtained, // resulting in inconsistent output results and results in apply topDown( - new SimplifyAggGroupBy(), new NormalizeAggregate(), new CountLiteralRewrite(), new NormalizeSort() diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java index e99a00e144..49793fd184 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java @@ -381,7 +381,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo ) )) ).when(FieldChecker.check("outputExpressions", - Lists.newArrayList(pk, pk1, sumA1, countA1, sumA1A2, v1)))) + Lists.newArrayList(pk, sumA1, countA1, sumA1A2, v1)))) ).when(FieldChecker.check("conjuncts", ImmutableSet.of( new GreaterThan(pk.toSlot(), Literal.of((byte) 0)), @@ -569,7 +569,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo PlanChecker.from(connectContext).analyze(sql) .matches(logicalProject(logicalSort(logicalProject(logicalAggregate(logicalProject( logicalFilter(logicalJoin(logicalOlapScan(), logicalOlapScan())))).when( - FieldChecker.check("outputExpressions", Lists.newArrayList(pk, pk1, + FieldChecker.check("outputExpressions", Lists.newArrayList(pk, sumA1, countA1, sumA1A2, v1))))).when(FieldChecker.check( "orderKeys", ImmutableList.of(new OrderKey(pk, true, true), diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/SimplifyAggGroupByTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/SimplifyAggGroupByTest.java index 48ca6b45c1..7a6998df15 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/SimplifyAggGroupByTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/SimplifyAggGroupByTest.java @@ -65,6 +65,11 @@ class SimplifyAggGroupByTest implements MemoPatternMatchSupported { .matchesFromRoot( logicalAggregate().when(a -> a.getGroupByExpressions().size() == 1) ); + PlanChecker.from(MemoTestUtils.createConnectContext(), agg) + .analyze() + .matchesFromRoot( + logicalProject(logicalAggregate().when(a -> a.getGroupByExpressions().size() == 1)) + ); } @Test @@ -87,6 +92,11 @@ class SimplifyAggGroupByTest implements MemoPatternMatchSupported { .matchesFromRoot( logicalAggregate().when(a -> a.equals(agg)) ); + PlanChecker.from(MemoTestUtils.createConnectContext(), agg) + .analyze() + .matchesFromRoot( + logicalProject(logicalAggregate().when(a -> a.getGroupByExpressions().size() == 2)) + ); } @Test @@ -109,5 +119,10 @@ class SimplifyAggGroupByTest implements MemoPatternMatchSupported { .matchesFromRoot( logicalAggregate().when(a -> a.equals(agg)) ); + PlanChecker.from(MemoTestUtils.createConnectContext(), agg) + .analyze() + .matchesFromRoot( + logicalProject(logicalAggregate().when(a -> a.getGroupByExpressions().size() == 2)) + ); } }