Class TransformCorrelatedGroupedAggregationWithoutProjection

  • All Implemented Interfaces:
    Rule<CorrelatedJoinNode>

    public class TransformCorrelatedGroupedAggregationWithoutProjection
    extends Object
    implements Rule<CorrelatedJoinNode>
    This rule decorrelates a correlated subquery of INNER correlated join with: - single grouped aggregation, or - grouped aggregation over distinct operator (grouped aggregation with no aggregation assignments) It is similar to TransformCorrelatedGroupedAggregationWithProjection rule, but does not support projection over aggregation in the subquery

    In the case of single aggregation, it transforms:

     - CorrelatedJoin INNER (correlation: [c], filter: true, output: a, count, agg)
          - Input (a, c)
          - Aggregation (group by b)
            count <- count(*)
            agg <- agg(d)
               - Source (b, d) with correlated filter (b > c)
     
    Into:
     - Project (a <- a, count <- count, agg <- agg)
          - Aggregation (group by [a, c, unique, b])
            count <- count(*)
            agg <- agg(d)
               - INNER join (filter: b > c)
                    - UniqueId (unique)
                         - Input (a, c)
                    - Source (b, d) decorrelated
     

    In the case of grouped aggregation over distinct operator, it transforms:

     - CorrelatedJoin INNER (correlation: [c], filter: true, output: a, count, agg)
          - Input (a, c)
          - Aggregation (group by b)
            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, b])
            count <- count(*)
            agg <- agg(b)
               - Aggregation "distinct operator" group by [a, c, unique, b]
                    - INNER join (filter: b > c)
                         - UniqueId (unique)
                              - Input (a, c)
                         - Source (b) decorrelated