421 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			421 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								###################### t/debug_sync.test ###############################
							 | 
						||
| 
								 | 
							
								#                                                                      #
							 | 
						||
| 
								 | 
							
								# Testing of the Debug Sync Facility.                                  #
							 | 
						||
| 
								 | 
							
								#                                                                      #
							 | 
						||
| 
								 | 
							
								# There is important documentation within sql/debug_sync.cc            #
							 | 
						||
| 
								 | 
							
								#                                                                      #
							 | 
						||
| 
								 | 
							
								# Used objects in this test case:                                      #
							 | 
						||
| 
								 | 
							
								# p0 - synchronization point 0. Non-existent dummy sync point.         #
							 | 
						||
| 
								 | 
							
								# s1 - signal 1.                                                       #
							 | 
						||
| 
								 | 
							
								# s2 - signal 2.                                                       #
							 | 
						||
| 
								 | 
							
								#                                                                      #
							 | 
						||
| 
								 | 
							
								# Creation:                                                            #
							 | 
						||
| 
								 | 
							
								# 2008-02-18 istruewing                                                #
							 | 
						||
| 
								 | 
							
								#                                                                      #
							 | 
						||
| 
								 | 
							
								########################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# We need the Debug Sync Facility.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--source include/have_debug_sync.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# We are checking privileges, which the embedded server cannot do.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--source include/not_embedded.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Preparative cleanup.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								DROP TABLE IF EXISTS t1;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Show the special system variable.
							 | 
						||
| 
								 | 
							
								# It shows ON or OFF depending on the command line option --debug-sync.
							 | 
						||
| 
								 | 
							
								# The test case assumes it is ON (command line option present).
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Valid forms.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6           HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2           EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2           EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2                     HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1                       EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1                       EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1                                 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6           HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2           EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2           EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2                     HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0           WAIT_FOR s2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                                           HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TEST';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='RESET';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Valid forms. Lower case.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2 timeout 6           hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2 timeout 6';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2           execute 2 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2           execute 2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2                     hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1 wait_for s2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1                       execute 2 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1                       execute 2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1                                 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 signal s1';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2 timeout 6 execute 2 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2 timeout 6 execute 2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2 timeout 6           hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2 timeout 6';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2           execute 2 hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2           execute 2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2                     hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0           wait_for s2';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0                                           hit_limit 3';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 clear';
							 | 
						||
| 
								 | 
							
								set debug_sync='p0 test';
							 | 
						||
| 
								 | 
							
								set debug_sync='reset';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Valid forms. Line wrap, leading, mid, trailing space.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6
							 | 
						||
| 
								 | 
							
								                EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='   p0 SIGNAL s1 WAIT_FOR s2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0    SIGNAL    s1    WAIT_FOR    s2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2   ';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='   p0 SIGNAL s1 WAIT_FOR s2   ';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='   p0    SIGNAL    s1    WAIT_FOR    s2   ';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Invalid forms.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC=' ';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                                          EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                                TIMEOUT 6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                                TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1           EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                  SIGNAL s1 TIMEOUT 6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0                  SIGNAL s1 TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 EXECUTE 2 SIGNAL s1 TIMEOUT 6';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TIMEOUT 6 SIGNAL s1';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 EXECUTE 2 TIMEOUT 6 SIGNAL s1';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 CLEAR HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='CLEAR';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 CLEAR p0';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='TEST';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TEST p0';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 RESET';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='RESET p0';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 RESET p0';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL ';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR ';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE ';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Invalid keywords used.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_UNKNOWN_SYSTEM_VARIABLE
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNCx='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAx s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOx s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUx 0 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTx 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIx 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 CLEARx';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 TESTx';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='RESETx';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Invalid numbers. Decimal only.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 0x6 EXECUTE 2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 0x2 HIT_LIMIT 3';
							 | 
						||
| 
								 | 
							
								--error ER_PARSE_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 7 EXECUTE 2 HIT_LIMIT 0x3';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. Invalid value type.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_WRONG_TYPE_FOR_VAR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 7;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. DEBUG_SYNC is a SESSION-only variable.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_LOCAL_VARIABLE
							 | 
						||
| 
								 | 
							
								SET GLOBAL DEBUG_SYNC= 'p0 CLEAR';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Syntax. The variable value does not need to be a string literal.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET @myvar= 'now SIGNAL from_myvar';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= @myvar;
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Functional tests.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# NOTE: There is the special synchronization point 'now'. It is placed
							 | 
						||
| 
								 | 
							
								#       immediately after setting of the DEBUG_SYNC variable.
							 | 
						||
| 
								 | 
							
								#       So it is executed before the SET statement ends.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# NOTE: There is only one global signal (say "signal post" or "flag mast").
							 | 
						||
| 
								 | 
							
								#       A SIGNAL action writes its signal into it ("sets a flag").
							 | 
						||
| 
								 | 
							
								#       The signal persists until explicitly overwritten.
							 | 
						||
| 
								 | 
							
								#       To avoid confusion for later tests, it is recommended to clear
							 | 
						||
| 
								 | 
							
								#       the signal by signalling "empty" ("setting the 'empty' flag"):
							 | 
						||
| 
								 | 
							
								#       SET DEBUG_SYNC= 'now SIGNAL empty';
							 | 
						||
| 
								 | 
							
								#       Preferably you can reset the whole facility with:
							 | 
						||
| 
								 | 
							
								#       SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								#       The signal is then '' (really empty) which connot be done otherwise.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Time out immediately. This gives just a warning.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now SIGNAL something';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								# Suppress warning number
							 | 
						||
| 
								 | 
							
								--replace_column 2 ####
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# If signal is present already, TIMEOUT 0 does not give a warning.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now SIGNAL nothing';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# EXECUTE 0 is effectively a no-op.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Run into HIT_LIMIT. This gives an error.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--error ER_DEBUG_SYNC_HIT_LIMIT
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now HIT_LIMIT 1';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Many actions. Watch the array growing and shrinking in the debug trace:
							 | 
						||
| 
								 | 
							
								# egrep 'query:|debug_sync_action:' mysql-test/var/log/master.trace
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p1abcd   SIGNAL s1 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p2abc    SIGNAL s2 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p4a      SIGNAL s4 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p5abcde  SIGNAL s5 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p6ab     SIGNAL s6 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p7       SIGNAL s7 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p8abcdef SIGNAL s8 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Execute some actions to show they exist. Each sets a distinct signal.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p4a      TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p1abcd   TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p7       TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p9abcdef TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p3abcdef TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Clear the actions.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p1abcd   CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p2abc    CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p5abcde  CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p6ab     CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p8abcdef CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p9abcdef CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p3abcdef CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p4a      CLEAR';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p7       CLEAR';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Execute some actions to show they have gone.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p1abcd   TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p7       TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'p9abcdef TEST';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Now cleanup. Actions are clear already, but signal needs to be cleared.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								SHOW VARIABLES LIKE 'DEBUG_SYNC';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Facility requires SUPER privilege.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								CREATE USER mysqltest_1@localhost;
							 | 
						||
| 
								 | 
							
								GRANT SUPER ON *.* TO mysqltest_1@localhost;
							 | 
						||
| 
								 | 
							
								--echo connection con1, mysqltest_1
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest_1,,);
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								DROP USER mysqltest_1@localhost;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								CREATE USER mysqltest_2@localhost;
							 | 
						||
| 
								 | 
							
								GRANT ALL ON *.* TO mysqltest_2@localhost;
							 | 
						||
| 
								 | 
							
								REVOKE SUPER ON *.* FROM mysqltest_2@localhost;
							 | 
						||
| 
								 | 
							
								--echo connection con1, mysqltest_2
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest_2,,);
							 | 
						||
| 
								 | 
							
								--error ER_SPECIFIC_ACCESS_DENIED_ERROR
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								DROP USER mysqltest_2@localhost;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Example 1.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Preparative cleanup.
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								DROP TABLE IF EXISTS t1;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test.
							 | 
						||
| 
								 | 
							
								CREATE TABLE t1 (c1 INT);
							 | 
						||
| 
								 | 
							
								    --echo connection con1
							 | 
						||
| 
								 | 
							
								    connect (con1,localhost,root,,);
							 | 
						||
| 
								 | 
							
								    SET DEBUG_SYNC= 'before_lock_tables_takes_lock
							 | 
						||
| 
								 | 
							
								      SIGNAL opened WAIT_FOR flushed';
							 | 
						||
| 
								 | 
							
								    send INSERT INTO t1 VALUES(1);
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now WAIT_FOR opened';
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'after_flush_unlock SIGNAL flushed';
							 | 
						||
| 
								 | 
							
								FLUSH TABLE t1;
							 | 
						||
| 
								 | 
							
								    --echo connection con1
							 | 
						||
| 
								 | 
							
								    connection con1;
							 | 
						||
| 
								 | 
							
								    reap;
							 | 
						||
| 
								 | 
							
								    disconnect con1;
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Example 2.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Preparative cleanup.
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								DROP TABLE IF EXISTS t1;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test.
							 | 
						||
| 
								 | 
							
								CREATE TABLE t1 (c1 INT);
							 | 
						||
| 
								 | 
							
								LOCK TABLE t1 WRITE;
							 | 
						||
| 
								 | 
							
								    --echo connection con1
							 | 
						||
| 
								 | 
							
								    connect (con1,localhost,root,,);
							 | 
						||
| 
								 | 
							
								    # Retain action after use. First used by general_log.
							 | 
						||
| 
								 | 
							
								    SET DEBUG_SYNC= 'wait_for_lock SIGNAL locked EXECUTE 2';
							 | 
						||
| 
								 | 
							
								    send INSERT INTO t1 VALUES (1);
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								# Wait until INSERT waits for lock.
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'now WAIT_FOR locked';
							 | 
						||
| 
								 | 
							
								# let INSERT continue.
							 | 
						||
| 
								 | 
							
								UNLOCK TABLES;
							 | 
						||
| 
								 | 
							
								    --echo connection con1
							 | 
						||
| 
								 | 
							
								    connection con1;
							 | 
						||
| 
								 | 
							
								    --echo retrieve INSERT result.
							 | 
						||
| 
								 | 
							
								    reap;
							 | 
						||
| 
								 | 
							
								    disconnect con1;
							 | 
						||
| 
								 | 
							
								--echo connection default
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Cleanup after test case.
							 | 
						||
| 
								 | 
							
								# Otherwise signal would contain 'flushed' here,
							 | 
						||
| 
								 | 
							
								# which could confuse the next test.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								SET DEBUG_SYNC= 'RESET';
							 | 
						||
| 
								 | 
							
								
							 |