Expose list membership with SQL null semantics in Java and Python - #10053
robert3005 wants to merge 9 commits into
Conversation
Merging this PR will regress 1 benchmark
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | dict_canonicalize_gt_u8_avx512[1000000] |
534.5 µs | 836.7 µs | -36.12% |
| ⚡ | Simulation | nested_list_random[4] |
1,926.8 µs | 633.5 µs | ×3 |
| ⚡ | Simulation | utf8_random[4] |
732.2 µs | 278.5 µs | ×2.6 |
| ⚡ | Simulation | i64_random_chunked[4] |
406.2 µs | 178.4 µs | ×2.3 |
| ⚡ | Simulation | i64_random[4] |
146.5 µs | 82.4 µs | +77.74% |
| ⚡ | Simulation | density_sweep_single_slice[0.9] |
48.8 µs | 32.6 µs | +49.75% |
| ⚡ | WallTime | dict_canonicalize_gt_u8_neon[1000000] |
561.6 µs | 492 µs | +14.15% |
| ⚡ | WallTime | words_gather_dispatch_neon[65536] |
2.3 µs | 2 µs | +10.56% |
| 🆕 | Simulation | i64_random_chunked[256] |
N/A | 320.4 µs | N/A |
| 🆕 | Simulation | i64_random[256] |
N/A | 225.8 µs | N/A |
| 🆕 | Simulation | nested_list_random[32] |
N/A | 1 ms | N/A |
| 🆕 | Simulation | utf8_random[256] |
N/A | 508.9 µs | N/A |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing rk/list-contains-bindings (2a51612) with claude/friendly-knuth-dj6ed1-list-contains (5bea57b)2
Footnotes
-
525 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
-
No successful run was found on
claude/friendly-knuth-dj6ed1-list-contains(159aaff) during the generation of this report, so a7d2c7f was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
2aaa1b6 to
1b63fd8
Compare
1b63fd8 to
3151b45
Compare
3151b45 to
b6ffdda
Compare
b6ffdda to
ed99a18
Compare
ed99a18 to
0e3443a
Compare
0e3443a to
2242462
Compare
2242462 to
828a8f7
Compare
828a8f7 to
3dd8f74
Compare
Replace comparison/OR chains with prepared membership probes, normalize constant sets, and evaluate list and needle columns together. Include canonicalization support and probe regressions. Build on the separate SQL null-semantics and benchmark changes. Signed-off-by: Robert Kruszewski <github@robertk.io>
Import the execution-context trait, remove trailing macro commas, and construct the struct fixture outside the generated fallible test wrapper. Signed-off-by: Robert Kruszewski <github@robertk.io>
Signed-off-by: Robert Kruszewski <github@robertk.io>
Signed-off-by: Robert Kruszewski <github@robertk.io>
Add Java/JNI list literals, listContains and IN/NOT IN builders. Expose the SQL null-semantics option and in_list in Python, including list literal coercion, public exports, typing, documentation and regression coverage. Signed-off-by: Robert Kruszewski <github@robertk.io>
Signed-off-by: Robert Kruszewski <github@robertk.io>
3dd8f74 to
2a51612
Compare
Summary
Expose the membership expressions from #10052 in Java/JNI and Python, so callers can construct one set-membership expression with either Vortex or SQL null semantics.
Stacked on #10052, which builds on the SQL null semantics in #10057. DuckDB integration follows in #10054.
Changes
listContains,in, andnotIn, plus nonempty, empty, and null list literals and their JNI implementations.list_contains(..., sql_null_semantics=True)andin_list(value, list); negatein_listfor SQLNOT IN.Validation:
cargo clippy -p vortex-jni -p vortex-python --all-targets --all-features -- -D warnings,uvx ty check vortex-python, and Ruff on the changed expression stub passed. Java main and test sources compiled with./gradlew :vortex-jni:compileJava :vortex-jni:compileTestJava -x buildJniLibrary -x makeTestFiles --console=plain(native compilation checked separately with Cargo). Runtime tests and benchmarks were not executed.