Class PushDownDereferenceThroughSemiJoin

java.lang.Object
io.trino.sql.planner.iterative.rule.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.