[fix](nereids)move SimplifyAggGroupBy rule into analyze phase (#32186)

This commit is contained in:
starocean999
2024-03-14 09:54:34 +08:00
committed by yiguolei
parent 36a0b93c44
commit 2d0706a67c
4 changed files with 19 additions and 4 deletions

View File

@ -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()),

View File

@ -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()

View File

@ -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),

View File

@ -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))
);
}
}