Commit 99c0743b authored by monty@mishka.mysql.fi's avatar monty@mishka.mysql.fi

Made SELECT INTO variable-list re-entrant, which fixes bug in stored procedures (#822)

parent 70da491d
...@@ -1076,28 +1076,26 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u) ...@@ -1076,28 +1076,26 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
List_iterator_fast<Item> li(list); List_iterator_fast<Item> li(list);
List_iterator_fast<my_var> gl(var_list); List_iterator_fast<my_var> gl(var_list);
Item *item; Item *item;
my_var *mv;
LEX_STRING *ls;
local_vars.empty(); // Clear list if SP
unit= u;
row_count= 0; row_count= 0;
if (var_list.elements != list.elements) if (var_list.elements != list.elements)
{ {
my_error(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, MYF(0)); my_error(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, MYF(0));
return 1; return 1;
} }
unit=u;
while ((item=li++)) while ((item=li++))
{ {
mv=gl++; my_var *mv= gl++;
ls= &mv->s;
if (mv->local) if (mv->local)
{
(void)local_vars.push_back(new Item_splocal(mv->offset)); (void)local_vars.push_back(new Item_splocal(mv->offset));
}
else else
{ {
Item_func_set_user_var *xx = new Item_func_set_user_var(*ls,item); Item_func_set_user_var *xx = new Item_func_set_user_var(mv->s, item);
xx->fix_fields(thd,(TABLE_LIST*) thd->lex->select_lex.table_list.first,&item); xx->fix_fields(thd, (TABLE_LIST*) thd->lex->select_lex.table_list.first,
&item);
xx->fix_length_and_dec(); xx->fix_length_and_dec();
vars.push_back(xx); vars.push_back(xx);
} }
...@@ -1105,6 +1103,7 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u) ...@@ -1105,6 +1103,7 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
return 0; return 0;
} }
bool select_dumpvar::send_data(List<Item> &items) bool select_dumpvar::send_data(List<Item> &items)
{ {
List_iterator_fast<Item_func_set_user_var> li(vars); List_iterator_fast<Item_func_set_user_var> li(vars);
......
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