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 e098e0cac1..b1313a16a1 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 @@ -107,9 +107,9 @@ public class CheckAfterRewrite extends OneAnalysisRuleFactory { .collect(Collectors.toSet()); notFromChildren = removeValidSlotsNotFromChildren(notFromChildren, childrenOutput); if (!notFromChildren.isEmpty()) { - if (plan.child(0) instanceof LogicalAggregate) { + if (plan.arity() != 0 && 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(", ")))); + .stream().map(NamedExpression::getName).collect(Collectors.joining(", ")))); } else { throw new AnalysisException(String.format( "Input slot(s) not in child's output: %s in plan: %s," diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java index 7f6e23a120..8ae79b9c21 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java @@ -307,7 +307,9 @@ public class SlotBinder extends SubExprAnalyzer { //TODO: handle name parts more than three. throw new AnalysisException("Not supported name: " + StringUtils.join(nameParts, ".")); - }).collect(Collectors.toList()); + }) + .map(s -> s.withName(unboundSlot.getNameParts().get(unboundSlot.getNameParts().size() - 1))) + .collect(Collectors.toList()); } public static boolean compareDbName(String boundedDbName, String unBoundDbName) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java index d2a78859e2..3dd0ef6485 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java @@ -150,6 +150,16 @@ public class ArrayItemReference extends NamedExpression implements ExpectsInputT return new ArrayItemSlot(exprId, name, dataType, nullable); } + @Override + public ArrayItemSlot withName(String name) { + return new ArrayItemSlot(exprId, name, dataType, nullable); + } + + @Override + public SlotReference withNullable(boolean newNullable) { + return new ArrayItemSlot(exprId, name, dataType, nullable); + } + @Override public R accept(ExpressionVisitor visitor, C context) { return visitor.visitArrayItemSlot(this, context); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java index 021fcea1a3..35b217b8a9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java @@ -73,4 +73,9 @@ public class MarkJoinSlotReference extends SlotReference implements SlotNotFromC public MarkJoinSlotReference withExprId(ExprId exprId) { return new MarkJoinSlotReference(exprId, name, existsHasAgg); } + + @Override + public SlotReference withName(String name) { + return new MarkJoinSlotReference(exprId, name, existsHasAgg); + } } diff --git a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy index c3784219f7..a0e411073f 100644 --- a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy +++ b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy @@ -70,47 +70,47 @@ suite("transposeSemiJoinAgg") { sql "set enable_runtime_filter_prune=false;" sql ''' - alter table T1 modify column A set stats ('ndv'='5999989709', 'num_nulls'='0', 'row_count'='5999989709'); + alter table T1 modify column a set stats ('ndv'='5999989709', 'num_nulls'='0', 'row_count'='5999989709'); ''' sql ''' - alter table T1 modify column B set stats ('ndv'='5999989709', 'num_nulls'='0', 'row_count'='5999989709'); + alter table T1 modify column b set stats ('ndv'='5999989709', 'num_nulls'='0', 'row_count'='5999989709'); ''' sql ''' - alter table T2 modify column A set stats ('ndv'='100', 'num_nulls'='0', 'row_count'='100'); + alter table T2 modify column a set stats ('ndv'='100', 'num_nulls'='0', 'row_count'='100'); ''' // RULE: TransposeSemiJoinAggProject // 1. group-by(without grouping sets) // agg-leftSemi => leftSemi-agg qt_groupby_positive_case """ explain shape plan - select T3.A - from (select A, B, sum(C) from T1 group by A, B) T3 - left semi join T2 on T3.A=T2.A; + select T3.a + from (select a, b, sum(c) from T1 group by a, b) T3 + left semi join T2 on T3.a=T2.a; """ // agg-leftSemi: agg not pushed down qt_groupby_negative_case """ explain shape plan - select T3.A - from (select A, B, sum(C) as D from T1 group by A, B) T3 - left semi join T2 on T3.D=T2.A; + select T3.a + from (select a, b, sum(c) as d from T1 group by a, b) T3 + left semi join T2 on T3.D=T2.a; """ // 2 grouping sets // agg-leftSemi => leftSemi-agg qt_grouping_positive_case """ explain shape plan - select T3.A - from (select A, B, sum(C) from T1 group by grouping sets ((A, B), (A))) T3 - left semi join T2 on T3.A=T2.A; + select T3.a + from (select a, b, sum(c) from T1 group by grouping sets ((a, b), (a))) T3 + left semi join T2 on T3.a=T2.a; """ // agg-leftSemi: agg not pushed down qt_grouping_negative_case """ explain shape plan - select T3.A - from (select A, B, sum(C) as D from T1 group by grouping sets ((A, B), (A), ())) T3 - left semi join T2 on T3.D=T2.A; + select T3.a + from (select a, b, sum(c) as D from T1 group by grouping sets ((a, b), (a), ())) T3 + left semi join T2 on T3.D=T2.a; """ // RULE: TransposeSemiJoinAgg @@ -118,32 +118,32 @@ suite("transposeSemiJoinAgg") { // agg-leftSemi => leftSemi-agg qt_groupby_positive_case2 """ explain shape plan - select T3.A - from (select A from T1 group by A) T3 - left semi join T2 on T3.A=T2.A; + select T3.a + from (select a from T1 group by a) T3 + left semi join T2 on T3.a=T2.a; """ // agg-leftSemi: agg not pushed down qt_groupby_negative_case2 """ explain shape plan select T3.D - from (select sum(C) as D from T1 group by A) T3 - left semi join T2 on T3.D=T2.A; + from (select sum(c) as D from T1 group by a) T3 + left semi join T2 on T3.D=T2.a; """ // 2 grouping sets // agg-leftSemi => leftSemi-agg qt_grouping_positive_case2 """ explain shape plan - select T3.A - from (select A from T1 group by grouping sets ((A, B), (A))) T3 - left semi join T2 on T3.A=T2.A; + select T3.a + from (select a from T1 group by grouping sets ((a, b), (a))) T3 + left semi join T2 on T3.a=T2.a; """ // agg-leftSemi: agg not pushed down qt_grouping_negative_case2 """ explain shape plan select T3.D - from (select sum(C) as D from T1 group by grouping sets ((A, B), (A), ())) T3 - left semi join T2 on T3.D=T2.A; + from (select sum(C) as D from T1 group by grouping sets ((a, b), (a), ())) T3 + left semi join T2 on T3.D=T2.a; """ } \ No newline at end of file