Commit a6131b85 authored by unknown's avatar unknown
Browse files

Bug 8407, post review cleanup: use instr::get_cont_dest() to get the instruction
continuation instruction, for CONTINUE exception handlers.


sql/sp_head.cc:
  Post review cleanup: use instr::get_cont_dest() to get the instruction
  continuation instruction, for CONTINUE exception handlers.
sql/sp_head.h:
  Post review cleanup: use instr::get_cont_dest() to get the instruction
  continuation instruction, for CONTINUE exception handlers.
parent 4d6e16f2
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -1078,7 +1078,7 @@ sp_head::execute(THD *thd)
      case SP_HANDLER_CONTINUE:
        thd->restore_active_arena(&execute_arena, &backup_arena);
        thd->set_n_backup_active_arena(&execute_arena, &backup_arena);
        ctx->push_hstack(ip);
        ctx->push_hstack(i->get_cont_dest());
        // Fall through
      default:
	ip= hip;
@@ -2394,7 +2394,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
  reinit_stmt_before_use(thd, m_lex);

  if (open_tables)
    res= instr->exec_open_and_lock_tables(thd, m_lex->query_tables, nextp);
    res= instr->exec_open_and_lock_tables(thd, m_lex->query_tables);

  if (!res)
    res= instr->exec_core(thd, nextp);
@@ -2443,8 +2443,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
  sp_instr class functions
*/

int sp_instr::exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables,
                                        uint *nextp)
int sp_instr::exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables)
{
  int result;

@@ -2454,19 +2453,16 @@ int sp_instr::exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables,
  */
  if (check_table_access(thd, SELECT_ACL, tables, 0)
      || open_and_lock_tables(thd, tables))
  {
    get_cont_dest(nextp);
    result= -1;
  }
  else
    result= 0;

  return result;
}

void sp_instr::get_cont_dest(uint *nextp)
uint sp_instr::get_cont_dest()
{
  *nextp= m_ip+1;
  return (m_ip+1);
}


@@ -2654,9 +2650,9 @@ sp_instr_set_trigger_field::print(String *str)
  sp_instr_opt_meta
*/

void sp_instr_opt_meta::get_cont_dest(uint *nextp)
uint sp_instr_opt_meta::get_cont_dest()
{
  *nextp= m_cont_dest;
  return m_cont_dest;
}


@@ -2748,7 +2744,6 @@ sp_instr_jump_if_not::exec_core(THD *thd, uint *nextp)
  if (! it)
  {
    res= -1;
    *nextp = m_cont_dest;
  }
  else
  {
@@ -3317,7 +3312,6 @@ sp_instr_set_case_expr::exec_core(THD *thd, uint *nextp)
      spcont->clear_handler();
      thd->spcont= spcont;
    }
    *nextp= m_cont_dest;        /* For continue handler */
  }
  else
    *nextp= m_ip+1;
+12 −15
Original line number Diff line number Diff line
@@ -449,11 +449,13 @@ class sp_instr :public Query_arena, public Sql_alloc
         thd        Thread handle
         nextp  OUT index of the next instruction to execute. (For most
                    instructions this will be the instruction following this
                    one).
                    one). Note that this parameter is undefined in case of
                    errors, use get_cont_dest() to find the continuation
                    instruction for CONTINUE error handlers.

     RETURN
       0      on success,
       other  if some error occured
       other  if some error occurred
  */

  virtual int execute(THD *thd, uint *nextp) = 0;
@@ -463,22 +465,17 @@ class sp_instr :public Query_arena, public Sql_alloc
    Open and lock the tables used by this statement, as a pre-requisite
    to execute the core logic of this instruction with
    <code>exec_core()</code>.
    If this statement fails, the next instruction to execute is also returned.
    This is useful when a user defined SQL continue handler needs to be
    executed.
    @param thd the current thread
    @param tables the list of tables to open and lock
    @param nextp the continuation instruction, returned to the caller if this
    method fails.
    @return zero on success, non zero on failure.
  */
  int exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables, uint *nextp);
  int exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables);

  /**
    Get the continuation destination of this instruction.
    @param nextp the continuation destination (output)
    @return the continuation destination
  */
  virtual void get_cont_dest(uint *nextp);
  virtual uint get_cont_dest();

  /*
    Execute core function of instruction after all preparations (e.g.
@@ -744,7 +741,7 @@ class sp_instr_opt_meta : public sp_instr
  virtual void set_destination(uint old_dest, uint new_dest)
    = 0;

  virtual void get_cont_dest(uint *nextp);
  virtual uint get_cont_dest();

protected: