You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PiecewiseMergeJoin reports a false equi-key equivalence for INNER range joins, dropping a required sort #24360
An INNERPiecewiseMergeJoin reports a false output equivalence between the two sides of its range predicate, which can make the optimizer drop a required sort and return wrongly ordered results.
PiecewiseMergeJoinExec::compute_properties passes the join's on pair to join_equivalence_properties as if it were an equijoin key. For an INNER join, join_equivalence_properties registers left_on == right_on as an output equivalence. But PWMJ's on is a range predicate (l.v < r.v), not equality — so this equivalence is false. A downstream ORDER BY on the "other" column can then be optimized away because the planner believes it is already sorted.
To Reproduce
setdatafusion.optimizer.enable_piecewise_merge_join = true;
createtablel(v int) asvalues (1),(2),(3),(5),(8);
createtabler(v int) asvalues (4),(6),(9),(2);
selectl.vas lv, r.vas rv
from l join r onl.v<r.vwherel.v=2order byr.v;
Activity
fix: don't report equi-key equivalence for PiecewiseMergeJoin range j…
fix: don't report equi-key equivalence for PiecewiseMergeJoin range j…