Class TransformCorrelatedGlobalAggregationWithoutProjection
java.lang.Object
io.trino.sql.planner.iterative.rule.TransformCorrelatedGlobalAggregationWithoutProjection
- All Implemented Interfaces:
Rule<CorrelatedJoinNode>
public class TransformCorrelatedGlobalAggregationWithoutProjection
extends Object
implements Rule<CorrelatedJoinNode>
This rule decorrelates a correlated subquery with:
- single global aggregation, or
- global aggregation over distinct operator (grouped aggregation with no aggregation assignments)
It is similar to TransformCorrelatedGlobalAggregationWithProjection rule, but does not support projection over aggregation in the subquery
In the case of single aggregation, it transforms:
- CorrelatedJoin LEFT or INNER (correlation: [c], filter: true, output: a, count, agg)
- Input (a, c)
- Aggregation global
count <- count(*)
agg <- agg(b)
- Source (b) with correlated filter (b > c)
Into:
- Project (a <- a, count <- count, agg <- agg)
- Aggregation (group by [a, c, unique])
count <- count(*) mask(non_null)
agg <- agg(b) mask(non_null)
- LEFT join (filter: b > c)
- UniqueId (unique)
- Input (a, c)
- Project (non_null <- TRUE)
- Source (b) decorrelated
In the case of global aggregation over distinct operator, it transforms:
- CorrelatedJoin LEFT or INNER (correlation: [c], filter: true, output: a, count, agg)
- Input (a, c)
- Aggregation global
count <- count(*)
agg <- agg(b)
- Aggregation "distinct operator" group by [b]
- Source (b) with correlated filter (b > c)
Into:
- Project (a <- a, count <- count, agg <- agg)
- Aggregation (group by [a, c, unique])
count <- count(*) mask(non_null)
agg <- agg(b) mask(non_null)
- Aggregation "distinct operator" group by [a, c, unique, non_null, b]
- LEFT join (filter: b > c)
- UniqueId (unique)
- Input (a, c)
- Project (non_null <- TRUE)
- Source (b) decorrelated
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.trino.sql.planner.iterative.Rule
Rule.Context, Rule.Result -
Constructor Summary
ConstructorsConstructorDescriptionTransformCorrelatedGlobalAggregationWithoutProjection(PlannerContext plannerContext) -
Method Summary
Modifier and TypeMethodDescriptionapply(CorrelatedJoinNode correlatedJoinNode, Captures captures, Rule.Context context) Returns a pattern to which plan nodes this rule applies.
-
Constructor Details
-
TransformCorrelatedGlobalAggregationWithoutProjection
-
-
Method Details
-
getPattern
Description copied from interface:RuleReturns a pattern to which plan nodes this rule applies.- Specified by:
getPatternin interfaceRule<CorrelatedJoinNode>
-