summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormonty@mysql.com <>2003-11-21 00:11:50 +0200
committermonty@mysql.com <>2003-11-21 00:11:50 +0200
commit41eda1c949671be87631255df355530da4efb745 (patch)
tree4cd9739fe1fd00afa4e9117b8d45599375b500cb
parentdd287a4cdf4b8937ce428678fa096134a5ae8a88 (diff)
downloadmariadb-git-41eda1c949671be87631255df355530da4efb745.tar.gz
Revert patch for bigint handling in double context as it broke normal bigint handling
The right way to fix this is to change the Field::store(longlong) method to be Field::store(longlong, bool unsigned_flag), but this is better to do in 4.1 than in 4.0
-rw-r--r--mysql-test/r/bigint.result8
-rw-r--r--mysql-test/t/bigint.test4
-rw-r--r--sql/item.cc12
-rw-r--r--sql/item.h1
4 files changed, 10 insertions, 15 deletions
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result
index 2b595c2b83d..308adc881f2 100644
--- a/mysql-test/r/bigint.result
+++ b/mysql-test/r/bigint.result
@@ -15,9 +15,11 @@ select 9223372036854775808+1;
9223372036854775809
drop table if exists t1;
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;
@@ -26,6 +28,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 );
@@ -69,9 +73,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 a7cc068ec46..f21f821e45c 100644
--- a/mysql-test/t/bigint.test
+++ b/mysql-test/t/bigint.test
@@ -14,7 +14,7 @@ select 9223372036854775808+1;
drop table if exists t1;
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';
@@ -50,10 +50,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 65eb7f1befd..fc6256d4fed 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -548,18 +548,6 @@ bool Item_string::save_in_field(Field *field, bool no_conversions)
return 0;
}
-bool Item_uint::save_in_field(Field *field, bool no_conversions)
-{
- longlong nr=val_int();
- if (null_value)
- return set_field_to_null(field);
- field->set_notnull();
- if (nr < 0)
- field->store(ulonglong2double(nr));
- else
- field->store(nr);
- return 0;
-}
bool Item_int::save_in_field(Field *field, bool no_conversions)
{
diff --git a/sql/item.h b/sql/item.h
index d23a061eedb..e8a6313b6a0 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -232,7 +232,6 @@ public:
String *val_str(String*);
void make_field(Send_field *field);
Item *new_item() { return new Item_uint(name,max_length); }
- bool save_in_field(Field *field, bool no_conversions);
bool fix_fields(THD *thd,struct st_table_list *table_list)
{
unsigned_flag= 1;