Repository navigation
Conversation
…cates A required field nested in an optional struct, list, or map can be null when its parent is null, so IS NULL and NOT NULL must not be folded for it. Only fold when the field and all of its ancestors are required, matching Java's UnboundPredicate#bindUnaryOperation.
There was a problem hiding this comment.
🟢 Approval recommended
The implementation correctly prevents unsafe pruning and preserves valid folding for fully required paths.
0 open findings
What changed in this PR
Fixes unsafe null-predicate folding for required fields beneath optional ancestors.
Changes:
- Checks ancestor nullability before constant folding.
- Adds nested optional/required struct tests.
- Passes schema context into unary binding.
| File | Description |
|---|---|
src/iceberg/expression/predicate.cc |
Implements ancestor-aware folding. |
src/iceberg/expression/predicate.h |
Updates unary binding signature. |
src/iceberg/test/predicate_test.cc |
Tests nested nullability behavior. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
IS NULLandNOT NULLon a required field nested in an optional struct were folded toAlwaysFalse/AlwaysTrue, so scans could prune files that still match: a required field is null whenever its parent is null.Only fold when the field and all of its ancestors are required, matching Java's
UnboundPredicate#bindUnaryOperation.