The immutable state of the phase that can also be accessed by other phases.
The immutable state of the phase that can also be accessed by other phases.
Run the phase
Run the phase
Recursively push refs from the right-hand side of a Join to the left-hand side out of the join.
Recursively push refs from the right-hand side of a Join to the left-hand side out of the join.
This is only possible when they occur in a a mapping Bind(_, _, Pure(StructNode)) directly
at the RHS of a Join. Returns the (possibly transformed) Join and replacements for forward
paths into it.
TODO: If the remainder of the mapping Bind is purely aliasing, eliminate it entirely.
Merge nested mapping operations of the form Bind(_, Bind(_, _, Pure(StructNode(p1), _)), Pure(StructNode(p2), _))
into a single Bind, provided that each element of either p1 or p2 contains not more than one path.
Merge nested mapping operations of the form Bind(_, Bind(_, _, Pure(StructNode(p1), _)), Pure(StructNode(p2), _))
into a single Bind, provided that each element of either p1 or p2 contains not more than one path.
This transformation is not required for the correctness of join rewriting but it keeps the
tree smaller to speed up subsequent phases.
Recursively hoist Filter out of of Bind(_, Filter, Pure(StructNode)).
Recursively hoist Filter out of of Bind(_, Filter, Pure(StructNode)). Returns the possibly
modified tree plus a set of invalidated TypeSymbols (non-empty if additional columns
have to be added to the base projection for the filters).
Hoist Filter nodes in Join generators into join predicates.
The unique name of the phase
The unique name of the phase
In a Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1) where parts
of on2 refer to s1, merge them into on1.
In a Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1) where parts
of on2 refer to s1, merge them into on1. Nested joins are processed recursively. The
same is done in the opposite direction, pushing predicates down into sub-joins if they only
reference one side of the join.
Rewrite monadic joins to applicative joins. After this phase all
Bindnodes are of the formBind(_, _, Pure(_, _))(i.e.flatMaphas been reduced tomap).