Skip to content

Commit 15fd62d

Browse files
author
James Cor
committed
int limits
1 parent 8d4a7bc commit 15fd62d

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

enginetest/queries/script_queries.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7799,6 +7799,26 @@ where
77997799
},
78007800
},
78017801
},
7802+
{
7803+
Name: "negative int limits",
7804+
Dialect: "mysql",
7805+
SetUpScript: []string{
7806+
"CREATE TABLE t(i8 tinyint, i16 smallint, i24 mediumint, i32 int, i64 bigint);",
7807+
"INSERT INTO t VALUES(-128, -32768, -8388608, -2147483648, -9223372036854775808);",
7808+
},
7809+
Assertions: []ScriptTestAssertion{
7810+
{
7811+
Query: "SELECT -i8, -i16, -i24, -i32 from t;",
7812+
Expected: []sql.Row{
7813+
{128, 32768, 8388608, 2147483648},
7814+
},
7815+
},
7816+
{
7817+
Query: "SELECT -i64 from t;",
7818+
ExpectedErrStr: "BIGINT out of range for -9223372036854775808",
7819+
},
7820+
},
7821+
},
78027822
}
78037823

78047824
var SpatialScriptTests = []ScriptTest{

sql/expression/arithmetic.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ package expression
1616

1717
import (
1818
"fmt"
19-
"reflect"
19+
"math"
20+
"reflect"
2021
"regexp"
2122
"strconv"
2223
"strings"
@@ -704,12 +705,24 @@ func (e *UnaryMinus) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
704705
case int:
705706
return -n, nil
706707
case int8:
708+
if n == math.MinInt8 {
709+
return -int16(n), nil
710+
}
707711
return -n, nil
708712
case int16:
713+
if n == math.MinInt16 {
714+
return -int32(n), nil
715+
}
709716
return -n, nil
710717
case int32:
718+
if n == math.MinInt32 {
719+
return -int64(n), nil
720+
}
711721
return -n, nil
712722
case int64:
723+
if n == math.MinInt64 {
724+
return nil, sql.ErrValueOutOfRange.New("BIGINT", fmt.Sprintf("%d", n))
725+
}
713726
return -n, nil
714727
case uint:
715728
return -int(n), nil

0 commit comments

Comments
 (0)