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]