Class PushDownDereferenceThroughUnnest

  • All Implemented Interfaces:
    Rule<ProjectNode>

    public class PushDownDereferenceThroughUnnest
    extends Object
    implements Rule<ProjectNode>
    Transforms:
      Project(D := f1(A.x), E := f2(C), B_BIGINT)
          Unnest(replicate = [A, C], unnest = (B_ARRAY -> [B_BIGINT]))
              Source(A, B_ARAAY, C)
      
    to:
      Project(D := f1(symbol), E := f2(C), B_BIGINT)
          Unnest(replicate = [A, C, symbol], unnest = (B_ARAAY -> [B_BIGINT]))
              Project(A, B_ARRAY, C, symbol := A.x)
                  Source(A, B_ARAAY, C)
     

    Pushes down dereference projections through Unnest. Currently, the pushdown is only supported for dereferences on replicate symbols.