![]() |
MySQL 9.5.0
Source Code Documentation
|
sp_instr_jump_case_when instruction is used in the "simple CASE" implementation. More...
#include <sp_instr.h>
Public Member Functions | |
| sp_instr_jump_case_when (uint ip, LEX *lex, int case_expr_id, Item *when_expr_item, LEX_CSTRING when_expr_query) | |
| void | print (const THD *thd, String *str) override |
| enum Instr_type | type () override |
| Get the instruction type of this instruction. More... | |
| bool | exec_core (THD *thd, uint *nextp) override |
| Execute core function of instruction after all preparations (e.g. More... | |
| void | invalidate () override |
| Invalidate the object. More... | |
| bool | on_after_expr_parsing (THD *thd) override |
| Build CASE-expression item tree: Item_func_eq(case-expression, when-i-expression) More... | |
| PSI_statement_info * | get_psi_info () override |
Public Member Functions inherited from sp_lex_branch_instr | |
| void | set_cont_dest (uint cont_dest) |
| uint | opt_mark (sp_head *sp, List< sp_instr > *leads) override |
| Mark this instruction as reachable during optimization and return the index to the next instruction. More... | |
| void | opt_move (uint dst, List< sp_branch_instr > *ibp) override |
| Inform the instruction that it has been moved during optimization. More... | |
| uint | get_cont_dest () const override |
| Get the continuation destination (instruction pointer for the CONTINUE HANDLER) of this instruction. More... | |
| bool | is_invalid () const override |
| LEX_CSTRING | get_expr_query () const override |
| void | set_destination (uint old_dest, uint new_dest) override |
| Update the destination; used by the SP-instruction-optimizer. More... | |
| void | backpatch (uint dest) override |
| Update all instruction with the given label in the backpatch list to the specified instruction pointer. More... | |
| void | adjust_sql_command (LEX *lex) override |
| Some expressions may be re-parsed as SELECT statements, but need to be adjusted to another SQL command. More... | |
Public Member Functions inherited from sp_lex_instr | |
| sp_lex_instr (uint ip, sp_pcontext *ctx, LEX *lex, bool is_lex_owner) | |
| ~sp_lex_instr () override | |
| bool | validate_lex_and_execute_core (THD *thd, uint *nextp, bool open_tables) |
| Make a few attempts to execute the instruction. More... | |
| SQL_I_List< Item_trigger_field > * | get_instr_trig_field_list () override |
| bool | execute (THD *thd, uint *nextp) override |
| Execute this instruction. More... | |
| virtual void | get_query (String *sql_query) const |
| Return the query string, which can be passed to the parser. More... | |
| const LEX * | get_lex () |
Public Member Functions inherited from sp_instr | |
| sp_instr (uint ip, sp_pcontext *ctx) | |
| ~sp_instr () override | |
| uint | get_ip () const |
| sp_pcontext * | get_parsing_ctx () const |
| virtual uint | opt_shortcut_jump (sp_head *, sp_instr *start) |
| Short-cut jumps to jumps during optimization. More... | |
| bool | opt_is_marked () const |
Public Member Functions inherited from sp_printable | |
| virtual | ~sp_printable ()=default |
Public Member Functions inherited from sp_branch_instr | |
| virtual | ~sp_branch_instr ()=default |
Static Public Attributes | |
| static PSI_statement_info | psi_info |
Private Attributes | |
| int | m_case_expr_id |
| Identifier (index) of the CASE-expression in the runtime context. More... | |
| Item_case_expr * | m_case_expr_item |
| Item representing the CASE-expression. More... | |
| Item * | m_eq_item |
| Item corresponding to the main item of the jump-condition-expression: it's the equal function (=) in the (case-expression = when-i-expression) expression. More... | |
Additional Inherited Members | |
Public Types inherited from sp_instr | |
| enum | Instr_type { INSTR_UNKNOWN = 0 , INSTR_COPEN , INSTR_CCLOSE , INSTR_CFETCH , INSTR_CPOP , INSTR_HPOP , INSTR_ERROR , INSTR_JUMP , INSTR_COND_HANDLER_PUSH_JUMP , INSTR_COND_HANDLER_RETURN , INSTR_LEX_CPUSH , INSTR_LEX_FRETURN , INSTR_LEX_SET , INSTR_LEX_SET_TRIGGER_FIELD , INSTR_LEX_STMT , INSTR_LEX_BRANCH_CASE_WHEN , INSTR_LEX_BRANCH_IF_NOT , INSTR_LEX_BRANCH_SET_CASE_EXPR } |
Public Attributes inherited from sp_instr | |
| Query_arena | m_arena |
Protected Member Functions inherited from sp_lex_branch_instr | |
| sp_lex_branch_instr (uint ip, sp_pcontext *ctx, LEX *lex, Item *expr_item, LEX_CSTRING expr_query) | |
| sp_lex_branch_instr (uint ip, sp_pcontext *ctx, LEX *lex, Item *expr_item, LEX_CSTRING expr_query, uint dest) | |
Protected Member Functions inherited from sp_lex_instr | |
| virtual void | cleanup_before_parsing (THD *thd) |
| Destroy items in the free list before re-parsing the statement query string (and thus, creating new items). More... | |
Protected Member Functions inherited from sp_instr | |
| void | clear_da (THD *thd) const |
| Clear diagnostics area. More... | |
Protected Attributes inherited from sp_lex_branch_instr | |
| uint | m_dest |
| Where we will go. More... | |
| uint | m_cont_dest |
| Where continue handlers will go. More... | |
| sp_instr * | m_optdest |
| sp_instr * | m_cont_optdest |
| Item * | m_expr_item |
| Expression item. More... | |
| LEX_CSTRING | m_expr_query |
| SQL-query corresponding to the expression. More... | |
Protected Attributes inherited from sp_lex_instr | |
| LEX * | m_lex |
| LEX-object. More... | |
Protected Attributes inherited from sp_instr | |
| bool | m_marked |
| Show if this instruction is reachable within the SP (used by SP-optimizer). More... | |
| uint | m_ip |
| Instruction pointer. More... | |
| sp_pcontext * | m_parsing_ctx |
| Instruction parsing context. More... | |
sp_instr_jump_case_when instruction is used in the "simple CASE" implementation.
It's a jump instruction with the following condition: (CASE-expression = WHEN-expression) CASE-expression is retrieved from sp_rcontext; WHEN-expression is kept by this instruction.
|
inline |
|
overridevirtual |
Execute core function of instruction after all preparations (e.g.
setting of proper LEX, saving part of the thread context).
| thd | Thread context. | |
| [out] | nextp | next instruction pointer |
Implements sp_lex_instr.
|
inlineoverridevirtual |
Implements sp_instr.
|
inlineoverridevirtual |
Invalidate the object.
Reimplemented from sp_lex_branch_instr.
|
overridevirtual |
Build CASE-expression item tree: Item_func_eq(case-expression, when-i-expression)
This function is used for the following form of CASE statement: CASE case-expression WHEN when-1-expression THEN ... WHEN when-2-expression THEN ... ... WHEN when-n-expression THEN ... END CASE
The thing is that after the parsing we have an item (item tree) for the case-expression and for each when-expression. Here we build jump conditions: expressions like (case-expression = when-i-expression).
| thd | Thread context. |
Reimplemented from sp_lex_instr.
Implements sp_printable.
|
inlineoverridevirtual |
Get the instruction type of this instruction.
Implements sp_lex_branch_instr.
|
private |
Identifier (index) of the CASE-expression in the runtime context.
|
private |
Item representing the CASE-expression.
|
private |
Item corresponding to the main item of the jump-condition-expression: it's the equal function (=) in the (case-expression = when-i-expression) expression.
|
static |