Skip to content

Expose list membership with SQL null semantics in Java and Python - #10053

Open
robert3005 wants to merge 2 commits into
rk/list-contains-dict-runendfrom
rk/list-contains-bindings
Open

robert3005 wants to merge 2 commits into
rk/list-contains-dict-runendfrom
rk/list-contains-bindings

Conversation

@robert3005

@robert3005 robert3005 commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

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

  • Add Java listContains, in, and notIn, plus nonempty, empty, and null list literals and their JNI implementations.
  • Add Python list_contains(..., sql_null_semantics=True) and in_list(value, list); negate in_list for SQL NOT IN.
  • Fix Python typed-list construction and infer nullable list element types regardless of null position. Update exports, type stubs, and API documentation.
  • Add Java scan and literal-construction coverage, and Python tests for null semantics, empty/null lists, serialization, scan filters, and large sets.

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.

@codspeed

codspeed Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Merging this PR will degrade performance by 11.19%

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

⚠️ 1 benchmark measured no execution time

Nothing ran under measurement, usually because the compiler removed the code under test. This result is not comparable, so it counts as unchanged.

Preventing compiler optimizations

⚠️ 12 benchmarks spent significant time in system calls

System calls cannot be consistently instrumented, so they are not included in the measure, which understates the real cost. Please switch to the Walltime instrument to accurately measure system calls.

Measurement and system calls

❌ 4 regressed benchmarks
✅ 2179 untouched benchmarks
⏩ 359 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
❌ WallTime compare_int_constant_neon 3.8 µs 4.4 µs -12.09%
❌ WallTime bitpack_blocked_compress_avx2 6.7 µs 7.6 µs -11.39%
❌ WallTime compare_u8_neon 1.9 µs 2.1 µs -11.27%
❌ WallTime deferred_bool_neon[i32, PerRowPerRow] 4.2 µs 4.7 µs -10.02%

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 (446956a) with rk/list-contains-dict-runend (520e97b)

Open in CodSpeed

Footnotes

  1. 359 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. ↩

@robert3005
robert3005 removed this pull request from stack #10055 September 25, 2026 14:05
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 2aaa1b6 to 1b63fd8 Compare September 25, 2026 14:06
@robert3005
robert3005 added this pull request to stack #10058 September 25, 2026 14:06
@robert3005
robert3005 removed this pull request from stack #10058 September 25, 2026 14:09
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 1b63fd8 to 3151b45 Compare September 25, 2026 14:09
@robert3005
robert3005 added this pull request to stack #10061 September 25, 2026 14:09
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 25, 2026 14:21 Inactive
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 3151b45 to b6ffdda Compare September 25, 2026 15:53
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 25, 2026 16:04 Inactive
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from b6ffdda to ed99a18 Compare September 25, 2026 16:28
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 25, 2026 16:39 Inactive
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from ed99a18 to 0e3443a Compare September 25, 2026 17:10
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 25, 2026 17:20 Inactive
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 0e3443a to 2242462 Compare September 25, 2026 17:26
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 25, 2026 17:37 Inactive
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 2242462 to 828a8f7 Compare September 25, 2026 20:28
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 828a8f7 to 3dd8f74 Compare September 28, 2026 20:43
@robert3005
robert3005 marked this pull request as ready for review September 28, 2026 22:16
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 3dd8f74 to 2a51612 Compare September 29, 2026 19:13
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-10053 September 29, 2026 19:24 Inactive
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>
@robert3005
robert3005 removed this pull request from stack #10061 October 12, 2026 10:29
@robert3005
robert3005 force-pushed the rk/list-contains-bindings branch from 2a51612 to 446956a Compare October 12, 2026 10:29
@robert3005
robert3005 added this pull request to stack #10441 October 12, 2026 10:29
@robert3005
robert3005 removed this pull request from stack #10441 October 12, 2026 10:29
@robert3005
robert3005 changed the base branch from claude/friendly-knuth-dj6ed1-list-contains to rk/list-contains-dict-runend October 12, 2026 10:29
@robert3005
robert3005 added this pull request to stack #10443 October 12, 2026 10:29

This branch was successfully deployed

1 active deployment
docs-preview/pr-10053 — 446956aa Deployed Oct 12, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant