Commit 41eda1c9 authored by monty@mysql.com's avatar monty@mysql.com

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
parent dd287a4c
...@@ -15,9 +15,11 @@ select 9223372036854775808+1; ...@@ -15,9 +15,11 @@ select 9223372036854775808+1;
9223372036854775809 9223372036854775809
drop table if exists t1; drop table if exists t1;
create table t1 (a bigint unsigned not null, primary key(a)); 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;
a a
18446744073709551612
18446744073709551613
18446744073709551614 18446744073709551614
18446744073709551615 18446744073709551615
select * from t1 where a=18446744073709551615; select * from t1 where a=18446744073709551615;
...@@ -26,6 +28,8 @@ a ...@@ -26,6 +28,8 @@ a
delete from t1 where a=18446744073709551615; delete from t1 where a=18446744073709551615;
select * from t1; select * from t1;
a a
18446744073709551612
18446744073709551613
18446744073709551614 18446744073709551614
drop table t1; drop table t1;
create table t1 ( a int not null default 1, big bigint ); create table t1 ( a int not null default 1, big bigint );
...@@ -69,9 +73,11 @@ id a ...@@ -69,9 +73,11 @@ id a
drop table t1; drop table t1;
CREATE TABLE t1 ( quantity decimal(60,0)); CREATE TABLE t1 ( quantity decimal(60,0));
insert into t1 values (10000000000000000000); insert into t1 values (10000000000000000000);
insert into t1 values (10000000000000000000.0);
insert into t1 values ('10000000000000000000'); insert into t1 values ('10000000000000000000');
select * from t1; select * from t1;
quantity quantity
-8446744073709551616
10000000000000000000 10000000000000000000
10000000000000000000 10000000000000000000
drop table t1; drop table t1;
...@@ -14,7 +14,7 @@ select 9223372036854775808+1; ...@@ -14,7 +14,7 @@ select 9223372036854775808+1;
drop table if exists t1; drop table if exists t1;
create table t1 (a bigint unsigned not null, primary key(a)); 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;
select * from t1 where a=18446744073709551615; select * from t1 where a=18446744073709551615;
# select * from t1 where a='18446744073709551615'; # select * from t1 where a='18446744073709551615';
...@@ -50,10 +50,12 @@ drop table t1; ...@@ -50,10 +50,12 @@ drop table t1;
# #
# Item_uint::save_to_field() # Item_uint::save_to_field()
# BUG#1845 # BUG#1845
# This can't be fixed in MySQL 4.0 without loosing precisions for bigints
# #
CREATE TABLE t1 ( quantity decimal(60,0)); CREATE TABLE t1 ( quantity decimal(60,0));
insert into t1 values (10000000000000000000); insert into t1 values (10000000000000000000);
insert into t1 values (10000000000000000000.0);
insert into t1 values ('10000000000000000000'); insert into t1 values ('10000000000000000000');
select * from t1; select * from t1;
drop table t1; drop table t1;
......
...@@ -548,18 +548,6 @@ bool Item_string::save_in_field(Field *field, bool no_conversions) ...@@ -548,18 +548,6 @@ bool Item_string::save_in_field(Field *field, bool no_conversions)
return 0; 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) bool Item_int::save_in_field(Field *field, bool no_conversions)
{ {
......
...@@ -232,7 +232,6 @@ class Item_uint :public Item_int ...@@ -232,7 +232,6 @@ class Item_uint :public Item_int
String *val_str(String*); String *val_str(String*);
void make_field(Send_field *field); void make_field(Send_field *field);
Item *new_item() { return new Item_uint(name,max_length); } 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) bool fix_fields(THD *thd,struct st_table_list *table_list)
{ {
unsigned_flag= 1; unsigned_flag= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment