Class PushDownDereferencesThroughMarkDistinct

java.lang.Object
io.trino.sql.planner.iterative.rule.PushDownDereferencesThroughMarkDistinct
All Implemented Interfaces:
Rule<ProjectNode>

public class PushDownDereferencesThroughMarkDistinct extends Object implements Rule<ProjectNode>
Transforms:
  Project(D := f1(A.x), E := f2(B.x), G := f3(C))
      MarkDistinct(distinctSymbols = [B])
          Source(A, B, C)
  
to:
  Project(D := f1(symbol), E := f2(B.x), G := f3(C))
      MarkDistinct(distinctSymbols = [B])
          Project(A, B, C, symbol := A.x)
              Source(A, B, C)
 

Pushes down dereference projections through MarkDistinct. Excludes dereferences on "distinct symbols" to avoid data replication, since these symbols cannot be pruned.