[SPARK-50380][SQL] ReorderAssociativeOperator should respect the contract in ConstantFolding #48918
+37
−19
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.
What changes were proposed in this pull request?
This PR fixes a long-standing issue in
ReorderAssociativeOperator
. In this rule, we flatten the Add/Multiply nodes, and combine the foldable operands into a single Add/Multiply, then evaluate it into a literal. This is fine normally, but we added a new contract inConstantFolding
with #36468 , due to the introduction of ANSI mode and we don't want to fail eagerly for expressions within conditional branches.ReorderAssociativeOperator
does not follow this contract.The solution in this PR is to leave the expression evaluation to
ConstantFolding
.ReorderAssociativeOperator
should only match literals. This makes sure that the early expression evaluation follows all the contracts inConstantFolding
.Why are the changes needed?
Avoid failing the query which should not fail. This also fixes a regression caused by #48395 , which does not introduce the bug, but makes the bug more likely to happen.
Does this PR introduce any user-facing change?
Yes, failed queries can run now.
How was this patch tested?
new test
Was this patch authored or co-authored using generative AI tooling?
no