morrySnow commented on code in PR #12129:
URL: https://github.com/apache/doris/pull/12129#discussion_r956609185
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java:
##########
@@ -949,4 +958,18 @@ public Expression visitExist(ExistContext context) {
public List<Expression> withInList(PredicateContext ctx) {
return
ctx.expression().stream().map(this::getExpression).collect(ImmutableList.toImmutableList());
}
+
+ static class SelectQuerySpecificationContext {
Review Comment:
if u need it, the better way to do this is add a new Rule include
`whereClause? aggClause? havingClause?` named `SelectQuerySpecification` in
`DorisParser.g4`
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java:
##########
@@ -155,9 +157,15 @@ private <E extends Expression> List<E> bind(List<E>
exprList, List<Plan> inputs,
}
private <E extends Expression> E bind(E expr, List<Plan> inputs, Plan
plan, CascadesContext cascadesContext) {
- List<Slot> boundedSlots = inputs.stream()
- .flatMap(input -> input.getOutput().stream())
- .collect(Collectors.toList());
+ List<NamedExpression> boundedSlots = inputs.stream()
+ .flatMap(input -> {
+ Plan subPlan = ((GroupPlan)
input).getGroup().getLogicalExpression().getPlan();
Review Comment:
i don't think this is right, because we could write sql like that
```sql
SELECT k1, COUNT(v1) FROM t1 GROUP BY k1 HAVING SUM(v2) > 10;
```
the right way to bind having is write another rule that split is predicates
into three parts
1. AggregateFunctions **DO NOT** appear in child aggregate node
2. AggregateFunctions **DO** appear in child aggregate node
3. other expression
And then,
1. push down the **first part** AggregateFunctions to aggregate node
2. replace **both first part and second part** AggregateFunctions by
SlotReferences generated from aggregate node's output expression
3. if the first part is not empty, we need add a project node **on the top**
of the filter node transformed from Having
--
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.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]