This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 272964412459f698d08344abb6e24d6e07141f2f
Author: amory <wangqian...@selectdb.com>
AuthorDate: Tue Aug 27 14:42:42 2024 +0800

    [fix](table-func) fix explode_map with alias  (#39757)
    
    ## Proposed changes
    when we use sql
    ```
    select
        a.name,
        tmp.k,
        tmp.v
    from (
        select
            'zhangsan' name,
            map(1,20,2,30) score
    )a lateral view explode_map(score)  tmp as k,v;
    
    errCode = 2, detailMessage = Unknown table 'v'
    ```
    after this pr:
    ```
    mysql> select      a.name,     tmp.k,     tmp.v from (     select          
'zhangsan' name,         map(1,20,2,30) score )a lateral view 
explode_map(score)  tmp as k,v;
    +----------+------+------+
    | name     | k    | v    |
    +----------+------+------+
    | zhangsan |    1 |   20 |
    | zhangsan |    2 |   30 |
    +----------+------+------+
    2 rows in set (0.31 sec)
    ```
    Issue Number: close #xxx
    
    <!--Describe your changes.-->
---
 .../nereids/rules/analysis/BindExpression.java     |  3 +-
 .../doris/nereids/trees/expressions/Alias.java     |  4 ++
 .../sql_functions/table_function/explode_map.out   | 43 ++++++++++++++++++++++
 .../table_function/explode_map.groovy              |  6 +++
 4 files changed, 55 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
index db39d661d3e..8f3345a35c0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
@@ -272,7 +272,8 @@ public class BindExpression implements AnalysisRuleFactory {
                 for (int idx = 0; idx < fields.size(); ++idx) {
                     expandAlias.add(new Alias(new StructElement(
                             boundSlot, new 
StringLiteral(fields.get(idx).getName())),
-                            generate.getExpandColumnAlias().get(i).get(idx)));
+                            generate.getExpandColumnAlias().get(i).get(idx),
+                            slot.getQualifier()));
                 }
             }
         }
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 6b31fc60f27..9eea3afd879 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
@@ -60,6 +60,10 @@ public class Alias extends NamedExpression implements 
UnaryExpression {
         this(exprId, ImmutableList.of(child), name, ImmutableList.of(), false);
     }
 
+    public Alias(Expression child, String name, List<String> qualifier) {
+        this(StatementScopeIdGenerator.newExprId(), ImmutableList.of(child), 
name, qualifier, false);
+    }
+
     public Alias(ExprId exprId, Expression child, String name, boolean 
nameFromChild) {
         this(exprId, ImmutableList.of(child), name, ImmutableList.of(), 
nameFromChild);
     }
diff --git 
a/regression-test/data/nereids_p0/sql_functions/table_function/explode_map.out 
b/regression-test/data/nereids_p0/sql_functions/table_function/explode_map.out
index 295b908d7f8..44fb65a8d0c 100644
--- 
a/regression-test/data/nereids_p0/sql_functions/table_function/explode_map.out
+++ 
b/regression-test/data/nereids_p0/sql_functions/table_function/explode_map.out
@@ -49,3 +49,46 @@ zhangsan     Math    60      Chinese 80
 zhangsan       Math    60      English 90
 zhangsan       Math    60      Math    60
 
+-- !explode_sql_alias --
+lisi   null    \N
+lisi2  \N      \N
+wangwu Chinese 88
+wangwu English 96
+wangwu Math    90
+zhangsan       Chinese 80
+zhangsan       English 90
+zhangsan       Math    60
+
+-- !explode_outer_sql_alias --
+amory  \N      \N
+lisi   null    \N
+lisi2  \N      \N
+wangwu Chinese 88
+wangwu English 96
+wangwu Math    90
+zhangsan       Chinese 80
+zhangsan       English 90
+zhangsan       Math    60
+
+-- !explode_sql_alias_multi --
+lisi   null    \N      null    \N
+lisi2  \N      \N      \N      \N
+wangwu Chinese 88      Chinese 88
+wangwu Chinese 88      English 96
+wangwu Chinese 88      Math    90
+wangwu English 96      Chinese 88
+wangwu English 96      English 96
+wangwu English 96      Math    90
+wangwu Math    90      Chinese 88
+wangwu Math    90      English 96
+wangwu Math    90      Math    90
+zhangsan       Chinese 80      Chinese 80
+zhangsan       Chinese 80      English 90
+zhangsan       Chinese 80      Math    60
+zhangsan       English 90      Chinese 80
+zhangsan       English 90      English 90
+zhangsan       English 90      Math    60
+zhangsan       Math    60      Chinese 80
+zhangsan       Math    60      English 90
+zhangsan       Math    60      Math    60
+
diff --git 
a/regression-test/suites/nereids_p0/sql_functions/table_function/explode_map.groovy
 
b/regression-test/suites/nereids_p0/sql_functions/table_function/explode_map.groovy
index 338cf675042..6235bb5ee2e 100644
--- 
a/regression-test/suites/nereids_p0/sql_functions/table_function/explode_map.groovy
+++ 
b/regression-test/suites/nereids_p0/sql_functions/table_function/explode_map.groovy
@@ -45,4 +45,10 @@ suite("explode_map") {
 
     // multi lateral view
     order_qt_explode_sql_multi """ select name, k,v,k1,v1 from sdu lateral 
view explode_map_outer(score) tmp as k,v lateral view explode_map(score) tmp2 
as k1,v1 order by id;"""
+
+    // test with alias
+    order_qt_explode_sql_alias """ select name, tmp.k, tmp.v from sdu lateral 
view explode_map(score) tmp as k,v order by id;"""
+    order_qt_explode_outer_sql_alias """ select name, tmp.k, tmp.v from sdu 
lateral view explode_map_outer(score) tmp as k,v order by id; """
+
+    order_qt_explode_sql_alias_multi """ select name, tmp.k, tmp.v, tmp2.k, 
tmp2.v from sdu lateral view explode_map_outer(score) tmp as k,v lateral view 
explode_map(score) tmp2 as k,v order by id;"""
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to