diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java index c43d794035..56d5273e62 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java @@ -106,14 +106,18 @@ public class CheckAfterRewrite extends OneAnalysisRuleFactory { .collect(Collectors.toSet()); notFromChildren = removeValidSlotsNotFromChildren(notFromChildren, childrenOutput); if (!notFromChildren.isEmpty()) { - throw new AnalysisException(String.format("Input slot(s) not in child's output: %s in plan: %s," - + " child output is: %s\n" + "plan tree:\n" + plan.treeString(), - StringUtils.join(notFromChildren.stream() - .map(ExpressionTrait::toString) - .collect(Collectors.toSet()), ", "), plan, - plan.children().stream() - .flatMap(child -> child.getOutput().stream()) - .collect(Collectors.toSet()))); + if (plan.child(0) instanceof LogicalAggregate) { + throw new AnalysisException(String.format("%s not in agg's output", notFromChildren + .stream().map(slot -> slot.getName()).collect(Collectors.joining(", ")))); + } else { + throw new AnalysisException(String.format( + "Input slot(s) not in child's output: %s in plan: %s," + + " child output is: %s\n" + "plan tree:\n" + plan.treeString(), + StringUtils.join(notFromChildren.stream().map(ExpressionTrait::toString) + .collect(Collectors.toSet()), ", "), + plan, plan.children().stream().flatMap(child -> child.getOutput().stream()) + .collect(Collectors.toSet()))); + } } } diff --git a/regression-test/suites/nereids_p0/aggregate/aggregate.groovy b/regression-test/suites/nereids_p0/aggregate/aggregate.groovy index f0ba091e04..6f63b146cb 100644 --- a/regression-test/suites/nereids_p0/aggregate/aggregate.groovy +++ b/regression-test/suites/nereids_p0/aggregate/aggregate.groovy @@ -328,4 +328,12 @@ suite("aggregate") { assertTrue(plan.contains("max(c_bigint")) assertTrue(plan.contains("min(c_bigint")) assertTrue(plan.contains("any_value(c_bigint")) + + test { + sql """ + SELECT k1, k2 FROM tempbaseall + GROUP BY k1; + """ + exception "java.sql.SQLException: errCode = 2, detailMessage = k2 not in agg's output" + } }