-
Notifications
You must be signed in to change notification settings - Fork 3.7k
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
release-21.2: norm: do not fold floor division with unit denominator #89264
Conversation
Thanks for opening a backport. Please check the backport criteria before merging:
If some of the basic criteria cannot be satisfied, ensure that the exceptional criteria are satisfied within.
Add a brief release justification to the body of your PR to justify this backport. Some other things to consider:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @mgartner and @msirek)
pkg/sql/opt/norm/general_funcs.go
line 69 at r1 (raw file):
// IsJSON returns true if the given scalar expression is of type // JSON. func (c *CustomFuncs) IsJSON(scalar opt.ScalarExpr) bool {
[nit] Added by the backport
pkg/sql/logictest/testdata/logic_test/float
line 163 at r1 (raw file):
true false statement ok
[nit] I think everything above this was added incorrectly by the backport
The floor division operator `//` is like division but drops the fractional portion of the result. Normalization rule FoldDivOne rewrites `(column // 1)` as `(column)` which is incorrect if the data in `column` has fractional digits, as those digits should be dropped. The solution is to only fold `(column // 1)` when `column` is one of the integer types. Release note (bug fix): This patch fixes incorrect results from the floor division operator, `//`, when the numerator is non-constant and the denominator is the constant 1.
f992971
to
009021e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: complete! 0 of 0 LGTMs obtained (waiting on @DrewKimball and @mgartner)
pkg/sql/opt/norm/general_funcs.go
line 69 at r1 (raw file):
Previously, DrewKimball (Drew Kimball) wrote…
[nit] Added by the backport
Fixed
pkg/sql/logictest/testdata/logic_test/float
line 163 at r1 (raw file):
Previously, DrewKimball (Drew Kimball) wrote…
[nit] I think everything above this was added incorrectly by the backport
Fixed, thanks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 5 files at r1, 2 of 2 files at r2, all commit messages.
Reviewable status: complete! 1 of 0 LGTMs obtained (waiting on @DrewKimball and @mgartner)
Backport 1/1 commits from #87808.
/cc @cockroachdb/release
Fixes #87605
The floor division operator
//
is like division but drops thefractional portion of the result. Normalization rule FoldDivOne
rewrites
(column // 1)
as(column)
which is incorrect if thedata in
column
has fractional digits, as those digits should bedropped.
The solution is to only fold
(column // 1)
whencolumn
is one ofthe integer types.
Release note (bug fix): This patch fixes incorrect results from
the floor division operator,
//
, when the numerator is non-constantand the denominator is the constant 1.
Release justification: low risk fix for incorrect results on divide by 1