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