Class MultiJoinProjectTransposeRule

All Implemented Interfaces:
TransformationRule

@Enclosing public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule
MultiJoinProjectTransposeRule implements the rule for pulling LogicalProjects that are on top of a MultiJoin and beneath a LogicalJoin so the LogicalProject appears above the LogicalJoin.

In the process of doing so, also save away information about the respective fields that are referenced in the expressions in the LogicalProject we're pulling up, as well as the join condition, in the resultant MultiJoins

For example, if we have the following sub-query:


   (select X.x1, Y.y1
    from X, Y
    where X.x2 = Y.y2 and X.x3 = 1 and Y.y3 = 2)

The MultiJoin associated with (X, Y) associates x1 with X and y1 with Y. Although x3 and y3 need to be read due to the filters, they are not required after the row scan has completed and therefore are not saved. The join fields, x2 and y2, are also tracked separately.

Note that by only pulling up projects that are on top of MultiJoins, we preserve projections on top of row scans.

See the superclass for details on restrictions regarding which LogicalProjects cannot be pulled.

See Also: