mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-24395 Atomic DROP TRIGGER
The purpose of this task is to ensure that DROP TRIGGER is atomic. Description of how atomic drop trigger works: Logging of DROP TRIGGER Log the following information: db table name trigger name xid /* Used to check if query was already logged to binary log */ initial length of the .TRG file query if there is space for it, if not log a zero length query. Recovery operations: - Delete if exists 'database/trigger_name.TRN~' - If this file existed, it means that we crashed before the trigger was deleted and there is nothing else to do. - Get length of .TRG file - If file length is unchanged, trigger was not dropped. Nothing else to do. - Log original query to binary, if it was stored in the ddl log. If it was not stored (long query string), log the following query to binary log: use `database` ; DROP TRIGGER IF EXISTS `trigger_name` /* generated by ddl log */; Other things: - Added trigger name and DDL_LOG_STATE to drop_trigger() Trigger name was added to make the interface more consistent and more general.
This commit is contained in:
@@ -81,6 +81,7 @@ enum ddl_log_action_code
|
||||
DDL_LOG_DROP_TABLE_ACTION= 8,
|
||||
DDL_LOG_DROP_VIEW_INIT_ACTION= 9,
|
||||
DDL_LOG_DROP_VIEW_ACTION= 10,
|
||||
DDL_LOG_DROP_TRIGGER_ACTION= 11,
|
||||
DDL_LOG_LAST_ACTION /* End marker */
|
||||
};
|
||||
|
||||
@@ -228,5 +229,10 @@ bool ddl_log_drop_view(THD *thd, DDL_LOG_STATE *ddl_state,
|
||||
const LEX_CSTRING *path,
|
||||
const LEX_CSTRING *db,
|
||||
const LEX_CSTRING *table);
|
||||
bool ddl_log_drop_trigger(THD *thd, DDL_LOG_STATE *ddl_state,
|
||||
const LEX_CSTRING *db,
|
||||
const LEX_CSTRING *table,
|
||||
const LEX_CSTRING *trigger_name,
|
||||
const LEX_CSTRING *query);
|
||||
extern mysql_mutex_t LOCK_gdl;
|
||||
#endif /* DDL_LOG_INCLUDED */
|
||||
|
Reference in New Issue
Block a user