wutiangan commented on a change in pull request #3150: Support non-correlated
subquery in having clause
URL: https://github.com/apache/incubator-doris/pull/3150#discussion_r397250060
##########
File path: fe/src/main/java/org/apache/doris/analysis/SelectStmt.java
##########
@@ -839,19 +861,32 @@ private Expr rewriteCountDistinctForBitmapOrHLL(Expr
expr, Analyzer analyzer) {
private void analyzeAggregation(Analyzer analyzer) throws
AnalysisException {
// check having clause
if (havingClause != null) {
- if (havingClause.contains(Predicates.instanceOf(Subquery.class))) {
- throw new AnalysisException(
- "Subqueries are not supported in the HAVING clause.");
- }
Expr ambiguousAlias = getFirstAmbiguousAlias(havingClause);
if (ambiguousAlias != null) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_NON_UNIQ_ERROR,
ambiguousAlias.toColumnLabel());
}
- // substitute aliases in place (ordinals not allowed in having
clause)
- havingPred = havingClause.substitute(aliasSMap, analyzer, false);
- havingPred.checkReturnsBool("HAVING clause", true);
+ /*
+ * The having clause need to be substitute by aliasSMap.
+ * And it is analyzed after substitute.
+ * For example:
+ * Query: select k1 a, sum(k2) b from table group by k1 having a >
1;
+ * Having clause: a > 1
+ * aliasSMap: <a, table.k1> <b, sum(table.k2)>
+ * After substitute: a > 1 changed to table.k1 > 1
+ * Analyzer: check column and other subquery in having clause
+ * having predicate: table.k1 > 1
+ */
+ /*
+ * TODO(ml): support substitute outer column in subquery
Review comment:
```suggestion
* TODO(ml): support substitute outer column in correlated
subquery
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]