diff options
-rw-r--r-- | mysql-test/r/bigint.result | 8 | ||||
-rw-r--r-- | mysql-test/t/bigint.test | 4 | ||||
-rw-r--r-- | sql/item.cc | 16 |
3 files changed, 15 insertions, 13 deletions
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 3d02a32e4a4..4c6e1645451 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -18,9 +18,11 @@ select -(0-3),round(-(0-3)), round(9999999999999999999); -(0-3) round(-(0-3)) round(9999999999999999999) 3 3 10000000000000000000 create table t1 (a bigint unsigned not null, primary key(a)); -insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE); +insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612); select * from t1; a +18446744073709551612 +18446744073709551613 18446744073709551614 18446744073709551615 select * from t1 where a=18446744073709551615; @@ -29,6 +31,8 @@ a delete from t1 where a=18446744073709551615; select * from t1; a +18446744073709551612 +18446744073709551613 18446744073709551614 drop table t1; create table t1 ( a int not null default 1, big bigint ); @@ -72,9 +76,11 @@ id a drop table t1; CREATE TABLE t1 ( quantity decimal(60,0)); insert into t1 values (10000000000000000000); +insert into t1 values (10000000000000000000.0); insert into t1 values ('10000000000000000000'); select * from t1; quantity +-8446744073709551616 10000000000000000000 10000000000000000000 drop table t1; diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 67009386282..5c977983087 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -22,7 +22,7 @@ select -(0-3),round(-(0-3)), round(9999999999999999999); # create table t1 (a bigint unsigned not null, primary key(a)); -insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE); +insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612); select * from t1; select * from t1 where a=18446744073709551615; # select * from t1 where a='18446744073709551615'; @@ -58,10 +58,12 @@ drop table t1; # # Item_uint::save_to_field() # BUG#1845 +# This can't be fixed in MySQL 4.0 without loosing precisions for bigints # CREATE TABLE t1 ( quantity decimal(60,0)); insert into t1 values (10000000000000000000); +insert into t1 values (10000000000000000000.0); insert into t1 values ('10000000000000000000'); select * from t1; drop table t1; diff --git a/sql/item.cc b/sql/item.cc index d5401b85755..4cd52c54097 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1192,17 +1192,11 @@ int Item_string::save_in_field(Field *field, bool no_conversions) int Item_uint::save_in_field(Field *field, bool no_conversions) { - longlong nr= val_int(); - int res; - - if (null_value) - return set_field_to_null(field); - field->set_notnull(); - if (nr < 0) - res= field->store(ulonglong2double(nr); - else - res= field->store(nr); - return res ? -1 : 0; + /* + TODO: To be fixed when wen have a + field->store(longlong, unsigned_flag) method + */ + Item_int::save_in_field(field, no_conversions); } |