diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2020-02-03 16:02:05 +0100 |
---|---|---|
committer | Andrei Elkin <andrei.elkin@mariadb.com> | 2020-03-09 22:16:43 +0200 |
commit | 980108ceebdca5c4f6c9e3a167e9ad40cb062ac8 (patch) | |
tree | e9e5a5d18c842a52079b7afd56c1d4f724a9ec2b /sql/log_event_server.cc | |
parent | 1f5a8e1f779ebd6cedfde726166da6c52bfe1959 (diff) | |
download | mariadb-git-980108ceebdca5c4f6c9e3a167e9ad40cb062ac8.tar.gz |
MDEV-21833 Make slave_run_triggers_for_rbr enforce triggers to run on slave, even when there are triggers on the master
A bit changed patch of Anders Karlsson with examples added.
New parameters "ENFORCE" to slave-run-triggers-for-rbr added.
Diffstat (limited to 'sql/log_event_server.cc')
-rw-r--r-- | sql/log_event_server.cc | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc index 202a41c2837..d371992c6c0 100644 --- a/sql/log_event_server.cc +++ b/sql/log_event_server.cc @@ -6809,7 +6809,7 @@ Write_rows_log_event::do_before_row_operations(const Slave_reporting_capability m_table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE); m_table->file->extra(HA_EXTRA_IGNORE_NO_KEY); } - if (slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers ) + if (m_table->triggers && do_invoke_trigger()) m_table->prepare_triggers_for_insert_stmt_or_event(); /* Honor next number column if present */ @@ -6989,8 +6989,7 @@ Rows_log_event::write_row(rpl_group_info *rgi, TABLE *table= m_table; // pointer to event's table int error; int UNINIT_VAR(keynum); - const bool invoke_triggers= - slave_run_triggers_for_rbr && !master_had_triggers && table->triggers; + const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); auto_afree_ptr<char> key(NULL); prepare_record(table, m_width, true); @@ -7866,7 +7865,7 @@ Delete_rows_log_event::do_before_row_operations(const Slave_reporting_capability */ return 0; } - if (slave_run_triggers_for_rbr && !master_had_triggers) + if (do_invoke_trigger()) m_table->prepare_triggers_for_delete_stmt_or_event(); return find_key(); @@ -7889,8 +7888,7 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi) int error; const char *tmp= thd->get_proc_info(); const char *message= "Delete_rows_log_event::find_row()"; - const bool invoke_triggers= - slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers; + const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); DBUG_ASSERT(m_table != NULL); #ifdef WSREP_PROC_INFO @@ -8016,7 +8014,7 @@ Update_rows_log_event::do_before_row_operations(const Slave_reporting_capability if ((err= find_key())) return err; - if (slave_run_triggers_for_rbr && !master_had_triggers) + if (do_invoke_trigger()) m_table->prepare_triggers_for_update_stmt_or_event(); return 0; @@ -8035,11 +8033,10 @@ Update_rows_log_event::do_after_row_operations(const Slave_reporting_capability return error; } -int +int Update_rows_log_event::do_exec_row(rpl_group_info *rgi) { - const bool invoke_triggers= - slave_run_triggers_for_rbr && !master_had_triggers && m_table->triggers; + const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); const char *tmp= thd->get_proc_info(); const char *message= "Update_rows_log_event::find_row()"; DBUG_ASSERT(m_table != NULL); |