Commit 438131dd authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-5.0

into  mysql.com:/usr/local/mysql/tmp-5.0


sql/sp_head.cc:
  Manual merge.
parents 30c03e20 dccd333e
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -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;
@@ -1281,7 +1283,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
    /* Arguments must be fixed in Item_func_sp::fix_fields */
    DBUG_ASSERT(argp[arg_no]->fixed);

    if ((err_status= nctx->set_variable(thd, arg_no, argp[arg_no])))
    if ((err_status= nctx->set_variable(thd, arg_no, &(argp[arg_no]))))
      goto err_with_cleanup;
  }

@@ -1485,7 +1487,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;
@@ -1493,7 +1495,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;
@@ -2326,7 +2328,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())
  {
@@ -2596,7 +2598,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
@@ -3040,7 +3042,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) &&
@@ -3054,7 +3056,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. */

+1 −1
Original line number Diff line number Diff line
@@ -1169,6 +1169,6 @@ Item *
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);

#endif /* _SP_HEAD_H_ */
+7 −6
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ sp_rcontext::init_var_items()


bool
sp_rcontext::set_return_value(THD *thd, Item *return_value_item)
sp_rcontext::set_return_value(THD *thd, Item **return_value_item)
{
  DBUG_ASSERT(m_return_value_fld);

@@ -279,14 +279,14 @@ sp_rcontext::pop_cursors(uint count)


int
sp_rcontext::set_variable(THD *thd, uint var_idx, Item *value)
sp_rcontext::set_variable(THD *thd, uint var_idx, Item **value)
{
  return set_variable(thd, m_var_table->field[var_idx], value);
}


int
sp_rcontext::set_variable(THD *thd, Field *field, Item *value)
sp_rcontext::set_variable(THD *thd, Field *field, Item **value)
{
  if (!value)
  {
@@ -478,9 +478,10 @@ sp_rcontext::create_case_expr_holder(THD *thd, Item_result result_type)
*/

int
sp_rcontext::set_case_expr(THD *thd, int case_expr_id, Item *case_expr_item)
sp_rcontext::set_case_expr(THD *thd, int case_expr_id, Item **case_expr_item_ptr)
{
  if (!(case_expr_item= sp_prepare_func_item(thd, &case_expr_item)))
  Item *case_expr_item= sp_prepare_func_item(thd, case_expr_item_ptr);
  if (!case_expr_item)
    return TRUE;

  if (!m_case_expr_holders[case_expr_id] ||
@@ -542,7 +543,7 @@ bool Select_fetch_into_spvars::send_data(List<Item> &items)
  */
  for (; spvar= spvar_iter++, item= item_iter++; )
  {
    if (thd->spcont->set_variable(thd, spvar->offset, item))
    if (thd->spcont->set_variable(thd, spvar->offset, &item))
      return TRUE;
  }
  return FALSE;
+4 −4
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ class sp_rcontext : public Sql_alloc
  ~sp_rcontext();

  int
  set_variable(THD *thd, uint var_idx, Item *value);
  set_variable(THD *thd, uint var_idx, Item **value);

  Item *
  get_item(uint var_idx);
@@ -100,7 +100,7 @@ class sp_rcontext : public Sql_alloc
  get_item_addr(uint var_idx);

  bool
  set_return_value(THD *thd, Item *return_value_item);
  set_return_value(THD *thd, Item **return_value_item);

  inline bool
  is_return_value_set() const
@@ -200,7 +200,7 @@ class sp_rcontext : public Sql_alloc
  */

  int
  set_case_expr(THD *thd, int case_expr_id, Item *case_expr_item);
  set_case_expr(THD *thd, int case_expr_id, Item **case_expr_item_ptr);

  Item *
  get_case_expr(int case_expr_id);
@@ -254,7 +254,7 @@ class sp_rcontext : public Sql_alloc

  Item_cache *create_case_expr_holder(THD *thd, Item_result result_type);

  int set_variable(THD *thd, Field *field, Item *value);
  int set_variable(THD *thd, Field *field, Item **value);
}; // class sp_rcontext : public Sql_alloc


+1 −1
Original line number Diff line number Diff line
@@ -1877,7 +1877,7 @@ bool select_dumpvar::send_data(List<Item> &items)
      if ((yy=var_li++)) 
      {
	if (thd->spcont->set_variable(current_thd, yy->get_var_idx(),
                                      *it.ref()))
                                      it.ref()))
	  DBUG_RETURN(1);
      }
    }