mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-28 05:24:22 +01:00
Closes #3470 ## Background In a query like `SELECT * FROM t LEFT JOIN s ON t.a=s.a WHERE s.a = 'foo'` we can remove the LEFT JOIN and replace it with an `INNER JOIN` because NULL values will never be equal to 'foo'. Rewriting as `INNER JOIN` allows the optimizer to also reorder the table join order to come up with a more efficient query plan. In fact, we have this optimization already. ## Problem However, there is a dumb bug where `WhereTerm`s involving this join still retain their `from_outer_join` state, resulting in forcing the evaluation of those terms at the original join index, which results in completely wrong bytecode if the join optimizer decides to reorder the join as `s JOIN t` instead. Effectively it will evaluate `t.a=s.a` after table `s` is open but table `t` is not open yet. ## Fix This PR fixes that issue by clearing `from_outer_join` properly from the relevant `WhereTerm`s. Closes #3475