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
							 | 
						||
| 
								 | 
							
								
							 |