mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-25 12:04:21 +01:00
This PR implements SQLite-compatible affinity-based type coercion for seek operations and comparison operators, bringing Limbo's behavior closer to SQLite's type conversion rules. ### Key Changes - Added affinity handling to all comparison operators (`Eq`, `Ne`, `Lt`, `Le`, `Gt`, `Ge`). - Added `get_expr_affinity()` to determine expression affinity based on column types and casts. - Added affinity functionality `CmpInsFlags` which carries the affinity information from translation layer to execution layer. - Added comprehensive `apply_numeric_affinity()` function that handles many edge cases when converting to numerical quantities. - Implemented `comparison_affinity()` that follows SQLite's affinity precedence rules. - Added fuzz tests for partial numeric strings, hex literals, and various numeric formats. ### SQLite Compatibility Improvements This implementation now correctly handles cases like: - `SELECT * FROM t WHERE x < X'41'` (blob comparisons) - `SELECT * FROM t WHERE x < '123abc'` (partial numeric strings) - `SELECT * FROM t WHERE x < 4.9 ` (float precision in seeks) - Mixed-type comparisons with proper affinity conversion Thanks 🤝@PThorpe92 and @pedrocarlo for helping improve my planner understanding. Closes: https://github.com/tursodatabase/limbo/issues/1607 Closes #1680
Integration and regression test suite.
# run all tests
cargo test
# run individual test
cargo test test_sequential_write -- --nocapture