Repository navigation
fix(r13): NULL join keys never pair, hash and nested-loop paths (P52, R13 slice 6c) - #103
Merged
Merged
Conversation
…s (P52, R13 slice 6) Nested loop: `compare_values` asks the predicate-layer `compare_trilean` (now pub(crate)) and keeps a pair only when it is TRUE, so a NULL on either side is UNKNOWN - the same rule WHERE and SELECT use. Hash path: a NULL key is never indexed, so a NULL probe finds nothing and LEFT still emits its row unmatched; the probe side needs no change. Six of the seven P52 cases DIFFER -> AGREE; the three inequality guards held. The seventh, the single-condition RIGHT join, now returns DuckDB's 12 rows but still differs: it uncovered P63 (that path labels the swapped tables backwards - pre-existing, outside R13), pinned as 04_joins.toml :: right_join_single_condition. 191 -> 197 AGREE / 230. FORMAL examples, Python (572) and Rust suites green; 100k-row hash join level with main. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
P52 closed on every join path, 191 -> 197 AGREE / 230. P63 filed: the single-condition RIGHT JOIN (hash path) swaps a.* and b.* on every row - P8's fault on the path P8's scope note called safe; corrected there. P63 goes to the top of the fix-order table beside R13, as its own PR. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Summary
R13 slice 6, third part — closes P52.
compare_valuesnow asks the predicate-layercompare_trilean(madepub(crate)) and keeps a pair only when TRUE. JOIN ON uses the same NULL rule as WHERE and SELECT.Found along the way: P63 (filed, pinned, not fixed here)
The hash RIGHT case now returns DuckDB's 12 rows but still differs: every single-condition RIGHT JOIN swaps
a.*andb.*(pre-existing on main — P8's fault on the hash path, which no corpus case had ever reached). Outside R13 (result assembly), so it gets its own PR. New case04_joins.toml :: right_join_single_condition(DIFFER).Checks
expander_rewriterssmoke fails, as on main).Next
P63 (own PR) → 6d:
WhereClauseconnector list →BinaryOp AND, retireRecursiveWhereEvaluator, close R13.🤖 Generated with Claude Code