summaryrefslogtreecommitdiff
path: root/sql/sp_head.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r--sql/sp_head.cc32
1 files changed, 21 insertions, 11 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 4eda7fe0e09..58ffb8a76b9 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -2641,14 +2641,16 @@ sp_head::do_cont_backpatch()
bool
-sp_head::sp_add_instr_cpush_for_cursors(THD *thd, sp_pcontext *pcontext)
+sp_head::sp_add_instr_cpush_for_cursors(THD *thd, sp_pcontext *pcontext,
+ LEX_CSTRING cursor_query)
{
for (uint i= 0; i < pcontext->frame_cursor_count(); i++)
{
const sp_pcursor *c= pcontext->get_cursor_by_local_frame_offset(i);
sp_instr_cpush *instr= new (thd->mem_root)
sp_instr_cpush(instructions(), pcontext, c->lex(),
- pcontext->cursor_offset() + i);
+ pcontext->cursor_offset() + i,
+ cursor_query);
if (instr == NULL || add_instr(instr))
return true;
}
@@ -2999,11 +3001,12 @@ bool sp_head::add_instr_jump_forward_with_backpatch(THD *thd,
bool sp_head::add_instr_freturn(THD *thd, sp_pcontext *spcont,
- Item *item, LEX *lex)
+ Item *item, LEX *lex, LEX_CSTRING expr_query)
{
sp_instr_freturn *i= new (thd->mem_root)
sp_instr_freturn(instructions(), spcont, item,
- m_return_field_def.type_handler(), lex);
+ m_return_field_def.type_handler(), lex,
+ expr_query);
if (i == NULL || add_instr(i))
return true;
m_flags|= sp_head::HAS_RETURN;
@@ -3516,7 +3519,8 @@ bool
sp_head::set_local_variable(THD *thd, sp_pcontext *spcont,
const Sp_rcontext_handler *rh,
sp_variable *spv, Item *val, LEX *lex,
- bool responsible_to_free_lex)
+ bool responsible_to_free_lex,
+ LEX_CSTRING value_query)
{
if (!(val= adjust_assignment_source(thd, val, spv->default_value)))
return true;
@@ -3527,7 +3531,8 @@ sp_head::set_local_variable(THD *thd, sp_pcontext *spcont,
sp_instr_set *sp_set= new (thd->mem_root)
sp_instr_set(instructions(), spcont, rh,
spv->offset, val, lex,
- responsible_to_free_lex);
+ responsible_to_free_lex,
+ value_query);
return sp_set == NULL || add_instr(sp_set);
}
@@ -3541,7 +3546,8 @@ bool
sp_head::set_local_variable_row_field(THD *thd, sp_pcontext *spcont,
const Sp_rcontext_handler *rh,
sp_variable *spv, uint field_idx,
- Item *val, LEX *lex)
+ Item *val, LEX *lex,
+ LEX_CSTRING value_query)
{
if (!(val= adjust_assignment_source(thd, val, NULL)))
return true;
@@ -3551,7 +3557,8 @@ sp_head::set_local_variable_row_field(THD *thd, sp_pcontext *spcont,
spcont, rh,
spv->offset,
field_idx, val,
- lex, true);
+ lex, true,
+ value_query);
return sp_set == NULL || add_instr(sp_set);
}
@@ -3561,7 +3568,8 @@ sp_head::set_local_variable_row_field_by_name(THD *thd, sp_pcontext *spcont,
const Sp_rcontext_handler *rh,
sp_variable *spv,
const LEX_CSTRING *field_name,
- Item *val, LEX *lex)
+ Item *val, LEX *lex,
+ LEX_CSTRING value_query)
{
if (!(val= adjust_assignment_source(thd, val, NULL)))
return true;
@@ -3572,7 +3580,8 @@ sp_head::set_local_variable_row_field_by_name(THD *thd, sp_pcontext *spcont,
spv->offset,
*field_name,
val,
- lex, true);
+ lex, true,
+ value_query);
return sp_set == NULL || add_instr(sp_set);
}
@@ -3651,7 +3660,8 @@ sp_head::add_set_for_loop_cursor_param_variables(THD *thd,
if (set_local_variable(thd, param_spcont,
&sp_rcontext_handler_local,
spvar, parameters->arguments()[idx],
- param_lex, last))
+ param_lex, last,
+ param_lex->get_expr_str()))
return true;
}
return false;