summaryrefslogtreecommitdiff
path: root/sql/log_event_server.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2020-02-03 16:02:05 +0100
committerAndrei Elkin <andrei.elkin@mariadb.com>2020-03-09 22:16:43 +0200
commit980108ceebdca5c4f6c9e3a167e9ad40cb062ac8 (patch)
treee9e5a5d18c842a52079b7afd56c1d4f724a9ec2b /sql/log_event_server.cc
parent1f5a8e1f779ebd6cedfde726166da6c52bfe1959 (diff)
downloadmariadb-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.cc17
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);