diff options
author | davi@endora.local <> | 2008-02-08 10:21:58 -0200 |
---|---|---|
committer | davi@endora.local <> | 2008-02-08 10:21:58 -0200 |
commit | 31b22496f4ccd0326b7962e16ff5e316fef8ded7 (patch) | |
tree | 2393a53b7a4cb5bd426390b53b2e7eab540a6d03 | |
parent | 24830674e816c47dfe1bf39842a57ca65a1922da (diff) | |
parent | 24b9abf36d85c117662693043833e5f46f534f51 (diff) | |
download | mariadb-git-31b22496f4ccd0326b7962e16ff5e316fef8ded7.tar.gz |
Merge mysql.com:/Users/davi/mysql/mysql-5.0-runtime
into mysql.com:/Users/davi/mysql/mysql-5.1-runtime
-rw-r--r-- | mysql-test/r/ps.result | 16 | ||||
-rw-r--r-- | mysql-test/t/ps.test | 17 | ||||
-rw-r--r-- | sql/item.cc | 6 |
3 files changed, 38 insertions, 1 deletions
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index a6b07bfc127..75d3f79f4b0 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -1717,6 +1717,22 @@ t1 CREATE TABLE `t1` ( `?` decimal(2,1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; +drop table if exists t1; +create table t1 (a bigint unsigned, b bigint(20) unsigned); +prepare stmt from "insert into t1 values (?,?)"; +set @a= 9999999999999999; +set @b= 14632475938453979136; +insert into t1 values (@a, @b); +select * from t1 where a = @a and b = @b; +a b +9999999999999999 14632475938453979136 +execute stmt using @a, @b; +select * from t1 where a = @a and b = @b; +a b +9999999999999999 14632475938453979136 +9999999999999999 14632475938453979136 +deallocate prepare stmt; +drop table t1; End of 5.0 tests. create procedure proc_1() reset query cache; call proc_1(); diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index b45d67d8485..a34d41a6dfb 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -1821,6 +1821,23 @@ execute stmt using @a; show create table t1; drop table t1; +# +# Bug#33798: prepared statements improperly handle large unsigned ints +# +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1 (a bigint unsigned, b bigint(20) unsigned); +prepare stmt from "insert into t1 values (?,?)"; +set @a= 9999999999999999; +set @b= 14632475938453979136; +insert into t1 values (@a, @b); +select * from t1 where a = @a and b = @b; +execute stmt using @a, @b; +select * from t1 where a = @a and b = @b; +deallocate prepare stmt; +drop table t1; + --echo End of 5.0 tests. # diff --git a/sql/item.cc b/sql/item.cc index c546badd8e7..390e99fbde5 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -2628,6 +2628,7 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) if (entry && entry->value) { item_result_type= entry->type; + unsigned_flag= entry->unsigned_flag; if (strict_type && required_result_type != item_result_type) DBUG_RETURN(1); switch (item_result_type) { @@ -2925,7 +2926,10 @@ const String *Item_param::query_val_str(String* str) const { switch (state) { case INT_VALUE: - str->set(value.integer, &my_charset_bin); + if (unsigned_flag) + str->set((ulonglong) value.integer, &my_charset_bin); + else + str->set(value.integer, &my_charset_bin); break; case REAL_VALUE: str->set_real(value.real, NOT_FIXED_DEC, &my_charset_bin); |