Commit edbd365e authored by unknown's avatar unknown

Merge mysql.com:/home/ram/work/b28509/b28509.5.0

into  mysql.com:/home/ram/work/b28509/b28509.5.1


mysql-test/r/ps.result:
  Auto merged
mysql-test/t/ps.test:
  Auto merged
sql/item.cc:
  Auto merged
parents da85dd70 6249d57d
...@@ -1560,6 +1560,15 @@ execute stmt; ...@@ -1560,6 +1560,15 @@ 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.
create procedure proc_1() reset query cache; create procedure proc_1() reset query cache;
call proc_1(); call proc_1();
......
...@@ -1626,6 +1626,14 @@ execute stmt; ...@@ -1626,6 +1626,14 @@ 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.
......
...@@ -2542,16 +2542,14 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2542,16 +2542,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:
{ {
...@@ -2574,7 +2572,6 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2574,7 +2572,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);
...@@ -2588,6 +2585,7 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -2588,6 +2585,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