-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[fix](Nereids) infer predicates generate wrong result #23456
Conversation
We use two facilities to do predicate infer: PredicatePropagation and PullUpPredicates. In the prvious implementation, we use a set to save the intermediate result of PredicatePropagation. The purpose is infer new predicate though two equal relation. However, it is the wrong way. Because it could infer wrong predicate through outer join. For example ```sql select a.c1 from a left join b on a.c2 = b.c2 and a.c1 = '1' left join c on a.c2 = c.c2 and a.c1 = '2' inner join d on a.c3=d.c3 ``` the predicates `a.c1 = '1'` and `a.c1 = '2'` should not be inferred as filter to relation `a`. This PR: 1. revert the change from PR apache#22145, commit 3c58e9b 2. Remove the unreasonable restrict in PullupPredicate. 3. Use new Filter node rather than new otherCondition on join node to save infer predicates
run buildall |
(From new machine)TeamCity pipeline, clickbench performance test result: |
PR approved by anyone and no changes requested. |
PR approved by at least one committer and no changes requested. |
We use two facilities to do predicate infer: PredicatePropagation and PullUpPredicates. In the prvious implementation, we use a set to save the intermediate result of PredicatePropagation. The purpose is infer new predicate though two equal relation. However, it is the wrong way. Because it could infer wrong predicate through outer join. For example ```sql select a.c1 from a left join b on a.c2 = b.c2 and a.c1 = '1' left join c on a.c2 = c.c2 and a.c1 = '2' inner join d on a.c3=d.c3 ``` the predicates `a.c1 = '1'` and `a.c1 = '2'` should not be inferred as filter to relation `a`. This PR: 1. revert the change from PR #22145, commit 3c58e9b 2. Remove the unreasonable restrict in PullupPredicate. 3. Use new Filter node rather than new otherCondition on join node to save infer predicates
We use two facilities to do predicate infer: PredicatePropagation and PullUpPredicates. In the prvious implementation, we use a set to save the intermediate result of PredicatePropagation. The purpose is infer new predicate though two equal relation. However, it is the wrong way. Because it could infer wrong predicate through outer join. For example
the predicates
a.c1 = '1'
anda.c1 = '2'
should not be inferred as filter to relationa
.This PR: