Class TransformFilteringSemiJoinToInnerJoin

  • All Implemented Interfaces:
    Rule<FilterNode>

    public class TransformFilteringSemiJoinToInnerJoin
    extends Object
    implements Rule<FilterNode>
    Rewrite filtering semi-join to inner join.

    Transforms:

     - Filter (semiJoinSymbol AND predicate)
        - SemiJoin (semiJoinSymbol <- (a IN b))
            source: plan A producing symbol a
            filtering source: plan B producing symbol b
     

    Into:

     - Project (semiJoinSymbol <- TRUE)
        - Join INNER on (a = b), joinFilter (predicate with semiJoinSymbol replaced with TRUE)
           - source
           - Aggregation distinct(b)
              - filtering source