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 subqueryIn 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) decorrelatedIn 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
Constructors Constructor Description TransformCorrelatedGlobalAggregationWithoutProjection(Metadata metadata)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Rule.Resultapply(CorrelatedJoinNode correlatedJoinNode, Captures captures, Rule.Context context)Pattern<CorrelatedJoinNode>getPattern()Returns a pattern to which plan nodes this rule applies.
-
-
-
Constructor Detail
-
TransformCorrelatedGlobalAggregationWithoutProjection
public TransformCorrelatedGlobalAggregationWithoutProjection(Metadata metadata)
-
-
Method Detail
-
getPattern
public Pattern<CorrelatedJoinNode> getPattern()
Description copied from interface:RuleReturns a pattern to which plan nodes this rule applies.- Specified by:
getPatternin interfaceRule<CorrelatedJoinNode>
-
apply
public Rule.Result apply(CorrelatedJoinNode correlatedJoinNode, Captures captures, Rule.Context context)
- Specified by:
applyin interfaceRule<CorrelatedJoinNode>
-
-