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