This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch 2.1_47093 in repository https://gitbox.apache.org/repos/asf/doris.git
commit a6b62a3df816a5d936722ee87fbf5befa80acf3c Author: morrySnow <zhangwen...@selectdb.com> AuthorDate: Mon Jan 20 15:19:23 2025 +0800 branch-2.1: [fix](Nereids) let anonymous alias same as user input #47093 pick from master #47093 --- .../doris/nereids/analyzer/UnboundAlias.java | 22 ++++++++++++++++----- .../doris/nereids/parser/LogicalPlanBuilder.java | 10 +++++++++- .../nereids/rules/analysis/ExpressionAnalyzer.java | 2 +- .../doris/nereids/trees/expressions/Alias.java | 6 +++++- .../rules/analysis/FillUpMissingSlotsTest.java | 8 ++++---- .../push_down_count_through_join.out | Bin 29572 -> 29578 bytes .../push_down_count_through_join_one_side.out | Bin 31747 -> 31753 bytes .../eager_aggregate/push_down_min_through_join.out | Bin 16427 -> 16433 bytes .../eager_aggregate/push_down_sum_through_join.out | Bin 16193 -> 16199 bytes .../push_down_sum_through_join_one_side.out | Bin 17453 -> 17459 bytes .../filter_push_down/push_filter_through.out | Bin 10142 -> 10141 bytes .../subquery/test_duplicate_name_in_view.groovy | 2 +- .../suites/nereids_syntax_p0/select_const.groovy | 2 ++ 13 files changed, 39 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java index 25d40dd5981..043542eaac6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java @@ -36,21 +36,29 @@ import java.util.Optional; */ public class UnboundAlias extends NamedExpression implements UnaryExpression, Unbound, PropagateNullable { - private Optional<String> alias; + private final Optional<String> alias; + private final boolean nameFromChild; public UnboundAlias(Expression child) { - super(ImmutableList.of(child)); - this.alias = Optional.empty(); + this(ImmutableList.of(child), Optional.empty()); } public UnboundAlias(Expression child, String alias) { - super(ImmutableList.of(child)); - this.alias = Optional.of(alias); + this(ImmutableList.of(child), Optional.of(alias)); + } + + public UnboundAlias(Expression child, String alias, boolean nameFromChild) { + this(ImmutableList.of(child), Optional.of(alias), nameFromChild); } private UnboundAlias(List<Expression> children, Optional<String> alias) { + this(children, alias, false); + } + + private UnboundAlias(List<Expression> children, Optional<String> alias, boolean nameFromChild) { super(children); this.alias = alias; + this.nameFromChild = nameFromChild; } @Override @@ -89,4 +97,8 @@ public class UnboundAlias extends NamedExpression implements UnaryExpression, Un public Optional<String> getAlias() { return alias; } + + public boolean isNameFromChild() { + return nameFromChild; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 50e15f8791c..498dee77d68 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -1557,7 +1557,15 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> { if (expression instanceof NamedExpression) { return (NamedExpression) expression; } else { - return new UnboundAlias(expression); + int start = ctx.expression().start.getStartIndex(); + int stop = ctx.expression().stop.getStopIndex(); + String alias = ctx.start.getInputStream() + .getText(new org.antlr.v4.runtime.misc.Interval(start, stop)); + if (expression instanceof Literal) { + return new Alias(expression, alias, true); + } else { + return new UnboundAlias(expression, alias, true); + } } } String alias = visitIdentifierOrText(ctx.identifierOrText()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java index b6f436f1560..624b3248056 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java @@ -262,7 +262,7 @@ public class ExpressionAnalyzer extends SubExprAnalyzer<ExpressionRewriteContext public Expression visitUnboundAlias(UnboundAlias unboundAlias, ExpressionRewriteContext context) { Expression child = unboundAlias.child().accept(this, context); if (unboundAlias.getAlias().isPresent()) { - return new Alias(child, unboundAlias.getAlias().get()); + return new Alias(child, unboundAlias.getAlias().get(), unboundAlias.isNameFromChild()); // TODO: the variant bind element_at(slot, 'name') will return a slot, and we should // assign an Alias to this function, this is trick and should refactor it } else if (!(unboundAlias.child() instanceof ElementAt) && child instanceof NamedExpression) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java index 9ff90b5ac96..48a98eb3ee1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java @@ -48,7 +48,11 @@ public class Alias extends NamedExpression implements UnaryExpression { * @param name alias name */ public Alias(Expression child, String name) { - this(StatementScopeIdGenerator.newExprId(), child, name, false); + this(child, name, false); + } + + public Alias(Expression child, String name, boolean nameFromChild) { + this(StatementScopeIdGenerator.newExprId(), child, name, nameFromChild); } public Alias(Expression child) { 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 02f3caffa80..cb01fc17e30 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 @@ -230,7 +230,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo ).when(FieldChecker.check("projects", Lists.newArrayList(a1.toSlot(), sumA2.toSlot())))); sql = "SELECT a1, sum(a1 + a2) FROM t1 GROUP BY a1 HAVING sum(a1 + a2) > 0"; - Alias sumA1A2 = new Alias(new ExprId(3), new Sum(new Add(a1, a2)), "sum((a1 + a2))"); + Alias sumA1A2 = new Alias(new ExprId(3), new Sum(new Add(a1, a2)), "sum(a1 + a2)"); PlanChecker.from(connectContext).analyze(sql) .matches( logicalProject( @@ -353,7 +353,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo Alias sumA1 = new Alias(new ExprId(9), new Sum(a1), "sum(a1)"); Alias countA1 = new Alias(new ExprId(13), new Count(a1), "count(a1)"); Alias countA11 = new Alias(new ExprId(10), new Add(countA1.toSlot(), Literal.of((byte) 1)), "(count(a1) + 1)"); - Alias sumA1A2 = new Alias(new ExprId(11), new Sum(new Add(a1, a2)), "sum((a1 + a2))"); + Alias sumA1A2 = new Alias(new ExprId(11), new Sum(new Add(a1, a2)), "sum(a1 + a2)"); Alias v1 = new Alias(new ExprId(12), new Count(a2), "v1"); PlanChecker.from(connectContext).analyze(sql) .matches( @@ -466,7 +466,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo ).when(FieldChecker.check("projects", Lists.newArrayList(a1.toSlot(), sumA2.toSlot())))); sql = "SELECT a1, sum(a1 + a2) FROM t1 GROUP BY a1 ORDER BY sum(a1 + a2)"; - Alias sumA1A2 = new Alias(new ExprId(3), new Sum(new Add(a1, a2)), "sum((a1 + a2))"); + Alias sumA1A2 = new Alias(new ExprId(3), new Sum(new Add(a1, a2)), "sum(a1 + a2)"); PlanChecker.from(connectContext).analyze(sql) .matches( logicalSort( @@ -552,7 +552,7 @@ public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements Memo Alias sumA1 = new Alias(new ExprId(9), new Sum(a1), "sum(a1)"); Alias countA1 = new Alias(new ExprId(13), new Count(a1), "count(a1)"); Alias countA11 = new Alias(new ExprId(10), new Add(new Count(a1), Literal.of((byte) 1)), "(count(a1) + 1)"); - Alias sumA1A2 = new Alias(new ExprId(11), new Sum(new Add(a1, a2)), "sum((a1 + a2))"); + Alias sumA1A2 = new Alias(new ExprId(11), new Sum(new Add(a1, a2)), "sum(a1 + a2)"); Alias v1 = new Alias(new ExprId(12), new Count(a2), "v1"); PlanChecker.from(connectContext).analyze(sql) .matches(logicalProject(logicalSort(logicalProject(logicalAggregate(logicalProject( diff --git a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join.out b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join.out index ca56c802a9b..cc5d07424b2 100644 Binary files a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join.out and b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join.out differ diff --git a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join_one_side.out b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join_one_side.out index 49f21c8db90..1f3c859c57a 100644 Binary files a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join_one_side.out and b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_count_through_join_one_side.out differ diff --git a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_min_through_join.out b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_min_through_join.out index 03e52839ecf..707c24b3754 100644 Binary files a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_min_through_join.out and b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_min_through_join.out differ diff --git a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join.out b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join.out index 62930e78a09..d1f77bfb819 100644 Binary files a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join.out and b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join.out differ diff --git a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join_one_side.out b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join_one_side.out index 7b55ac7b08b..363d0153813 100644 Binary files a/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join_one_side.out and b/regression-test/data/nereids_rules_p0/eager_aggregate/push_down_sum_through_join_one_side.out differ diff --git a/regression-test/data/nereids_rules_p0/filter_push_down/push_filter_through.out b/regression-test/data/nereids_rules_p0/filter_push_down/push_filter_through.out index cd1b295f525..27ad895837c 100644 Binary files a/regression-test/data/nereids_rules_p0/filter_push_down/push_filter_through.out and b/regression-test/data/nereids_rules_p0/filter_push_down/push_filter_through.out differ diff --git a/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy b/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy index c5d2c219527..775636aba17 100644 --- a/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy +++ b/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy @@ -77,7 +77,7 @@ suite("test_duplicate_name_in_view") { issue_19611_t1.c0 + 1 FROM issue_19611_t1 ) tmp; """ - exception "Duplicated inline view column alias: '(c0 + 1)' in inline view: 'tmp'" + exception "Duplicated inline view column alias: 'issue_19611_t1.c0 + 1' in inline view: 'tmp'" } test { diff --git a/regression-test/suites/nereids_syntax_p0/select_const.groovy b/regression-test/suites/nereids_syntax_p0/select_const.groovy index e802fbcca78..d65e9cb6ac2 100644 --- a/regression-test/suites/nereids_syntax_p0/select_const.groovy +++ b/regression-test/suites/nereids_syntax_p0/select_const.groovy @@ -49,4 +49,6 @@ suite("select_with_const") { """ sql "select all 1" + + sql "select `1 + 2` from (select 1 + 2) t" } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org