Preserve parent validity when filtering struct layouts - #9871
Conversation
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Merging this PR will degrade performance by 15.17%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | arrow_checked_add_u32_neon[16384] |
12.3 µs | 20.3 µs | -39.6% |
| ❌ | WallTime | mul_u32_nonnull_avx512 |
5.6 µs | 6.3 µs | -10.92% |
| ⚡ | Simulation | allocate_drop_arrow[0] |
456.9 ns | 402.7 ns | +13.45% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing adamg/nullable-struct-filter (f6eec47) with develop (8f3dfb4)
Footnotes
-
218 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. ↩
Filtering a nullable struct delegated predicates to child layouts without applying the parent validity bitmap. A null parent with stored a = 7 could therefore fail a IS NULL. Apply parent validity before child filtering, then evaluate the predicate on a null struct to retain matching null-parent rows.
Skip child-statistics pruning at nullable struct boundaries because those statistics omit inherited nulls. This is conservative and can reduce pruning even when all parent rows are valid. Regression tests cover IS NULL, IS NOT NULL, comparisons, null roots, and incoming row masks.
🤖 Generated with Codex