From 2f468db76ea345783930bacceec45f4d637b3178 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Oct 2003 17:15:24 +0300 Subject: [PATCH] Made SELECT INTO variable-list re-entrant, which fixes bug in stored procedures (#822) --- sql/sql_class.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 2128f97e3d9..fcfbe661599 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1076,28 +1076,26 @@ int select_dumpvar::prepare(List &list, SELECT_LEX_UNIT *u) List_iterator_fast li(list); List_iterator_fast gl(var_list); Item *item; - my_var *mv; - LEX_STRING *ls; + local_vars.empty(); // Clear list if SP + unit= u; row_count= 0; + if (var_list.elements != list.elements) { my_error(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, MYF(0)); return 1; } - unit=u; while ((item=li++)) { - mv=gl++; - ls= &mv->s; + my_var *mv= gl++; if (mv->local) - { (void)local_vars.push_back(new Item_splocal(mv->offset)); - } else { - Item_func_set_user_var *xx = new Item_func_set_user_var(*ls,item); - xx->fix_fields(thd,(TABLE_LIST*) thd->lex->select_lex.table_list.first,&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_length_and_dec(); vars.push_back(xx); } @@ -1105,6 +1103,7 @@ int select_dumpvar::prepare(List &list, SELECT_LEX_UNIT *u) return 0; } + bool select_dumpvar::send_data(List &items) { List_iterator_fast li(vars);