Commit a6131b85 authored by unknown's avatar unknown

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
......@@ -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;
......
......@@ -449,13 +449,15 @@ 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).
RETURN
0 on success,
other if some error occured
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 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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment