Builds join graph information to be used by the filtering strategies.
Builds join graph information to be used by the filtering strategies. Currently, it builds the sets of star/non-star joins. It can be extended with the sets of connected/unconnected joins, which can be used to filter Cartesian products.
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.
Applies the star-join filter that eliminates join combinations among star and non-star tables until the star join is built.
Applies the star-join filter that eliminates join combinations among star and non-star tables until the star join is built.
Given the oneSideJoinPlan/otherSideJoinPlan, which represent all the plan permutations generated by the DP join enumeration, and the star/non-star plans, the following plan combinations are allowed: 1. (oneSideJoinPlan U otherSideJoinPlan) is a subset of star-join 2. star-join is a subset of (oneSideJoinPlan U otherSideJoinPlan) 3. (oneSideJoinPlan U otherSideJoinPlan) is a subset of non star-join
It assumes the sets are disjoint.
Example query graph:
t1 d1 - t2 - t3 \ / f1 | d2
star: {d1, f1, d2} non-star: {t2, t1, t3}
level 0: (f1 ), (d2 ), (t3 ), (d1 ), (t1 ), (t2 ) level 1: {t3 t2 }, {f1 d2 }, {f1 d1 } level 2: {d2 f1 d1 } level 3: {t1 d1 f1 d2 }, {t2 d1 f1 d2 } level 4: {d1 t2 f1 t1 d2 }, {d1 t3 t2 f1 d2 } level 5: {d1 t3 t2 f1 t1 d2 }
One side of the join represented as a set of plan ids.
The other side of the join represented as a set of plan ids.
Star and non-star plans represented as sets of plan ids
Implements optional filters to reduce the search space for join enumeration.
1) Star-join filters: Plan star-joins together since they are assumed to have an optimal execution based on their RI relationship. 2) Cartesian products: Defer their planning later in the graph to avoid large intermediate results (expanding joins, in general). 3) Composite inners: Don't generate "bushy tree" plans to avoid materializing intermediate results.
Filters (2) and (3) are not implemented.