You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/11/25 10:25:24 UTC
[doris] branch branch-1.1-lts updated: [fix](agg)having clause should use column name first then alias (#14536)
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 <40...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org