diff --git a/pkg/sql/logictest/testdata/logic_test/order_by b/pkg/sql/logictest/testdata/logic_test/order_by index 7d50a0e65735..6f0e4a198725 100644 --- a/pkg/sql/logictest/testdata/logic_test/order_by +++ b/pkg/sql/logictest/testdata/logic_test/order_by @@ -307,7 +307,7 @@ statement ok CREATE TABLE nan (id INT PRIMARY KEY, x REAL) statement ok -INSERT INTO nan VALUES (1, 0/0), (2, -1), (3, 1), (4, 0/0) +INSERT INTO nan VALUES (1, 'NaN'), (2, -1), (3, 1), (4, 'NaN') query R SELECT x FROM nan ORDER BY x diff --git a/pkg/sql/sem/tree/datum_test.go b/pkg/sql/sem/tree/datum_test.go index eca4fd706edd..21bce9b6e34d 100644 --- a/pkg/sql/sem/tree/datum_test.go +++ b/pkg/sql/sem/tree/datum_test.go @@ -78,8 +78,6 @@ func TestDatumOrdering(t *testing.T) { {`3.14:::float`, `3.1399999999999997`, `3.1400000000000006`, `NaN`, `+Inf`}, {`9.223372036854776e+18:::float`, `9.223372036854775e+18`, `9.223372036854778e+18`, `NaN`, `+Inf`}, {`'NaN':::float`, valIsMin, `-Inf`, `NaN`, `+Inf`}, - {`-(1:::float/0)`, `NaN`, `-1.7976931348623157e+308`, `NaN`, `+Inf`}, - {`(1:::float/0)`, `1.7976931348623157e+308`, valIsMax, `NaN`, `+Inf`}, {`-1.7976931348623157e+308:::float`, `-Inf`, `-1.7976931348623155e+308`, `NaN`, `+Inf`}, {`1.7976931348623157e+308:::float`, `1.7976931348623155e+308`, `+Inf`, `NaN`, `+Inf`}, diff --git a/pkg/sql/sem/tree/eval.go b/pkg/sql/sem/tree/eval.go index 8d4d88c60133..7132cb4570cb 100644 --- a/pkg/sql/sem/tree/eval.go +++ b/pkg/sql/sem/tree/eval.go @@ -1116,7 +1116,11 @@ var BinOps = map[BinaryOperator]binOpOverload{ RightType: types.Float, ReturnType: types.Float, Fn: func(_ *EvalContext, left Datum, right Datum) (Datum, error) { - return NewDFloat(*left.(*DFloat) / *right.(*DFloat)), nil + r := *right.(*DFloat) + if r == 0.0 { + return nil, ErrDivByZero + } + return NewDFloat(*left.(*DFloat) / r), nil }, }, &BinOp{ diff --git a/pkg/sql/sem/tree/eval_test.go b/pkg/sql/sem/tree/eval_test.go index cb464a85e64f..b60796898ea5 100644 --- a/pkg/sql/sem/tree/eval_test.go +++ b/pkg/sql/sem/tree/eval_test.go @@ -252,6 +252,7 @@ func TestEvalError(t *testing.T) { }{ {`1 % 0`, `zero modulus`}, {`1 / 0`, `division by zero`}, + {`1::float / 0::float`, `division by zero`}, {`1 // 0`, `division by zero`}, {`1.5 / 0`, `division by zero`}, {`'11h2m'::interval / 0`, `division by zero`}, diff --git a/pkg/sql/sem/tree/testdata/eval/infinity b/pkg/sql/sem/tree/testdata/eval/infinity index 77bfcfde315a..01c2fd687054 100644 --- a/pkg/sql/sem/tree/testdata/eval/infinity +++ b/pkg/sql/sem/tree/testdata/eval/infinity @@ -1,13 +1,3 @@ -eval -1.0:::float / 0.0 ----- -+Inf - -eval --1.0:::float * (1.0:::float / 0.0) ----- --Inf - eval power(0::decimal, -1) ----