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 7592c066ca [fix](agg)having clause should use column name first then 
alias (#14536)
7592c066ca is described below

commit 7592c066caa45233746fd9f103ec467c0f81ce93
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Fri Nov 25 18:25:17 2022 +0800

    [fix](agg)having clause should use column name first then alias (#14536)
    
    * [fix](agg)having clause should use column name first then alias
    
    * fix fe ut
---
 .../src/main/java/org/apache/doris/analysis/QueryStmt.java       | 9 +++------
 .../src/main/java/org/apache/doris/analysis/SelectStmt.java      | 9 ++++++++-
 .../src/test/java/org/apache/doris/analysis/QueryStmtTest.java   | 2 +-
 3 files changed, 12 insertions(+), 8 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 ca79d02e38..d0aa94177d 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
@@ -419,23 +419,20 @@ public abstract class QueryStmt extends StatementBase {
             // alias substitution is not performed in the same way.
             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);
+                        substituteExpr = expr.clone();
+                        substituteExpr.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 fc4a82839c..7c952b5d41 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
@@ -969,7 +969,14 @@ public class SelectStmt extends QueryStmt {
              *                     (select min(k1) from table b where 
a.key=b.k2);
              * TODO: the a.key should be replaced by a.k1 instead of unknown 
column 'key' in 'a'
              */
-            havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, 
analyzer, false);
+            try {
+                // use col name from tableRefs first
+                havingClauseAfterAnaylzed = havingClause.clone();
+                havingClauseAfterAnaylzed.analyze(analyzer);
+            } catch (AnalysisException ex) {
+                // then consider alias name
+                havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, 
analyzer, false);
+            }
             havingClauseAfterAnaylzed = 
rewriteQueryExprByMvColumnExpr(havingClauseAfterAnaylzed, analyzer);
             havingClauseAfterAnaylzed.checkReturnsBool("HAVING clause", true);
             if (groupingInfo != 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 e1dd1fe62f..f7a4a8debc 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(15, exprsMap.size());
+        Assert.assertEquals(17, exprsMap.size());
         constMap.clear();
         constMap = getConstantExprMap(exprsMap, analyzer);
         Assert.assertEquals(4, constMap.size());


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

Reply via email to