Current Path : /home/usr.opt/mysql57/mysql-test/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/t/lock_multi_bug38691.test |
# The include statement below is a temp one for tests that are yet to #be ported to run with InnoDB, #but needs to be kept for tests that would need MyISAM in future. --source include/force_myisam_default.inc # # Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while # ``FLUSH TABLES WITH READ LOCK'' # 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; # Test to see if select will get the lock ahead of low priority update connect (locker,localhost,root,,); connect (writer,localhost,root,,); --connection default --disable_warnings DROP TABLE IF EXISTS t1,t2,t3; --enable_warnings CREATE TABLE t1 ( a int(11) unsigned default NULL, b varchar(255) default NULL, UNIQUE KEY a (a), KEY b (b) ); INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); CREATE TABLE t2 SELECT * FROM t1; CREATE TABLE t3 SELECT * FROM t1; --echo # test altering of columns that multiupdate doesn't use --echo # normal mode --disable_query_log let $i = 100; while ($i) { --dec $i --connection writer send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b; --connection locker ALTER TABLE t2 ADD COLUMN (c INT); ALTER TABLE t2 DROP COLUMN c; --connection writer --reap } --echo # PS mode --connection writer PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b'; let $i = 100; while ($i) { --dec $i --connection writer --send EXECUTE stmt --connection locker ALTER TABLE t2 ADD COLUMN (c INT); ALTER TABLE t2 DROP COLUMN c; --connection writer --reap } --enable_query_log --echo # test altering of columns that multiupdate uses --echo # normal mode --connection default --disable_query_log let $i = 100; while ($i) { dec $i; --connection locker --error 0,ER_DUP_FIELDNAME ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL; UPDATE t2 SET a=b; --connection writer --send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b --connection locker --error 0,ER_CANT_DROP_FIELD_OR_KEY ALTER TABLE t2 DROP COLUMN a; --connection writer --error 0,ER_BAD_FIELD_ERROR --reap } --enable_query_log --echo # PS mode --disable_query_log let $i = 100; while ($i) { dec $i; --connection locker --error 0,ER_DUP_FIELDNAME ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL; UPDATE t2 SET a=b; --connection writer PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b'; --send EXECUTE stmt --connection locker --error 0,ER_CANT_DROP_FIELD_OR_KEY ALTER TABLE t2 DROP COLUMN a; --connection writer --error 0,ER_BAD_FIELD_ERROR --reap } --enable_query_log --connection default DROP TABLE t1, t2, t3; # Close connections --disconnect locker --disconnect writer SET @@global.sync_frm = @odl_sync_frm; # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc