Class PushDownDereferenceThroughSemiJoin

  • All Implemented Interfaces:
    Rule<ProjectNode>

    public class PushDownDereferenceThroughSemiJoin
    extends Object
    implements Rule<ProjectNode>
    Transforms:
      Project(D := f1(A.x), E := f2(B.x), G := f3(C))
          SemiJoin(sourceJoinSymbol = B, filteringSourceJoinSymbol = B_filtering)
              Source(A, B, C)
              FilteringSource(B_filtering)
      
    to:
      Project(D := f1(symbol), E := f2(B.x), G := f3(C))
              SemiJoinNode(sourceJoinSymbol = B, filteringSourceJoinSymbol = B_filtering)
                  Project(A, B, C, symbol := A.x)
                      Source(A, B, C)
                  FilteringSource(B_filtering)
     

    Pushes down dereference projections through SemiJoinNode. Excludes dereferences on sourceJoinSymbol to avoid data replication, since this symbol cannot be pruned.