Evaluate LHS subqueries once#7352
Open
howenyap wants to merge 5 commits into
Open
Conversation
Contributor
Fossier: Manual Review Requested
Score BreakdownTotal Score: 51.2/100 | Confidence: 100% | Outcome: REVIEW
|
Contributor
Fossier: Manual Review Requested
Score BreakdownTotal Score: 51.2/100 | Confidence: 100% | Outcome: REVIEW
|
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.
Description
Closes #5152
When parsing where clauses in the planner, BETWEEN statements are expanded into two comparisons. This results in LHS being cloned, and later evaluated twice.
My initial idea of a fix is to add a guard to avoid expanding BETWEEN statements if the LHS is a subquery, but this still evaluates LHS twice if the subquery is nested, so I chose to walk the LHS and check whether any subqueries exist in any level instead.
The
expr_contains_subqueryfunction was copied from here by @PThorpe92.Testing
Before adding the fix, I've added a snapshot test that shows the query plan as:
After the fix, the new query plan reflects only evaluating the subquery once:
Description of AI Usage
Codex was used to explore the codebase and write most of the code, all code was manually reviewd.