Commit 049a5800 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/usr/local/mysql/mysql-5.0-bug19633

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


sql/sp_head.h:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sp_head.cc:
  SCCS merged
parents cccd302c dccd333e
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -315,14 +315,16 @@ 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)
    DBUG_RETURN(TRUE);

  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;
@@ -1284,7 +1286,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;
@@ -1490,7 +1492,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;
@@ -1498,7 +1500,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;
@@ -1570,7 +1572,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;
@@ -1582,15 +1584,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;
	}
@@ -2372,7 +2374,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())
  {
@@ -2647,7 +2649,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
@@ -3091,7 +3093,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) &&
@@ -3105,7 +3107,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
@@ -1170,6 +1170,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
@@ -1925,7 +1925,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);
      }
    }