Merge mysql.com:/home/ram/work/mysql-5.0-maint

into  mysql.com:/home/ram/work/b28509/b28509.5.0
parents f1ae9793 11a2fd42
...@@ -1683,4 +1683,13 @@ execute stmt; ...@@ -1683,4 +1683,13 @@ execute stmt;
ERROR 42S22: Unknown column 'y.value' in 'field list' ERROR 42S22: Unknown column 'y.value' in 'field list'
deallocate prepare stmt; deallocate prepare stmt;
drop tables t1; drop tables t1;
prepare stmt from "create table t1 select ?";
set @a=1.0;
execute stmt using @a;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`?` decimal(2,1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
End of 5.0 tests. End of 5.0 tests.
...@@ -1791,5 +1791,13 @@ execute stmt; ...@@ -1791,5 +1791,13 @@ execute stmt;
deallocate prepare stmt; deallocate prepare stmt;
drop tables t1; drop tables t1;
#
# Bug #28509: strange behaviour: passing a decimal value to PS
#
prepare stmt from "create table t1 select ?";
set @a=1.0;
execute stmt using @a;
show create table t1;
drop table t1;
--echo End of 5.0 tests. --echo End of 5.0 tests.
...@@ -2507,16 +2507,14 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2507,16 +2507,14 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
if (entry && entry->value) if (entry && entry->value)
{ {
item_result_type= entry->type; item_result_type= entry->type;
switch (entry->type) { switch (item_result_type) {
case REAL_RESULT: case REAL_RESULT:
set_double(*(double*)entry->value); set_double(*(double*)entry->value);
item_type= Item::REAL_ITEM; item_type= Item::REAL_ITEM;
item_result_type= REAL_RESULT;
break; break;
case INT_RESULT: case INT_RESULT:
set_int(*(longlong*)entry->value, MY_INT64_NUM_DECIMAL_DIGITS); set_int(*(longlong*)entry->value, MY_INT64_NUM_DECIMAL_DIGITS);
item_type= Item::INT_ITEM; item_type= Item::INT_ITEM;
item_result_type= INT_RESULT;
break; break;
case STRING_RESULT: case STRING_RESULT:
{ {
...@@ -2538,7 +2536,6 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2538,7 +2536,6 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
charset of connection, so we have to set it later. charset of connection, so we have to set it later.
*/ */
item_type= Item::STRING_ITEM; item_type= Item::STRING_ITEM;
item_result_type= STRING_RESULT;
if (set_str((const char *)entry->value, entry->length)) if (set_str((const char *)entry->value, entry->length))
DBUG_RETURN(1); DBUG_RETURN(1);
...@@ -2552,6 +2549,7 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2552,6 +2549,7 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
decimals= ent_value->frac; decimals= ent_value->frac;
max_length= my_decimal_precision_to_length(ent_value->precision(), max_length= my_decimal_precision_to_length(ent_value->precision(),
decimals, unsigned_flag); decimals, unsigned_flag);
item_type= Item::DECIMAL_ITEM;
break; break;
} }
default: default:
......
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