mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-24 11:34:21 +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
Turso Testing
Testing Extensions
When adding tests for extensions, please follow these guidelines:
- Tests that verify the internal logic or behavior of a particular extension should go into
cli_tests/extensions.py. - Tests that verify how extensions interact with the database engine, such as virtual table handling, should be written
in TCL (see
vtab.testas an example).
To check which extensions are available in TCL, or to add a new one, refer to the tester.tcl file and look at the extension_map.