diff options
-rw-r--r-- | mysql-test/r/bigint.result | 12 | ||||
-rw-r--r-- | mysql-test/t/bigint.test | 12 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 7 |
3 files changed, 27 insertions, 4 deletions
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 6afa74d20e2..8522ef0212f 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -7,6 +7,9 @@ select 9223372036854775807,-009223372036854775808; select +9999999999999999999,-9999999999999999999; +9999999999999999999 -9999999999999999999 10000000000000000000 -10000000000000000000 +select 9223372036854775808+1; +9223372036854775808+1 +9223372036854775808 drop table if exists t1; create table t1 (a bigint unsigned not null, primary key(a)); insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE); @@ -52,3 +55,12 @@ select min(big),max(big),max(big)-1 from t1 group by a; min(big) max(big) max(big)-1 -1 9223372036854775807 9223372036854775806 drop table t1; +create table t1 (id bigint auto_increment primary key, a int) auto_increment=9999999999; +insert into t1 values (null,1); +select * from t1; +id a +9999999999 1 +select * from t1 limit 9999999999; +id a +9999999999 1 +drop table t1; diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 15c61c2c0dc..023e50b7677 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -4,7 +4,7 @@ select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296; select 9223372036854775807,-009223372036854775808; select +9999999999999999999,-9999999999999999999; - +select 9223372036854775808+1; # # In 3.23 we have to disable the test of column to bigint as # this fails on AIX powerpc (the resolution for double is not good enough) @@ -35,3 +35,13 @@ alter table t1 modify big bigint not null; select min(big),max(big),max(big)-1 from t1; select min(big),max(big),max(big)-1 from t1 group by a; drop table t1; + +# +# Test problem with big values fir auto_increment +# + +create table t1 (id bigint auto_increment primary key, a int) auto_increment=9999999999; +insert into t1 values (null,1); +select * from t1; +select * from t1 limit 9999999999; +drop table t1; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index f09aac1b357..d94118ebfc6 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2376,6 +2376,7 @@ delete_limit_clause: ULONG_NUM: NUM { $$= strtoul($1.str,NULL,10); } + | LONG_NUM { $$= (ulonglong) strtoll($1.str,NULL,10); } | ULONGLONG_NUM { $$= (ulong) strtoull($1.str,NULL,10); } | REAL_NUM { $$= strtoul($1.str,NULL,10); } | FLOAT_NUM { $$= strtoul($1.str,NULL,10); }; @@ -2383,7 +2384,7 @@ ULONG_NUM: ulonglong_num: NUM { $$= (ulonglong) strtoul($1.str,NULL,10); } | ULONGLONG_NUM { $$= strtoull($1.str,NULL,10); } - | LONG_NUM { $$= (ulonglong) strtoul($1.str,NULL,10); } + | LONG_NUM { $$= (ulonglong) strtoll($1.str,NULL,10); } | REAL_NUM { $$= strtoull($1.str,NULL,10); } | FLOAT_NUM { $$= strtoull($1.str,NULL,10); }; @@ -3110,8 +3111,8 @@ text_string: literal: text_literal { $$ = $1; } - | NUM { $$ = new Item_int($1.str, (longlong) atol($1.str),$1.length); } - | LONG_NUM { $$ = new Item_int($1.str); } + | NUM { $$ = new Item_int($1.str, (longlong) strtol($1.str, NULL, 10),$1.length); } + | LONG_NUM { $$ = new Item_int($1.str, (longlong) strtoll($1.str,NULL,10), $1.length); } | ULONGLONG_NUM { $$ = new Item_uint($1.str, $1.length); } | REAL_NUM { $$ = new Item_real($1.str, $1.length); } | FLOAT_NUM { $$ = new Item_float($1.str, $1.length); } |