MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
sp_pcontext Class Reference

#include <sp_pcontext.h>

Inheritance diagram for sp_pcontext:
Collaboration diagram for sp_pcontext:

Public Types

enum  enum_scope { REGULAR_SCOPE, HANDLER_SCOPE }

Public Member Functions

sp_pcontextpush_context (THD *thd, enum_scope scope)
 Create and push a new context in the tree.
sp_pcontextpop_context ()
sp_pcontextparent_context () const
int get_level () const
uint diff_handlers (const sp_pcontext *ctx, bool exclusive) const
uint diff_cursors (const sp_pcontext *ctx, bool exclusive) const
uint max_var_index () const
uint current_var_count () const
uint context_var_count () const
uint var_context2runtime (uint i) const
sp_variableadd_variable (THD *thd, LEX_STRING name, enum enum_field_types type, sp_variable::enum_mode mode)
void retrieve_field_definitions (List< Create_field > *field_def_lst) const
sp_variablefind_variable (LEX_STRING name, bool current_scope_only) const
sp_variablefind_variable (uint offset) const
void declare_var_boundary (uint n)
int get_num_case_exprs () const
int push_case_expr_id ()
void pop_case_expr_id ()
int get_current_case_expr_id () const
sp_labelpush_label (THD *thd, LEX_STRING name, uint ip)
sp_labelfind_label (LEX_STRING name)
sp_labellast_label ()
sp_labelpop_label ()
bool add_condition (THD *thd, LEX_STRING name, sp_condition_value *value)
sp_condition_valuefind_condition (LEX_STRING name, bool current_scope_only) const
 See comment for find_variable() above.
sp_handleradd_handler (THD *thd, sp_handler::enum_type type)
bool check_duplicate_handler (const sp_condition_value *cond_value) const
sp_handlerfind_handler (const char *sql_state, uint sql_errno, Sql_condition::enum_warning_level level) const
bool add_cursor (LEX_STRING name)
bool find_cursor (LEX_STRING name, uint *poff, bool current_scope_only) const
 See comment for find_variable() above.
const LEX_STRINGfind_cursor (uint offset) const
 Find cursor by offset (for debugging only).
uint max_cursor_index () const
uint current_cursor_count () const

Additional Inherited Members

- Static Public Member Functions inherited from Sql_alloc
static void * operator new (size_t size) throw ()
static void * operator new[] (size_t size) throw ()
static void * operator new[] (size_t size, MEM_ROOT *mem_root) throw ()
static void * operator new (size_t size, MEM_ROOT *mem_root) throw ()
static void operator delete (void *ptr, size_t size)
static void operator delete (void *ptr, MEM_ROOT *mem_root)
static void operator delete[] (void *ptr, MEM_ROOT *mem_root)
static void operator delete[] (void *ptr, size_t size)

Detailed Description

The class represents parse-time context, which keeps track of declared variables/parameters, conditions, handlers, cursors and labels.

sp_context objects are organized in a tree according to the following rules:

  • one sp_pcontext object corresponds for for each BEGIN..END block;
  • one sp_pcontext object corresponds for each exception handler;
  • one additional sp_pcontext object is created to contain Stored Program parameters.

sp_pcontext objects are used both at parse-time and at runtime.

During the parsing stage sp_pcontext objects are used:

  • to look up defined names (e.g. declared variables and visible labels);
  • to check for duplicates;
  • for error checking;
  • to calculate offsets to be used at runtime.

During the runtime phase, a tree of sp_pcontext objects is used:

  • for error checking (e.g. to check correct number of parameters);
  • to resolve SQL-handlers.

Definition at line 262 of file sp_pcontext.h.

Member Enumeration Documentation

Enumerator:
REGULAR_SCOPE 

REGULAR_SCOPE designates regular BEGIN ... END blocks.

HANDLER_SCOPE 

HANDLER_SCOPE designates SQL-handler blocks.

Definition at line 265 of file sp_pcontext.h.

Member Function Documentation

sp_variable * sp_pcontext::add_variable ( THD *  thd,
LEX_STRING  name,
enum enum_field_types  type,
sp_variable::enum_mode  mode 
)

Add SP-variable to the parsing context.

Parameters
thdThread context.
nameName of the SP-variable.
typeType of the SP-variable.
modeMode of the SP-variable.
Returns
instance of newly added SP-variable.

Definition at line 184 of file sp_pcontext.cc.

Here is the call graph for this function:

bool sp_pcontext::check_duplicate_handler ( const sp_condition_value cond_value) const

This is an auxilary parsing-time function to check if an SQL-handler exists in the current parsing context (current scope) for the given SQL-condition. This function is used to check for duplicates during the parsing phase.

This function can not be used during the runtime phase to check SQL-handler existence because it searches for the SQL-handler in the current scope only (during runtime, current and parent scopes should be checked according to the SQL-handler resolution rules).

Parameters
condition_valuethe handler condition value (not SQL-condition!).
Return values
trueif such SQL-handler exists.
falseotherwise.

Definition at line 288 of file sp_pcontext.cc.

Here is the call graph for this function:

uint sp_pcontext::context_var_count ( ) const
inline
Returns
the number of variables in this context alone.

Definition at line 336 of file sp_pcontext.h.

Here is the caller graph for this function:

uint sp_pcontext::current_var_count ( ) const
inline
Returns
the current number of variables used in the parent contexts (from the root), including this context.

Definition at line 332 of file sp_pcontext.h.

Here is the caller graph for this function:

void sp_pcontext::declare_var_boundary ( uint  n)
inline

Set the current scope boundary (for default values).

Parameters
nThe number of variables to skip.

Definition at line 390 of file sp_pcontext.h.

uint sp_pcontext::diff_cursors ( const sp_pcontext ctx,
bool  exclusive 
) const

Calculate and return the number of cursors to pop between the given context and this one.

Parameters
ctxthe other parsing context.
exclusivespecifies if the last scope should be excluded.
Returns
the number of cursors to pop between the given context and this one. If 'exclusive' is true, don't count the last scope we are leaving; this is used for LEAVE where we will jump to the cpop instructions.

Definition at line 132 of file sp_pcontext.cc.

uint sp_pcontext::diff_handlers ( const sp_pcontext ctx,
bool  exclusive 
) const

Calculate and return the number of handlers to pop between the given context and this one.

Parameters
ctxthe other parsing context.
exclusivespecifies if the last scope should be excluded.
Returns
the number of handlers to pop between the given context and this one. If 'exclusive' is true, don't count the last scope we are leaving; this is used for LEAVE where we will jump to the hpop instructions.

Definition at line 114 of file sp_pcontext.cc.

sp_handler * sp_pcontext::find_handler ( const char *  sql_state,
uint  sql_errno,
Sql_condition::enum_warning_level  level 
) const

Find an SQL handler for the given SQL condition according to the SQL-handler resolution rules. This function is used at runtime.

Parameters
sql_stateThe SQL condition state
sql_errnoThe error code
levelThe SQL condition level
Returns
a pointer to the found SQL-handler or NULL.

Definition at line 310 of file sp_pcontext.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

sp_variable * sp_pcontext::find_variable ( LEX_STRING  name,
bool  current_scope_only 
) const

Find SP-variable by name.

The function does a linear search (from newer to older variables, in case we have shadowed names).

The function is called only at parsing time.

Parameters
nameVariable name.
current_scope_onlyA flag if we search only in current scope.
Returns
instance of found SP-variable, or NULL if not found.

Definition at line 150 of file sp_pcontext.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

sp_variable * sp_pcontext::find_variable ( uint  offset) const

Find SP-variable by the offset in the root parsing context.

The function is used for two things:

  • When evaluating parameters at the beginning, and setting out parameters at the end, of invocation. (Top frame only, so no recursion then.)
  • For printing of sp_instr_set. (Debug mode only.)
Parameters
offsetVariable offset in the root parsing context.
Returns
instance of found SP-variable, or NULL if not found.

Definition at line 173 of file sp_pcontext.cc.

Here is the call graph for this function:

uint sp_pcontext::max_var_index ( ) const
inline
Returns
the maximum number of variables used in this and all child contexts. For the root parsing context, this gives us the number of slots needed for variables during the runtime phase.

Definition at line 327 of file sp_pcontext.h.

sp_pcontext * sp_pcontext::pop_context ( )

Pop a node from the parsing context tree.

Returns
the parent node.

Definition at line 99 of file sp_pcontext.cc.

sp_pcontext * sp_pcontext::push_context ( THD *  thd,
sp_pcontext::enum_scope  scope 
)

Create and push a new context in the tree.

Parameters
thdthread context.
scopescope of the new parsing context.
Returns
the node created.

Definition at line 89 of file sp_pcontext.cc.

Here is the call graph for this function:

void sp_pcontext::retrieve_field_definitions ( List< Create_field > *  field_def_lst) const

Retrieve full type information about SP-variables in this parsing context and its children.

Parameters
field_def_lst[out]Container to store type information.

Definition at line 453 of file sp_pcontext.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

uint sp_pcontext::var_context2runtime ( uint  i) const
inline
Returns
map index in this parsing context to runtime offset.

Definition at line 340 of file sp_pcontext.h.


The documentation for this class was generated from the following files: