diff options
Diffstat (limited to 'mysql-test/suite/binlog/include/binlog_insert_delayed.test')
-rw-r--r-- | mysql-test/suite/binlog/include/binlog_insert_delayed.test | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/mysql-test/suite/binlog/include/binlog_insert_delayed.test b/mysql-test/suite/binlog/include/binlog_insert_delayed.test new file mode 100644 index 00000000..8f669fc1 --- /dev/null +++ b/mysql-test/suite/binlog/include/binlog_insert_delayed.test @@ -0,0 +1,71 @@ +# ==== Purpose ==== +# +# Verify that INSERT DELAYED in mixed or row mode writes events to the +# binlog, and that AUTO_INCREMENT works correctly. +# +# ==== Method ==== +# +# Insert both single and multiple rows into an autoincrement column, +# both with specified value and with NULL. +# +# With INSERT DELAYED, the rows do not show up in the table +# immediately, so we must do source include/wait_until_rows_count.inc +# between any two INSERT DELAYED statements. Moreover, if mixed or +# row-based logging is used, there is also a delay between when rows +# show up in the table and when they show up in the binlog. To ensure +# that the rows show up in the binlog, we call FLUSH TABLES, which +# waits until the delayed_insert thread has finished. +# +# We cannot read the binlog after executing INSERT DELAYED statements +# that insert multiple rows, because that is nondeterministic. More +# precisely, rows may be written in batches to the binlog, where each +# batch has one Table_map_log_event and one or more +# Write_rows_log_event. The number of rows included in each batch is +# nondeterministic. +# +# ==== Related bugs ==== +# +# BUG#20627: INSERT DELAYED does not honour auto_increment_* variables +# Bug in this test: BUG#38068: binlog_stm_binlog fails sporadically in pushbuild + +reset master; + +create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; + +let $table=t1; +let $count=0; + +insert /* before delayed */ delayed /* after delayed */ into t1 values (207); +inc $count; +--source include/wait_until_rows_count.inc + +insert /*! delayed */ into t1 values (null); +inc $count; +--source include/wait_until_rows_count.inc + +insert delayed into t1 values (300); +inc $count; +--source include/wait_until_rows_count.inc + +# It is not enough to wait until all rows have been inserted into the +# table. FLUSH TABLES ensures that they are in the binlog too. See +# comment above. +FLUSH TABLES; +source include/show_binlog_events.inc; + +RESET MASTER; +insert /* before delayed */ delayed /* after delayed */ into t1 values (null),(null),(null),(null); +inc $count; inc $count; inc $count; inc $count; +--source include/wait_until_rows_count.inc + +insert /*! delayed */ into t1 values (null),(null),(400),(null); +inc $count; inc $count; inc $count; inc $count; +--source include/wait_until_rows_count.inc + +if (`SELECT @@SESSION.BINLOG_FORMAT = 'STATEMENT'`) { + FLUSH TABLES; + source include/show_binlog_events.inc; +} + +select * from t1; +drop table t1; |