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

Reply via email to