summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@narttu.mysql.fi>2003-02-27 02:10:19 +0200
committerunknown <monty@narttu.mysql.fi>2003-02-27 02:10:19 +0200
commit3f9ea80268126f8401bd27f03b842cd03cde7c9f (patch)
tree100a0bcb7776279c8d8c822cac9164e8c17acc14
parent66afa065530f724702b82e51c3c88a8770330230 (diff)
downloadmariadb-git-3f9ea80268126f8401bd27f03b842cd03cde7c9f.tar.gz
Integer values between 9223372036854775807 and 9999999999999999999 are now
regarded as unsigned longlongss, not as floats. This make these values work similar to values between 10000000000000000000 and 18446744073709551615. mysql-test/r/bigint.result: Fixed results for bigints mysql-test/t/bigint.test: Fixed results for bigints sql/item.h: Mark unsigned big ints as unsigned sql/sql_lex.cc: Returns numbers between 9223372036854775807 and 9999999999999999999 as unsigned 64 bit numbers
-rw-r--r--mysql-test/r/bigint.result4
-rw-r--r--mysql-test/t/bigint.test6
-rw-r--r--sql/item.h5
-rw-r--r--sql/sql_lex.cc2
4 files changed, 8 insertions, 9 deletions
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result
index 40d29e17237..d7d811dc5f3 100644
--- a/mysql-test/r/bigint.result
+++ b/mysql-test/r/bigint.result
@@ -6,13 +6,13 @@ select 9223372036854775807,-009223372036854775808;
9223372036854775807 -9223372036854775808
select +9999999999999999999,-9999999999999999999;
+9999999999999999999 -9999999999999999999
-10000000000000000000 -10000000000000000000
+9999999999999999999 -10000000000000000000
select cast(9223372036854775808 as unsigned)+1;
cast(9223372036854775808 as unsigned)+1
9223372036854775809
select 9223372036854775808+1;
9223372036854775808+1
-9223372036854775808
+9223372036854775809
drop table if exists t1;
create table t1 (a bigint unsigned not null, primary key(a));
insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE);
diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test
index 287d157e5d6..c5691a760c7 100644
--- a/mysql-test/t/bigint.test
+++ b/mysql-test/t/bigint.test
@@ -5,12 +5,6 @@ select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296;
select 9223372036854775807,-009223372036854775808;
select +9999999999999999999,-9999999999999999999;
select cast(9223372036854775808 as unsigned)+1;
-
-#
-# We need to do a REPLACE here as the atof() function returns different
-# values on True64 and HPUX11
-#
---replace_result 9223372036854775800 9223372036854775808
select 9223372036854775808+1;
#
# In 3.23 we have to disable the test of column to bigint as
diff --git a/sql/item.h b/sql/item.h
index c669c266f0f..a72079a6856 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -212,6 +212,11 @@ public:
String *val_str(String*);
void make_field(Send_field *field);
Item *new_item() { return new Item_uint(name,max_length); }
+ bool fix_fields(THD *thd,struct st_table_list *table_list)
+ {
+ unsigned_flag= 1;
+ return 0;
+ }
void print(String *str);
unsigned int size_of() { return sizeof(*this);}
};
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 854f3924155..d5a225d95dd 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -407,7 +407,7 @@ inline static uint int_token(const char *str,uint length)
{
cmp=longlong_str;
smaller=LONG_NUM;
- bigger=REAL_NUM;
+ bigger= ULONGLONG_NUM;
}
}
while (*cmp && *cmp++ == *str++) ;