diff options
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r-- | sql/sp_head.cc | 32 |
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; |