starocean999 opened a new pull request, #64898:
URL: https://github.com/apache/doris/pull/64898
When `PushDownJoinOtherCondition` processes a `NULL_AWARE_LEFT_ANTI_JOIN`
with empty hash join conjuncts, it incorrectly pushes the other join
conditions
that reference only the right-side slots down to the right child. This
changes
the evaluation semantics of the NOT IN subquery, because filtering the right
child before the null-aware anti join eliminates NULL values prematurely.
For a `NULL_AWARE_LEFT_ANTI_JOIN`, the hash join conjuncts represent the
correlation between the outer and inner tables. When there is no correlation
(i.e., hash conjuncts are empty), the other join conditions must not be
pushed
to the right child, as doing so would filter rows from the subquery result
before the NULL check, potentially producing incorrect results.
Example affected query:
SELECT COUNT(*) FROM (SELECT 1 AS x) t
WHERE 1 NOT IN (SELECT CAST(NULL AS INT));
The subquery returns NULL, so NOT IN should evaluate to UNKNOWN (NULL),
meaning no rows match and COUNT returns 0. However, pushing the other
condition
to the right child changes this behavior and produces wrong results.
Fix:
Add a guard in `PushDownJoinOtherCondition` to keep the other condition as
a remaining other conjunct (not pushed to the right child) when the join
type
is `NULL_AWARE_LEFT_ANTI_JOIN` and hash join conjuncts are empty.
None
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [ ] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR should
merge into -->
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]