# Test for Bug 14006907 - FOREIGN KEY PROBLEMS AFTER DROP INDEX --source include/have_debug_sync.inc # Save the initial number of concurrent sessions. --source include/count_sessions.inc SET DEBUG_SYNC='RESET'; CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) ENGINE = InnoDB; CREATE TABLE t2 ( c2 INT PRIMARY KEY, CONSTRAINT t2c2 FOREIGN KEY (c2) REFERENCES t1 (c2)) ENGINE = InnoDB; --error ER_DROP_INDEX_FK DROP INDEX c2 ON t1; DROP TABLE t2; SET DEBUG_SYNC = 'innodb_after_inplace_alter_table SIGNAL drop WAIT_FOR fk'; --send DROP INDEX c2 ON t1; --echo # Establish session con1 (user=root) connect (con1,localhost,root,,); --echo # Session con1 connection con1; SET DEBUG_SYNC = 'now WAIT_FOR drop'; --send CREATE TABLE t2 ( c2 INT PRIMARY KEY, CONSTRAINT t2c2 FOREIGN KEY (c2) REFERENCES t1 (c2)) ENGINE = InnoDB; --echo # Establish session con2 (user=root) connect (con2,localhost,root,,); --echo # After WL#6049 CREATE TABLE t2 must be blocked while trying --echo # to acquire exclusive metadata lock on t1. let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE state = "Waiting for table metadata lock" AND info LIKE "CREATE TABLE t2 %"; --source include/wait_condition.inc SET DEBUG_SYNC = 'now SIGNAL fk'; disconnect con2; --echo # Switching to connection con1. connection con1; --echo # So no chance for CREATE TABLE t2 to sneak before DROP INDEX --echo # is committed in and succeed. --echo /* reap */ CREATE TABLE t2 ... --error ER_FK_NO_INDEX_PARENT --reap disconnect con1; --echo # Session default connection default; --echo /* reap */ DROP INDEX c2 ON t1; reap; --error ER_FK_NO_INDEX_PARENT CREATE TABLE t2 ( c2 INT PRIMARY KEY, CONSTRAINT t2c2 FOREIGN KEY (c2) REFERENCES t1 (c2)) ENGINE = InnoDB; SET DEBUG_SYNC='RESET'; DROP TABLE t1; # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc