Returns true if expr
can be evaluated using only the output of plan
.
Returns true if expr
can be evaluated using only the output of plan
. This method
can be used to determine when it is acceptable to move expression evaluation within a query
plan.
For example consider a join between two relations R(a, b) and S(c, d).
- canEvaluate(EqualTo(a,b), R)
returns true
- canEvaluate(EqualTo(a,c), R)
returns false
- canEvaluate(Literal(1), R)
returns true
as literals CAN be evaluated on any plan
Returns true iff expr
could be evaluated as a condition within join.
Returns true iff expr
could be evaluated as a condition within join.
Flatten all inner joins, which are next to each other.
Flatten all inner joins, which are next to each other. Return a list of logical plans to be joined with a boolean for each plan indicating if it was involved in an explicit cross join. Also returns the entire list of join conditions for the left-deep tree.
A pattern that collects the filter and inner joins.
Filter | inner Join / \ ----> (Seq(plan0, plan1, plan2), conditions) Filter plan2 | inner join / \ plan0 plan1
Note: This pattern currently only works for left-deep trees.