diff options
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r-- | sql/sp_head.cc | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 6a7676c7bf2..d1da6f7d3b3 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -310,11 +310,13 @@ sp_prepare_func_item(THD* thd, Item **it_addr) */ bool -sp_eval_expr(THD *thd, Field *result_field, Item *expr_item) +sp_eval_expr(THD *thd, Field *result_field, Item **expr_item_ptr) { + Item *expr_item; + DBUG_ENTER("sp_eval_expr"); - if (!(expr_item= sp_prepare_func_item(thd, &expr_item))) + if (!(expr_item= sp_prepare_func_item(thd, expr_item_ptr))) DBUG_RETURN(TRUE); bool err_status= FALSE; @@ -1269,7 +1271,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, param_values[i]= Item_cache::get_cache(argp[i]->result_type()); param_values[i]->store(argp[i]); - if (nctx->set_variable(thd, i, param_values[i])) + if (nctx->set_variable(thd, i, (struct Item **)&(param_values[i]))) { err_status= TRUE; break; @@ -1467,7 +1469,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) Item_null *null_item= new Item_null(); if (!null_item || - nctx->set_variable(thd, i, null_item)) + nctx->set_variable(thd, i, (struct Item **)&null_item)) { err_status= TRUE; break; @@ -1475,7 +1477,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) } else { - if (nctx->set_variable(thd, i, *it_args.ref())) + if (nctx->set_variable(thd, i, it_args.ref())) { err_status= TRUE; break; @@ -1531,7 +1533,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) { if (octx->set_variable(thd, ((Item_splocal*) arg_item)->get_var_idx(), - nctx->get_item(i))) + nctx->get_item_addr(i))) { err_status= TRUE; break; @@ -1543,15 +1545,15 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) if (guv) { - Item *item= nctx->get_item(i); + Item **item= nctx->get_item_addr(i); Item_func_set_user_var *suv; - suv= new Item_func_set_user_var(guv->get_name(), item); + suv= new Item_func_set_user_var(guv->get_name(), *item); /* Item_func_set_user_var is not fixed after construction, call fix_fields(). */ - if ((err_status= test(!suv || suv->fix_fields(thd, &item) || + if ((err_status= test(!suv || suv->fix_fields(thd, item) || suv->check() || suv->update()))) break; } @@ -2328,7 +2330,7 @@ sp_instr_set::execute(THD *thd, uint *nextp) int sp_instr_set::exec_core(THD *thd, uint *nextp) { - int res= thd->spcont->set_variable(thd, m_offset, m_value); + int res= thd->spcont->set_variable(thd, m_offset, &m_value); if (res && thd->spcont->found_handler_here()) { @@ -2603,7 +2605,7 @@ sp_instr_freturn::exec_core(THD *thd, uint *nextp) do it in scope of execution the current context/block. */ - return thd->spcont->set_return_value(thd, m_value); + return thd->spcont->set_return_value(thd, &m_value); } void @@ -3047,7 +3049,7 @@ sp_instr_set_case_expr::execute(THD *thd, uint *nextp) int sp_instr_set_case_expr::exec_core(THD *thd, uint *nextp) { - int res= thd->spcont->set_case_expr(thd, m_case_expr_id, m_case_expr); + int res= thd->spcont->set_case_expr(thd, m_case_expr_id, &m_case_expr); if (res && !thd->spcont->get_case_expr(m_case_expr_id) && @@ -3061,7 +3063,7 @@ sp_instr_set_case_expr::exec_core(THD *thd, uint *nextp) Item *null_item= new Item_null(); if (!null_item || - thd->spcont->set_case_expr(thd, m_case_expr_id, null_item)) + thd->spcont->set_case_expr(thd, m_case_expr_id, &null_item)) { /* If this also failed, we have to abort. */ |