Commit 808454a7 authored by unknown's avatar unknown

type of parameter assignment for parameters from variables added (BUG#4280)


mysql-test/r/ps.result:
  parameters from variables (for field creation)
mysql-test/t/ps.test:
  parameters from variables (for field creation)
sql/item.cc:
  type of parameter assignment for parameters from variables
sql/item.h:
  removed spaces at line ends in Item_param definition
parent b60230fc
...@@ -137,3 +137,17 @@ execute stmt1; ...@@ -137,3 +137,17 @@ execute stmt1;
FOUND_ROWS() FOUND_ROWS()
0 0
deallocate prepare stmt1; deallocate prepare stmt1;
drop table t1;
set @arg00=1;
prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;
execute stmt1 ;
select m from t1;
m
1
drop table t1;
prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;
execute stmt1 using @arg00;
select m from t1;
m
1
drop table t1;
...@@ -140,3 +140,17 @@ execute stmt1; ...@@ -140,3 +140,17 @@ execute stmt1;
# Expect 0 # Expect 0
execute stmt1; execute stmt1;
deallocate prepare stmt1; deallocate prepare stmt1;
drop table t1;
#
# parameters from variables (for field creation)
#
set @arg00=1;
prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;
execute stmt1 ;
select m from t1;
drop table t1;
prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;
execute stmt1 using @arg00;
select m from t1;
drop table t1;
...@@ -759,9 +759,13 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry) ...@@ -759,9 +759,13 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
switch (entry->type) { switch (entry->type) {
case REAL_RESULT: case REAL_RESULT:
set_double(*(double*)entry->value); set_double(*(double*)entry->value);
item_type= Item::REAL_ITEM;
item_result_type= REAL_RESULT;
break; break;
case INT_RESULT: case INT_RESULT:
set_int(*(longlong*)entry->value, 21); set_int(*(longlong*)entry->value, 21);
item_type= Item::INT_ITEM;
item_result_type= INT_RESULT;
break; break;
case STRING_RESULT: case STRING_RESULT:
{ {
......
...@@ -422,7 +422,7 @@ class Item_null :public Item ...@@ -422,7 +422,7 @@ class Item_null :public Item
class Item_param :public Item class Item_param :public Item
{ {
public: public:
enum enum_item_param_state enum enum_item_param_state
{ {
NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE, NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE,
...@@ -442,8 +442,8 @@ class Item_param :public Item ...@@ -442,8 +442,8 @@ class Item_param :public Item
String str_value_ptr; String str_value_ptr;
union union
{ {
longlong integer; longlong integer;
double real; double real;
/* /*
Character sets conversion info for string values. Character sets conversion info for string values.
Character sets of client and connection defined at bind time are used Character sets of client and connection defined at bind time are used
...@@ -456,7 +456,7 @@ class Item_param :public Item ...@@ -456,7 +456,7 @@ class Item_param :public Item
/* /*
This points at character set of connection if conversion This points at character set of connection if conversion
to it is required (i. e. if placeholder typecode is not BLOB). to it is required (i. e. if placeholder typecode is not BLOB).
Otherwise it's equal to character_set_client (to simplify Otherwise it's equal to character_set_client (to simplify
check in convert_str_value()). check in convert_str_value()).
*/ */
CHARSET_INFO *final_character_set_of_str_value; CHARSET_INFO *final_character_set_of_str_value;
...@@ -477,10 +477,10 @@ class Item_param :public Item ...@@ -477,10 +477,10 @@ class Item_param :public Item
supply for this placeholder in mysql_stmt_execute. supply for this placeholder in mysql_stmt_execute.
*/ */
enum enum_field_types param_type; enum enum_field_types param_type;
/* /*
Offset of placeholder inside statement text. Used to create Offset of placeholder inside statement text. Used to create
no-placeholders version of this statement for the binary log. no-placeholders version of this statement for the binary log.
*/ */
uint pos_in_query; uint pos_in_query;
Item_param(uint pos_in_query_arg); Item_param(uint pos_in_query_arg);
...@@ -515,11 +515,11 @@ class Item_param :public Item ...@@ -515,11 +515,11 @@ class Item_param :public Item
const String *query_val_str(String *str) const; const String *query_val_str(String *str) const;
bool convert_str_value(THD *thd); bool convert_str_value(THD *thd);
Item *new_item() { return new Item_param(pos_in_query); } Item *new_item() { return new Item_param(pos_in_query); }
/* /*
If value for parameter was not set we treat it as non-const If value for parameter was not set we treat it as non-const
so noone will use parameters value in fix_fields still so noone will use parameters value in fix_fields still
parameter is constant during execution. parameter is constant during execution.
*/ */
virtual table_map used_tables() const virtual table_map used_tables() const
......
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