Loading mysql-test/r/rpl_insert_delayed.result +20 −0 Original line number Diff line number Diff line Loading @@ -29,3 +29,23 @@ id name 10 my name 20 is Bond drop table t1; CREATE TABLE t1(a int, UNIQUE(a)); INSERT DELAYED IGNORE INTO t1 VALUES(1); INSERT DELAYED IGNORE INTO t1 VALUES(1); show binlog events limit 11,100; Log_name Pos Event_type Server_id End_log_pos Info x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) select * from t1; a 1 On slave show binlog events limit 12,100; Log_name Pos Event_type Server_id End_log_pos Info x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) select * from t1; a 1 drop table t1; End of 5.0 tests mysql-test/t/rpl_insert_delayed.test +29 −0 Original line number Diff line number Diff line Loading @@ -65,3 +65,32 @@ connection master; drop table t1; sync_slave_with_master; connection master; # # Bug #29571: INSERT DELAYED IGNORE written to binary log on the master but # on the slave # CREATE TABLE t1(a int, UNIQUE(a)); INSERT DELAYED IGNORE INTO t1 VALUES(1); INSERT DELAYED IGNORE INTO t1 VALUES(1); #must show two INSERT DELAYED --replace_column 1 x 2 x 3 x 4 x 5 x show binlog events limit 11,100; select * from t1; sync_slave_with_master; echo On slave; #must show two INSERT DELAYED --replace_column 1 x 2 x 3 x 4 x 5 x show binlog events limit 12,100; select * from t1; # clean up connection master; drop table t1; sync_slave_with_master; connection master; --echo End of 5.0 tests sql/sql_insert.cc +6 −3 Original line number Diff line number Diff line Loading @@ -560,6 +560,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, int error, res; bool transactional_table, joins_freed= FALSE; bool changed; bool was_insert_delayed= (table_list->lock_type == TL_WRITE_DELAYED); uint value_count; ulong counter = 1; ulonglong id; Loading Loading @@ -859,13 +860,15 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, transactional_table= table->file->has_transactions(); if ((changed= (info.copied || info.deleted || info.updated))) if ((changed= (info.copied || info.deleted || info.updated)) || was_insert_delayed) { /* Invalidate the table in the query cache if something changed. For the transactional algorithm to work the invalidation must be before binlog writing and ha_autocommit_or_rollback */ if (changed) query_cache_invalidate3(thd, table_list, 1); if (error <= 0 || !transactional_table) { Loading Loading @@ -904,7 +907,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, if (mysql_bin_log.write(&qinfo) && transactional_table) error=1; } if (!transactional_table) if (!transactional_table && changed) thd->no_trans_update.all= TRUE; } } Loading Loading
mysql-test/r/rpl_insert_delayed.result +20 −0 Original line number Diff line number Diff line Loading @@ -29,3 +29,23 @@ id name 10 my name 20 is Bond drop table t1; CREATE TABLE t1(a int, UNIQUE(a)); INSERT DELAYED IGNORE INTO t1 VALUES(1); INSERT DELAYED IGNORE INTO t1 VALUES(1); show binlog events limit 11,100; Log_name Pos Event_type Server_id End_log_pos Info x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) select * from t1; a 1 On slave show binlog events limit 12,100; Log_name Pos Event_type Server_id End_log_pos Info x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1) select * from t1; a 1 drop table t1; End of 5.0 tests
mysql-test/t/rpl_insert_delayed.test +29 −0 Original line number Diff line number Diff line Loading @@ -65,3 +65,32 @@ connection master; drop table t1; sync_slave_with_master; connection master; # # Bug #29571: INSERT DELAYED IGNORE written to binary log on the master but # on the slave # CREATE TABLE t1(a int, UNIQUE(a)); INSERT DELAYED IGNORE INTO t1 VALUES(1); INSERT DELAYED IGNORE INTO t1 VALUES(1); #must show two INSERT DELAYED --replace_column 1 x 2 x 3 x 4 x 5 x show binlog events limit 11,100; select * from t1; sync_slave_with_master; echo On slave; #must show two INSERT DELAYED --replace_column 1 x 2 x 3 x 4 x 5 x show binlog events limit 12,100; select * from t1; # clean up connection master; drop table t1; sync_slave_with_master; connection master; --echo End of 5.0 tests
sql/sql_insert.cc +6 −3 Original line number Diff line number Diff line Loading @@ -560,6 +560,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, int error, res; bool transactional_table, joins_freed= FALSE; bool changed; bool was_insert_delayed= (table_list->lock_type == TL_WRITE_DELAYED); uint value_count; ulong counter = 1; ulonglong id; Loading Loading @@ -859,13 +860,15 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, transactional_table= table->file->has_transactions(); if ((changed= (info.copied || info.deleted || info.updated))) if ((changed= (info.copied || info.deleted || info.updated)) || was_insert_delayed) { /* Invalidate the table in the query cache if something changed. For the transactional algorithm to work the invalidation must be before binlog writing and ha_autocommit_or_rollback */ if (changed) query_cache_invalidate3(thd, table_list, 1); if (error <= 0 || !transactional_table) { Loading Loading @@ -904,7 +907,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, if (mysql_bin_log.write(&qinfo) && transactional_table) error=1; } if (!transactional_table) if (!transactional_table && changed) thd->no_trans_update.all= TRUE; } } Loading