Execution of a stored procedure statement is similar to execution of a prepared statement. The few existing exceptions are described below.
During execution of a stored procedure,
THD::stmt_arena points to the permanent query
arena of the stored procedure. This arena happens to be also the
permanent query arena of every instruction of the procedure, as
the parser creates all instructions in the same arena. More
THD::stmt_arena is always set and
always points to the permanent arena of a statement. If the
statement is a conventional query, then the permanent arena simply
points to the runtime arena of the query.
An own runtime memory root is set up for execution of every stored procedure statement and freed in the end of execution. This is a necessary measure to avoid memory leaks if a stored procedure statement is executed in a loop.
With regard to the transformations and restoration of the parsed
tree, execution of a stored procedure statement follows the path
of execution of a prepared statement, with the exception that
there is no separate prepare step.
THD::is_first_sp_execute() is used to determine
whether it's the first execution, and in this case non-destructive
permanent transformations of the parsed tree are made in the
permanent memory root of the statement that is currently being
During subsequent executions no non-destructive transformations are performed, while all destructive ones are rolled back in the end of execution using the same algorithm as in prepared statements.