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

yiguolei pushed a commit to branch branch-1.1-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.1-lts by this push:
     new 9ed1808e24 [fix](grouping)the grouping expr should check col name from 
base tabe first, then alias (#14142)
9ed1808e24 is described below

commit 9ed1808e2498942888448b38f9ac9e0d34e2255f
Author: starocean999 <[email protected]>
AuthorDate: Fri Nov 11 15:27:12 2022 +0800

    [fix](grouping)the grouping expr should check col name from base tabe 
first, then alias (#14142)
    
    * [fix](grouping)the grouping expr should check col name from base table 
first, then alias
    
    * fix fe ut
---
 .../java/org/apache/doris/analysis/QueryStmt.java    | 20 +++++++++++++++++---
 .../java/org/apache/doris/analysis/SelectStmt.java   |  4 ++--
 .../org/apache/doris/analysis/QueryStmtTest.java     |  2 +-
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
index 5aeae20bbd..ca79d02e38 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
@@ -293,7 +293,7 @@ public abstract class QueryStmt extends StatementBase {
             isAscOrder.add(Boolean.valueOf(orderByElement.getIsAsc()));
             nullsFirstParams.add(orderByElement.getNullsFirstParam());
         }
-        substituteOrdinalsAliases(orderingExprs, "ORDER BY", analyzer);
+        substituteOrdinalsAliases(orderingExprs, "ORDER BY", analyzer, true);
 
         // save the order by element after analyzed
         orderByElementsAfterAnalyzed = Lists.newArrayList();
@@ -404,7 +404,7 @@ public abstract class QueryStmt extends StatementBase {
      * Modifies exprs list in-place.
      */
     protected void substituteOrdinalsAliases(List<Expr> exprs, String 
errorPrefix,
-                                             Analyzer analyzer) throws 
AnalysisException {
+                                             Analyzer analyzer, boolean 
aliasFirst) throws AnalysisException {
         Expr ambiguousAlias = getFirstAmbiguousAlias(exprs);
         if (ambiguousAlias != null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_NON_UNIQ_ERROR, 
ambiguousAlias.toColumnLabel());
@@ -420,8 +420,22 @@ public abstract class QueryStmt extends StatementBase {
             Expr substituteExpr = trySubstituteOrdinal(expr, errorPrefix, 
analyzer);
             if (substituteExpr == null) {
                 substituteExpr = expr.trySubstitute(aliasSMap, analyzer, 
false);
+                if (aliasFirst) {
+                    substituteExpr = expr.trySubstitute(aliasSMap, analyzer, 
false);
+                    i.set(substituteExpr);
+                } else {
+                    try {
+                        // use col name from tableRefs first
+                        expr.analyze(analyzer);
+                    } catch (AnalysisException ex) {
+                        // then consider alias name
+                        substituteExpr = expr.trySubstitute(aliasSMap, 
analyzer, false);
+                        i.set(substituteExpr);
+                    }
+                }
+            } else {
+                i.set(substituteExpr);
             }
-            i.set(substituteExpr);
         }
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 2cc192b9d1..fc4a82839c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -1081,7 +1081,7 @@ public class SelectStmt extends QueryStmt {
                 }
                 groupingInfo.buildRepeat(groupByClause.getGroupingExprs(), 
groupByClause.getGroupingSetList());
             }
-            substituteOrdinalsAliases(groupByClause.getGroupingExprs(), "GROUP 
BY", analyzer);
+            substituteOrdinalsAliases(groupByClause.getGroupingExprs(), "GROUP 
BY", analyzer, false);
             if (groupingInfo != null) {
                 groupingInfo.genOutputTupleDescAndSMap(analyzer, 
groupByClause.getGroupingExprs(), aggExprs);
                 // must do it before copying for createAggInfo()
@@ -1857,7 +1857,7 @@ public class SelectStmt extends QueryStmt {
         }
         // substitute group by
         if (groupByClause != null) {
-            substituteOrdinalsAliases(groupByClause.getGroupingExprs(), "GROUP 
BY", analyzer);
+            substituteOrdinalsAliases(groupByClause.getGroupingExprs(), "GROUP 
BY", analyzer, false);
         }
         // substitute having
         if (havingClause != null) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java
index f7a4a8debc..e1dd1fe62f 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java
@@ -246,7 +246,7 @@ public class QueryStmtTest {
         stmt = (QueryStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, ctx);
         exprsMap.clear();
         stmt.collectExprs(exprsMap);
-        Assert.assertEquals(17, exprsMap.size());
+        Assert.assertEquals(15, exprsMap.size());
         constMap.clear();
         constMap = getConstantExprMap(exprsMap, analyzer);
         Assert.assertEquals(4, constMap.size());


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to