MySQL 9.1.0
Source Code Documentation
|
This class represents a trigger object. More...
#include <trigger.h>
Public Member Functions | |
Trigger * | clone_shallow (MEM_ROOT *mem_root) const |
Create a new Trigger object as a shallow clone of existing Trigger object. More... | |
bool | execute (THD *thd) |
Execute trigger's body. More... | |
bool | parse (THD *thd, bool is_upgrade) |
Parse CREATE TRIGGER statement. More... | |
void | add_tables_and_routines (THD *thd, Query_tables_list *prelocking_ctx, Table_ref *table_list) |
Add tables and routines used by trigger to the set of elements used by statement. More... | |
void | print_upgrade_warning (THD *thd) |
Print upgrade warnings (if any). More... | |
const LEX_CSTRING & | get_db_name () const |
const LEX_CSTRING & | get_subject_table_name () const |
const LEX_CSTRING & | get_trigger_name () const |
const LEX_CSTRING & | get_definition () const |
const LEX_CSTRING & | get_definition_utf8 () const |
sql_mode_t | get_sql_mode () const |
const LEX_CSTRING & | get_definer () const |
const LEX_CSTRING & | get_definer_user () const |
const LEX_CSTRING & | get_definer_host () const |
const LEX_CSTRING & | get_client_cs_name () const |
const LEX_CSTRING & | get_connection_cl_name () const |
const LEX_CSTRING & | get_db_cl_name () const |
enum_trigger_event_type | get_event () const |
const LEX_CSTRING & | get_event_as_string () const |
enum_trigger_action_time_type | get_action_time () const |
const LEX_CSTRING & | get_action_time_as_string () const |
bool | is_created_timestamp_null () const |
my_timeval | get_created_timestamp () const |
ulonglong | get_action_order () const |
void | set_action_order (ulonglong action_order) |
sp_head * | get_sp () |
GRANT_INFO * | get_subject_table_grant () |
bool | has_parse_error () const |
const char * | get_parse_error_message () const |
bool | create_full_trigger_definition (const THD *thd, String *full_trigger_definition) const |
Construct a full CREATE TRIGGER statement from Trigger's data members. More... | |
~Trigger () | |
Destroy associated SP (if any). More... | |
Static Public Member Functions | |
static Trigger * | create_from_parser (THD *thd, TABLE *subject_table, String *binlog_create_trigger_stmt) |
Creates a new Trigger-instance with the state from the parser. More... | |
static Trigger * | create_from_dd (MEM_ROOT *mem_root, const LEX_CSTRING &trigger_name, const LEX_CSTRING &db_name, const LEX_CSTRING &subject_table_name, const LEX_CSTRING &definition, const LEX_CSTRING &definition_utf8, sql_mode_t sql_mode, const LEX_CSTRING &definer_user, const LEX_CSTRING &definer_host, const LEX_CSTRING &client_cs_name, const LEX_CSTRING &connection_cl_name, const LEX_CSTRING &db_cl_name, enum_trigger_event_type trg_event_type, enum_trigger_action_time_type trg_time_type, uint action_order, my_timeval created_timestamp) |
Creates a new Trigger-instance with the state loaded from the Data Dictionary. More... | |
static bool | construct_create_trigger_stmt_with_definer (THD *thd, String *binlog_query, const LEX_CSTRING &def_user, const LEX_CSTRING &def_host) |
Constructs CREATE TRIGGER statement taking into account a value of the DEFINER clause. More... | |
Private Member Functions | |
Trigger (const LEX_CSTRING &trigger_name, MEM_ROOT *mem_root, const LEX_CSTRING &db_name, const LEX_CSTRING &table_name, const LEX_CSTRING &definition, const LEX_CSTRING &definition_utf8, sql_mode_t sql_mode, const LEX_CSTRING &definer_user, const LEX_CSTRING &definer_host, const LEX_CSTRING &client_cs_name, const LEX_CSTRING &connection_cl_name, const LEX_CSTRING &db_cl_name, enum_trigger_event_type event_type, enum_trigger_action_time_type action_time, uint action_order, my_timeval created_timestamp) | |
Trigger constructor. More... | |
void | set_trigger_name (const LEX_CSTRING &trigger_name) |
void | set_trigger_def (const LEX_CSTRING &trigger_def) |
void | set_trigger_def_utf8 (const LEX_CSTRING &trigger_def_utf8) |
void | set_parse_error_message (const char *error_message) |
Mark trigger as having a parse error and remember the message for future use. More... | |
Private Attributes | |
MEM_ROOT * | m_mem_root |
Memory root to store all data of this Trigger object. More... | |
LEX_CSTRING | m_full_trigger_definition |
Full trigger definition reconstructed from a data loaded from the table mysql.trigger. More... | |
LEX_CSTRING | m_db_name |
Database name. More... | |
LEX_CSTRING | m_subject_table_name |
Table name. More... | |
LEX_CSTRING | m_definition |
Trigger definition to save in DD. More... | |
LEX_CSTRING | m_definition_utf8 |
Trigger definition in UTF8 to save in DD. More... | |
sql_mode_t | m_sql_mode |
Trigger sql-mode. More... | |
LEX_CSTRING | m_definer |
Trigger definer. More... | |
LEX_CSTRING | m_definer_user |
Trigger definer (user part). More... | |
LEX_CSTRING | m_definer_host |
Trigger definer (host part). More... | |
LEX_CSTRING | m_client_cs_name |
Character set context, used for parsing and executing trigger. More... | |
LEX_CSTRING | m_connection_cl_name |
Collation name of the connection within one a trigger are created. More... | |
LEX_CSTRING | m_db_cl_name |
Default database collation. More... | |
enum_trigger_event_type | m_event |
Trigger event. More... | |
enum_trigger_action_time_type | m_action_time |
Trigger action time. More... | |
my_timeval | m_created_timestamp |
Current time when the trigger was created (measured in milliseconds since since 0 hours, 0 minutes, 0 seconds, January 1, 1970, UTC). More... | |
ulonglong | m_action_order |
Action_order value for the trigger. More... | |
LEX_CSTRING | m_trigger_name |
Trigger name. More... | |
GRANT_INFO | m_subject_table_grant |
Grant information for the trigger. More... | |
sp_head * | m_sp |
Pointer to the sp_head corresponding to the trigger. More... | |
const char * | m_parse_error_message |
Parse error message for trigger if it has one, nullptr otherwise. More... | |
This class represents a trigger object.
Trigger can be created, initialized, parsed, and executed.
Trigger attributes are usually stored on the memory root of the subject table TABLE object or its TABLE_SHARE (depending on whether it is something specific to the TABLE instance (e.g. sp_head), or static metadata that can be shared by all TABLE instances (e.g. subject table name).
A Trigger object however can exist when the subject table does not. In this case, trigger attributes are stored on a separate memory root.
Trigger objects are created in two ways:
loading from Data Dictionary (by Trigger_loader)
In this case Trigger object is initialized from the data which is directly available in data dictionary;
creating a new Trigger object that represents the trigger object being created by CREATE TRIGGER statement (by Table_trigger_dispatcher).
In this case Trigger object is created temporarily.
|
private |
Trigger constructor.
Trigger::~Trigger | ( | ) |
Destroy associated SP (if any).
void Trigger::add_tables_and_routines | ( | THD * | thd, |
Query_tables_list * | prelocking_ctx, | ||
Table_ref * | table_list | ||
) |
Add tables and routines used by trigger to the set of elements used by statement.
[in] | thd | thread handle |
[in,out] | prelocking_ctx | prelocking context of the statement |
[in] | table_list | Table_ref for the table |
Create a new Trigger object as a shallow clone of existing Trigger object.
|
static |
Constructs CREATE TRIGGER statement taking into account a value of the DEFINER clause.
The point of this method is to create canonical forms of CREATE TRIGGER statement for writing into the binlog.
thd | thread context | |
[out] | binlog_query | well-formed CREATE TRIGGER statement for putting into binlog (after successful execution) |
def_user | user part of a definer value | |
def_host | host part of a definer value |
false | Success |
true | Failure |
|
static |
Creates a new Trigger-instance with the state loaded from the Data Dictionary.
[in] | mem_root | MEM_ROOT for memory allocation. |
[in] | trigger_name | name of trigger |
[in] | db_name | name of schema. |
[in] | subject_table_name | subject table name. |
[in] | definition | CREATE TRIGGER statement. |
[in] | definition_utf8 | CREATE TRIGGER statement in UTF8. |
[in] | sql_mode | sql_mode value. |
[in] | definer_user | user part of a 'definer' value. |
[in] | definer_host | host part of a 'definer' value. |
[in] | client_cs_name | client character set name. |
[in] | connection_cl_name | connection collation name. |
[in] | db_cl_name | database collation name. |
[in] | trg_event_type | trigger event type |
[in] | trg_time_type | trigger action timing |
[in] | action_order | action order |
[in] | created_timestamp | trigger creation time stamp. |
|
static |
Creates a new Trigger-instance with the state from the parser.
This method is used to create a Trigger-object after CREATE TRIGGER statement is parsed.
thd | Thread context with a valid LEX-tree of CREATE TRIGGER statement | |
subject_table | A valid (not fake!) subject TABLE-object | |
[out] | binlog_create_trigger_stmt | Store CREATE TRIGGER appropriate to writing into the binlog. It should have DEFINER clause and should not have FOLLOWS/PRECEDES clause. |
bool Trigger::create_full_trigger_definition | ( | const THD * | thd, |
String * | full_trigger_definition | ||
) | const |
Construct a full CREATE TRIGGER statement from Trigger's data members.
[in] | thd | Thread context |
[out] | full_trigger_definition | Place where a CREATE TRIGGER statement be stored. |
true | Failure |
false | Success |
bool Trigger::execute | ( | THD * | thd | ) |
Execute trigger's body.
[in] | thd | Thread context |
true | Trigger execution failed or trigger has compilation errors |
false | Success |
|
inline |
|
inline |
const LEX_CSTRING & Trigger::get_action_time_as_string | ( | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
const LEX_CSTRING & Trigger::get_event_as_string | ( | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
bool Trigger::parse | ( | THD * | thd, |
bool | is_upgrade | ||
) |
Parse CREATE TRIGGER statement.
[in] | thd | Thread context |
[in] | is_upgrade | Flag to indicate that trigger being parsed is read from .TRG file in case of upgrade. |
void Trigger::print_upgrade_warning | ( | THD * | thd | ) |
Print upgrade warnings (if any).
[in] | thd | Thread handle. |
|
inline |
|
private |
Mark trigger as having a parse error and remember the message for future use.
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
private |
Action_order value for the trigger.
Action_order is the ordinal position of the trigger in the list of triggers with the same EVENT_MANIPULATION, CONDITION_TIMING, and ACTION_ORIENTATION.
|
private |
Trigger action time.
|
private |
Character set context, used for parsing and executing trigger.
|
private |
Collation name of the connection within one a trigger are created.
|
private |
Current time when the trigger was created (measured in milliseconds since since 0 hours, 0 minutes, 0 seconds, January 1, 1970, UTC).
This is the value of CREATED attribute.
There is special value – zero means CREATED is not set (NULL).
|
private |
Default database collation.
|
private |
Database name.
|
private |
Trigger definer.
|
private |
Trigger definer (host part).
|
private |
Trigger definer (user part).
|
private |
Trigger definition to save in DD.
|
private |
Trigger definition in UTF8 to save in DD.
|
private |
Trigger event.
|
private |
Full trigger definition reconstructed from a data loaded from the table mysql.trigger.
|
private |
Memory root to store all data of this Trigger object.
This can be a pointer to the subject table share memory root (if this Trigger object is associated with TABLE_SHARE), table memory root (if this Trigger object is associated with TABLE object), or it can be a pointer to a dedicated memory root if subject table does not exist.
|
private |
Parse error message for trigger if it has one, nullptr otherwise.
This error will be displayed when the user tries to manipulate or invoke triggers on a table that has broken triggers. It will get set only once per statement and thus will contain the first parse error encountered in the trigger file.
|
private |
Pointer to the sp_head corresponding to the trigger.
|
private |
Trigger sql-mode.
|
private |
Grant information for the trigger.
|
private |
Table name.
|
private |
Trigger name.