fix: fix NotEq case in anticipation of non-literals #1260
Merged
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.
The code as written fails when the "other" [min, max] interval has size greater than 1.
Call the left-hand-side's interval:
[lmin, lmax]and the right-hand-side's interval:[rmin, rmax]. The current expression is:By transitivity, in either conjunction, lmin == lmax. That means the column has a single known value: lmin (equivalently: lmax).
If the right-hand-side is only ever literals or expressions thereof, its interval is always
[x, x]. In that case, this expression is tantamount to: is the column constant and equal tox?If the right-hand-side is either another column or some non-deterministic expression, the interval could be, for example:
[10, 11]. If the column is known to be the constant value10(i.e. its min and max are 10), we cannot prune this chunk! The rows where the right-hand-side is 11 would satisfy the inequality.I'm also open to:
(lmin == lmax) && (lmin == rmin)with a comment indicating that, because we only have literals, rmin is necessarily equal to rmax and thus rmin is the, known, right-hand-side value.