Repository navigation
fix: write empty nested list streams with structural layouts - #10533
Conversation
Signed-off-by: Daniel King <dan@spiraldb.com>
Merging this PR will degrade performance by 2.99%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ ℹ️ | Simulation | test_scan_filter_to_arrow_array[int_float] |
3.5 ms | 4.1 ms | -13.81% |
| ❌ |
Simulation | test_repeated_scan_filter[int] |
2.5 ms | 2.8 ms | -13.04% |
| ❌ |
Simulation | test_scan_filter_to_arrow_array[int] |
2.5 ms | 2.9 ms | -12.57% |
| ❌ ℹ️ | Simulation | test_repeated_scan_filter[int_float] |
3.4 ms | 3.9 ms | -11.07% |
| ⚡ ℹ️ | Simulation | test_repeated_scan_scalar_at[int_float] |
486.7 µs | 394.2 µs | +23.48% |
| ⚡ | WallTime | filter_neon[80] |
2.9 µs | 2.5 µs | +15.82% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing danking:dk/fix-empty-nested-list-writes (d54e60f) with develop (18aebea)
…ist test #10533 added `nested_empty_list_roundtrip` calling `ListArray::try_new` without the `&mut ExecutionCtx` argument it now takes, which broke the `vortex-file` test build on develop. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BL868qtvZQwUKzuhNuWAS2
## Summary Develop doesn't compile vortex-file's tests. #10533 added `nested_empty_list_roundtrip`, which calls `ListArray::try_new` with three arguments, but #10594 had already added a fourth, the execution context. Both passed CI on their own. Since #10533 merged, the Rust build, lint and test jobs fail on develop and on every PR. ## Changes - `nested_empty_list_roundtrip` creates an execution context and passes it to both `ListArray::try_new` calls, as `nested_list_of_list_roundtrip` just above it already does. ## Testing - `cargo nextest run -p vortex-file -E 'test(/nested_empty_list_roundtrip|nested_list_of_list_roundtrip/)'` (5 passed) - `cargo clippy -p vortex-file --all-targets --all-features -- -D warnings` - `cargo +nightly-2026-09-10 fmt -p vortex-file --check` Signed-off-by: Matt Katz <mhkatz97@gmail.com>
Summary
Writing
list<list<int32>>rows containing only empty or null outer lists fails withListLayoutStrategy needs at least one chunkwhen structural list layouts are enabled. This reproduces in PyVortex 0.86.1 and 0.88.0 withVORTEX_EXPERIMENTAL_LIST_LAYOUT=1.Changes
Handle an empty list stream before spawning child writers by returning the same typed zero-row chunked layout used by the flat writer. Pass the first chunk explicitly into the nonempty transposition path, preserving its sequence ID, bounded streaming, and existing layout behavior.
Add file write/read regression cases for empty lists, nullable empty lists, all-null lists, and mixed empty/null rows. Replace the old empty-stream rejection test with nullable/nonnullable dtype and row-count checks.
Validation
develop(18aebea) with the reported error.cargo nextest run --locked -p vortex-file -p vortex-layout -E 'test(nested_) | test(writer_empty_chunks) | test(layouts::list::writer::tests)'nightly-2026-09-10rustfmt;git diff --checkpasses.Implemented with OpenAI Codex assistance.