mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
# ==== 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;
 |