From b3db90484726c458f09ce75cb8cefd2f2f37187b Mon Sep 17 00:00:00 2001 From: jakevin Date: Wed, 5 Jul 2023 19:39:41 +0800 Subject: [PATCH] [fix](Nereids): when child is Aggregate, don't infer Distinct for it (#21519) --- .../nereids/rules/rewrite/InferSetOperatorDistinct.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java index 9bb24869e4..b9f99c0758 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java @@ -50,7 +50,8 @@ public class InferSetOperatorDistinct extends OneRewriteRuleFactory { } List newChildren = setOperation.children().stream() - .map(child -> new LogicalAggregate<>(ImmutableList.copyOf(child.getOutput()), true, child)) + .map(child -> isAgg(child) ? child + : new LogicalAggregate<>(ImmutableList.copyOf(child.getOutput()), true, child)) .collect(ImmutableList.toImmutableList()); if (newChildren.equals(setOperation.children())) { return null; @@ -59,6 +60,11 @@ public class InferSetOperatorDistinct extends OneRewriteRuleFactory { }).toRule(RuleType.INFER_SET_OPERATOR_DISTINCT); } + private boolean isAgg(Plan plan) { + return plan instanceof LogicalAggregate || (plan instanceof LogicalProject && plan.child( + 0) instanceof LogicalAggregate); + } + // if children exist NLJ, we can't infer distinct private boolean rejectNLJ(Plan plan) { if (plan instanceof LogicalProject) {