polardbxengine/mysql-test/suite/innodb/t/innodb-new-fk.test

102 lines
2.7 KiB
Plaintext

--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/have_innodb_max_16k.inc
--enable_connect_log
--echo #
--echo # Test for bug #26654685 "INDEX->ID == BTR_PAGE_GET_INDEX_ID(PAGE) AT
--echo # BTR_CUR_SEARCH_TO_NTH_LEVEL IN BTR/B".
--echo #
CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB;
INSERT INTO parent VALUES(1,2),(2,2);
CREATE TABLE child (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB;
INSERT INTO child VALUES (10, 2);
# This should rollback due to dup key
SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead';
--send CREATE UNIQUE INDEX idx ON parent(b);
# Make table ref_count > 1
connect (con1,localhost,root,,);
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
INSERT INTO parent VALUES(4, 2);
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
connection default;
--error ER_DUP_ENTRY
reap;
SET DEBUG_SYNC = 'now SIGNAL conn_add_fk';
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR conn_add_fk';
--error ER_FK_NO_INDEX_PARENT
ALTER TABLE child ADD CONSTRAINT cfx FOREIGN KEY (b) REFERENCES parent(b);
SET DEBUG_SYNC = 'RESET';
connection default;
DROP TABLE child;
DROP TABLE parent;
connection con1;
disconnect con1;
--source include/wait_until_disconnected.inc
connection default;
--echo #
--echo # Test case for bug#26655360 "ASSERTION FAILURE: DICT0DICT.CC:2045
--echo # :TABLE->N_REC_LOCKS == 0".
CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB;
CREATE INDEX idx on parent(b);
INSERT INTO parent VALUES(1,2),(2,2);
CREATE TABLE child (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB;
INSERT INTO child VALUES (10, 3);
SET DEBUG_SYNC = "innodb_ddl_log_before_enter SIGNAL start_create WAIT_FOR go_ahead";
--send ALTER TABLE child ADD CONSTRAINT idx17 FOREIGN KEY (b) REFERENCES parent(a)
--echo # Make table lock _count > 1
connect (con1,localhost,root,,);
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_create';
START TRANSACTION;
--send DELETE FROM parent WHERE a=1;
connect (con2,localhost,root,,);
--echo # Wait until DELETE is blocked due to MDL on the parent.
let $wait_condition=
SELECT COUNT(*) = 1 FROM information_schema.processlist
WHERE state = "Waiting for table metadata lock" AND
info LIKE "DELETE FROM parent %";
--source include/wait_condition.inc
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
disconnect con2;
--source include/wait_until_disconnected.inc
connection default;
--replace_regex /#sql.*$/#sql-xxxxx/
--error ER_NO_REFERENCED_ROW_2
reap;
connection con1;
reap;
COMMIT;
disconnect con1;
--source include/wait_until_disconnected.inc
connection default;
SET DEBUG_SYNC = 'RESET';
DROP TABLE child;
DROP TABLE parent;
--disable_connect_log