diff --git a/mysql-test/suite/rpl/r/rpl_row_triggers.result b/mysql-test/suite/rpl/r/rpl_row_triggers.result index 7f37805b635..b4ae9861633 100644 --- a/mysql-test/suite/rpl/r/rpl_row_triggers.result +++ b/mysql-test/suite/rpl/r/rpl_row_triggers.result @@ -237,4 +237,50 @@ a b 3 30 set global slave_run_triggers_for_rbr = @slave_run_triggers_for_rbr.saved; drop table t1, tlog; +# +# MDEV-8411 Assertion `is_stat_field || !table || (!table->write_set || +# bitmap_is_set(table->write_set, field_index) || +# bitmap_is_set(table->vcol_set, field_index))' +# failed in Field_timestamp::store_TIME_with_warning +# +# +# Create table on master, replicate it on slave. +# +connection master; +set @binlog_row_image.saved = @@binlog_row_image; +set binlog_row_image = MINIMAL; +create table t1 (pk int primary key, f int); +connection slave; +# +# Create a trigger on the slave. +# +create trigger tr before update on t1 for each row set new.f = 1000; +set @old_slave_run_triggers_for_rbr = @@global.slave_run_triggers_for_rbr; +set global slave_run_triggers_for_rbr = YES; +connection master; +# +# Update the table to have the trigger fire on the slave., +# +insert into t1 values (1,1),(2,2); +update t1 set pk=pk+10; +select * from t1; +pk f +11 1 +12 2 +connection slave; +# +# Check to see if slave has the table updated. +# +select * from t1; +pk f +11 1000 +12 1000 +# +# Cleanup +# +set global slave_run_triggers_for_rbr = @old_slave_run_triggers_for_rbr; +connection master; +set binlog_row_image = @binlog_row_image.saved; +drop table t1; +connection slave; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_row_triggers.test b/mysql-test/suite/rpl/t/rpl_row_triggers.test index e3c90d874f0..173ddebba12 100644 --- a/mysql-test/suite/rpl/t/rpl_row_triggers.test +++ b/mysql-test/suite/rpl/t/rpl_row_triggers.test @@ -276,5 +276,54 @@ drop table t1, tlog; sync_slave_with_master; +--echo # +--echo # MDEV-8411 Assertion `is_stat_field || !table || (!table->write_set || +--echo # bitmap_is_set(table->write_set, field_index) || +--echo # bitmap_is_set(table->vcol_set, field_index))' +--echo # failed in Field_timestamp::store_TIME_with_warning +--echo # +--enable_connect_log +--echo # +--echo # Create table on master, replicate it on slave. +--echo # +--connection master +set @binlog_row_image.saved = @@binlog_row_image; +set binlog_row_image = MINIMAL; +create table t1 (pk int primary key, f int); + +--sync_slave_with_master +--echo # +--echo # Create a trigger on the slave. +--echo # +create trigger tr before update on t1 for each row set new.f = 1000; +set @old_slave_run_triggers_for_rbr = @@global.slave_run_triggers_for_rbr; +set global slave_run_triggers_for_rbr = YES; + +--connection master +--echo # +--echo # Update the table to have the trigger fire on the slave., +--echo # +insert into t1 values (1,1),(2,2); +update t1 set pk=pk+10; +select * from t1; + +--sync_slave_with_master +--echo # +--echo # Check to see if slave has the table updated. +--echo # +select * from t1; + +--echo # +--echo # Cleanup +--echo # + +set global slave_run_triggers_for_rbr = @old_slave_run_triggers_for_rbr; + +--connection master +set binlog_row_image = @binlog_row_image.saved; +drop table t1; + +--sync_slave_with_master +--disable_connect_log --source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index ff2f9594922..8941f944da2 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -11352,6 +11352,7 @@ bool Rows_log_event::process_triggers(trg_event_type event, { bool result; DBUG_ENTER("Rows_log_event::process_triggers"); + m_table->triggers->mark_fields_used(event); if (slave_run_triggers_for_rbr == SLAVE_RUN_TRIGGERS_FOR_RBR_YES) { tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */