summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/bigint.result8
-rw-r--r--mysql-test/t/bigint.test4
-rw-r--r--sql/item.cc16
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);
}