227 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			227 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # Bug38499 flush tables and multitable table update with derived table cause crash | ||
|  | # MySQL >= 5.0 | ||
|  | # | ||
|  | 
 | ||
|  | # Save the initial number of concurrent sessions | ||
|  | --source include/count_sessions.inc | ||
|  | 
 | ||
|  | SET @odl_sync_frm = @@global.sync_frm; | ||
|  | SET @@global.sync_frm = OFF; | ||
|  | 
 | ||
|  | connect (locker,localhost,root,,); | ||
|  | connect (writer,localhost,root,,); | ||
|  | 
 | ||
|  | --connection default | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | CREATE TABLE t1( a INT, b INT ); | ||
|  | INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4); | ||
|  | 
 | ||
|  | --echo # 1. test regular tables | ||
|  | --echo # 1.1. test altering of columns that multiupdate doesn't use | ||
|  | --echo # 1.1.1. normal mode | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  | --dec $i | ||
|  | 
 | ||
|  | --connection writer | ||
|  |   send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0; | ||
|  | 
 | ||
|  | --connection locker | ||
|  |   ALTER TABLE t1 ADD COLUMN (c INT); | ||
|  |   ALTER TABLE t1 DROP COLUMN c; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --reap | ||
|  | } | ||
|  | 
 | ||
|  | --echo # 1.1.2. PS mode | ||
|  | 
 | ||
|  | --connection writer | ||
|  | PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0'; | ||
|  | 
 | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  | --dec $i | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --send EXECUTE stmt | ||
|  | 
 | ||
|  | --connection locker | ||
|  |   ALTER TABLE t1 ADD COLUMN (c INT); | ||
|  |   ALTER TABLE t1 DROP COLUMN c; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | --echo # 1.2. test altering of columns that multiupdate uses | ||
|  | --echo # 1.2.1. normal mode | ||
|  | 
 | ||
|  | --connection default | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  |   dec $i; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_DUP_FIELDNAME | ||
|  |   ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL; | ||
|  |   UPDATE t1 SET a=b; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_CANT_DROP_FIELD_OR_KEY | ||
|  |   ALTER TABLE t1 DROP COLUMN a; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --error 0,ER_BAD_FIELD_ERROR # unknown column error | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | --echo # 1.2.2. PS mode | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  |   dec $i; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_DUP_FIELDNAME | ||
|  |   ALTER TABLE t1 ADD COLUMN a INT; | ||
|  |   UPDATE t1 SET a=b; | ||
|  | 
 | ||
|  | --connection writer | ||
|  |   PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0'; | ||
|  | --send EXECUTE stmt | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_CANT_DROP_FIELD_OR_KEY | ||
|  |   ALTER TABLE t1 DROP COLUMN a; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list' | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | --connection default | ||
|  | ALTER TABLE t1 ADD COLUMN a INT; | ||
|  | 
 | ||
|  | --echo # 2. test UNIONs | ||
|  | --echo # 2.1. test altering of columns that multiupdate doesn't use | ||
|  | --echo # 2.1.1. normal mode | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  | --dec $i | ||
|  | 
 | ||
|  | --connection writer | ||
|  |   send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0; | ||
|  | 
 | ||
|  | --connection locker | ||
|  |   ALTER TABLE t1 ADD COLUMN (c INT); | ||
|  |   ALTER TABLE t1 DROP COLUMN c; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --reap | ||
|  | } | ||
|  | 
 | ||
|  | --echo # 2.1.2. PS mode | ||
|  | 
 | ||
|  | --connection writer | ||
|  | PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0'; | ||
|  | 
 | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  | --dec $i | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --send EXECUTE stmt | ||
|  | 
 | ||
|  | --connection locker | ||
|  |   ALTER TABLE t1 ADD COLUMN (c INT); | ||
|  |   ALTER TABLE t1 DROP COLUMN c; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | --echo # 2.2. test altering of columns that multiupdate uses | ||
|  | --echo # 2.2.1. normal mode | ||
|  | 
 | ||
|  | --connection default | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  |   dec $i; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_DUP_FIELDNAME | ||
|  |   ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL; | ||
|  |   UPDATE t1 SET a=b; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_CANT_DROP_FIELD_OR_KEY | ||
|  |   ALTER TABLE t1 DROP COLUMN a; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list' | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | --echo # 2.2.2. PS mode | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | let $i = 100; | ||
|  | while ($i) { | ||
|  |   dec $i; | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_DUP_FIELDNAME | ||
|  |   ALTER TABLE t1 ADD COLUMN a INT; | ||
|  |   UPDATE t1 SET a=b; | ||
|  | 
 | ||
|  | --connection writer | ||
|  |   PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0'; | ||
|  | --send EXECUTE stmt | ||
|  | 
 | ||
|  | --connection locker | ||
|  | --error 0,ER_CANT_DROP_FIELD_OR_KEY | ||
|  |   ALTER TABLE t1 DROP COLUMN a; | ||
|  | 
 | ||
|  | --connection writer | ||
|  | --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list' | ||
|  | --reap | ||
|  | } | ||
|  | --enable_query_log | ||
|  | --connection default | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # Close connections | ||
|  | --disconnect locker | ||
|  | --disconnect writer | ||
|  | 
 | ||
|  | SET @@global.sync_frm = @odl_sync_frm; | ||
|  | 
 | ||
|  | # End of 5.0 tests | ||
|  | 
 | ||
|  | # Wait till all disconnects are completed | ||
|  | --source include/wait_until_count_sessions.inc | ||
|  | 
 |