summaryrefslogtreecommitdiff
path: root/sql/sp_rcontext.cc
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2018-01-21 20:16:22 +0200
committerMonty <monty@mariadb.org>2018-01-21 20:22:14 +0200
commit6b7dcefdc83c4444ac8a4623b46810ff940528db (patch)
tree938e0c6302b43e22e04ff03991a9b16afe900c35 /sql/sp_rcontext.cc
parentf67b8273c03b4802cb97e68b0c1baf5de330a2bf (diff)
downloadmariadb-git-6b7dcefdc83c4444ac8a4623b46810ff940528db.tar.gz
Reset thd->lex->current_select for SP
current_select may point to data from old parser states when calling a stored procedure with CALL The failure happens in Item::Item when testing if we are in having. Fixed by explicitely reseting current_select in do_execute_sp() and in sp_rcontext::create(). The later is also needed for stored functions().
Diffstat (limited to 'sql/sp_rcontext.cc')
-rw-r--r--sql/sp_rcontext.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index 08f942b7d6d..396f5b448fc 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -61,6 +61,7 @@ sp_rcontext *sp_rcontext::create(THD *thd,
const sp_pcontext *root_parsing_ctx,
Field *return_value_fld)
{
+ SELECT_LEX *save_current_select;
sp_rcontext *ctx= new (thd->mem_root) sp_rcontext(root_parsing_ctx,
return_value_fld,
thd->in_sub_stmt);
@@ -68,14 +69,19 @@ sp_rcontext *sp_rcontext::create(THD *thd,
if (!ctx)
return NULL;
+ /* Reset current_select as it's checked in Item_ident::Item_ident */
+ save_current_select= thd->lex->current_select;
+ thd->lex->current_select= 0;
+
if (ctx->alloc_arrays(thd) ||
ctx->init_var_table(thd) ||
ctx->init_var_items(thd))
{
delete ctx;
- return NULL;
+ ctx= 0;
}
+ thd->lex->current_select= save_current_select;
return ctx;
}