release-21.2: opt: fix min cardinality calculation of EXCEPT #89132
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.
Backport 1/1 commits from #89108 on behalf of @rytaft.
/cc @cockroachdb/release
Prior to this commit, we assumed that the minimum cardinality of
EXCEPT
could never be lower than the minimum cardinality of the left side minus the maximum cardinality of the right side. However, this assumption is only true forEXCEPT ALL
, notEXCEPT
.For example,
VALUES (1), (1) EXCEPT VALUES (1)
produces 0 rows, even though the left side produces more rows than the right. Because of this invalid assumption, the optimizer could make some invalid transformations, resulting in incorrect results.Fixes #89101
Release note (bug fix): Fixed a bug that has existed since v2.1.0 where queries containing a subquery with
EXCEPT
could produce incorrect results. This could happen if the optimizer could guarantee that the left side of theEXCEPT
always returned more rows than the right side. In this case, the optimizer made a faulty assupmtion that theEXCEPT
subquery always returned at least one row, which could cause the optimizer to perform an invalid transformation, possibly causing the full query to return incorrect results.Release justification: low risk fix for correctness issue