mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge branch '10.6' into 10.11
This commit is contained in:
43
mysql-test/suite/innodb/r/auto_increment_lock_mode.result
Normal file
43
mysql-test/suite/innodb/r/auto_increment_lock_mode.result
Normal file
@@ -0,0 +1,43 @@
|
||||
CREATE TABLE t1(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t3(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t4(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(a SERIAL, b INT) ENGINE=InnoDB;
|
||||
CREATE FUNCTION p1() RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO t1() VALUES();
|
||||
INSERT INTO t2() VALUES();
|
||||
INSERT INTO t3() VALUES();
|
||||
INSERT INTO t4() VALUES();
|
||||
INSERT INTO t5() VALUES();
|
||||
RETURN 1;
|
||||
END$$
|
||||
INSERT INTO t6(b) SELECT p1();
|
||||
UPDATE t1,t2,t3,t4,t5 SET t1.a=2,t2.a=2,t3.a=2,t4.a=2,t5.a=2;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2
|
||||
connect con1,localhost,root,,;
|
||||
connect con2,localhost,root,,;
|
||||
connect con3,localhost,root,,;
|
||||
connection con1;
|
||||
INSERT INTO t6(b) SELECT SLEEP(p1());
|
||||
connection con2;
|
||||
INSERT INTO t6(b) SELECT SLEEP(p1());
|
||||
connection con3;
|
||||
UPDATE t1,t2,t3,t4,t5 SET t1.a=0,t2.a=0,t3.a=0,t4.a=0,t5.a=0
|
||||
WHERE t1.a=2 AND t2.a=2 AND t3.a=2 AND t4.a=2 AND t5.a=2;
|
||||
connection default;
|
||||
KILL QUERY $ID1;
|
||||
KILL QUERY $ID2;
|
||||
KILL QUERY $ID3;
|
||||
connection con1;
|
||||
disconnect con1;
|
||||
connection con2;
|
||||
disconnect con2;
|
||||
connection con3;
|
||||
disconnect con3;
|
||||
connection default;
|
||||
DROP FUNCTION p1;
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
@@ -164,9 +164,6 @@ DELETE FROM parent;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`a`) REFERENCES `parent` (`a`) ON DELETE CASCADE)
|
||||
ALTER TABLE child ADD INDEX(a);
|
||||
DELETE FROM parent;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`a`) REFERENCES `parent` (`a`) ON DELETE CASCADE)
|
||||
ALTER TABLE child FORCE;
|
||||
DELETE FROM parent;
|
||||
DROP TABLE child,parent;
|
||||
SELECT unique_constraint_name FROM information_schema.referential_constraints
|
||||
WHERE table_name = 't2';
|
||||
@@ -1023,6 +1020,23 @@ t2 CREATE TABLE `t2` (
|
||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t1` (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
drop tables t2, t1;
|
||||
#
|
||||
# MDEV-29182 Assertion fld->field_no < table->n_v_def failed on cascade
|
||||
#
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(3), c INT AS (LENGTH(b)) VIRTUAL,
|
||||
INDEX(c)) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(a INT REFERENCES t1(a) ON UPDATE CASCADE,
|
||||
b INT GENERATED ALWAYS AS(a) VIRTUAL, INDEX(b)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 SET a=1,b='fu';
|
||||
INSERT INTO t2 SET a=1;
|
||||
UPDATE t1 SET a=2,b='bar';
|
||||
SELECT * FROM t1;
|
||||
a b c
|
||||
2 bar 3
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
2 2
|
||||
DROP TABLE t2,t1;
|
||||
# End of 10.5 tests
|
||||
#
|
||||
# MDEV-26554 Table-rebuilding DDL on parent table causes crash
|
||||
@@ -1118,6 +1132,56 @@ test.binaries check status OK
|
||||
test.collections check status OK
|
||||
disconnect con1;
|
||||
DROP TABLE binaries, collections;
|
||||
CREATE SCHEMA `#mysql50##mysql50#d-b`;
|
||||
CREATE TABLE `#mysql50##mysql50#d-b`.t1 (a INT PRIMARY KEY, b INT UNIQUE) engine=InnoDB;
|
||||
USE `#mysql50##mysql50#d-b`;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT UNIQUE REFERENCES t1(b)) ENGINE=InnoDB;
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
ALTER TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1(a);
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`a`),
|
||||
UNIQUE KEY `b` (`b`),
|
||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`b`),
|
||||
CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`a`) REFERENCES `t1` (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO t1 SET a=1;
|
||||
INSERT INTO t2 SET a=1;
|
||||
DELETE FROM t1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`#mysql50#d-b`.`t2`, CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`a`) REFERENCES `t1` (`a`))
|
||||
DELETE FROM t2;
|
||||
DELETE FROM t1;
|
||||
DROP DATABASE `#mysql50##mysql50#d-b`;
|
||||
USE test;
|
||||
#
|
||||
# MDEV-35962 CREATE INDEX fails to heal a FOREIGN KEY constraint
|
||||
#
|
||||
CREATE TABLE t2 (b INT, FOREIGN KEY (b) REFERENCES t1(a)) ENGINE=InnoDB;
|
||||
ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
CREATE TABLE t2 (b INT, FOREIGN KEY (b) REFERENCES t1(a)) ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`a`))
|
||||
ALTER TABLE t1 ADD KEY(a), ALGORITHM=NOCOPY;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
DROP INDEX b ON t2;
|
||||
ERROR HY000: Cannot drop index 'b': needed in a foreign key constraint
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
DROP INDEX b ON t2;
|
||||
DELETE FROM t2;
|
||||
DELETE FROM t1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`a`))
|
||||
ALTER TABLE t2 ADD KEY(b), ALGORITHM=NOCOPY;
|
||||
DELETE FROM t1;
|
||||
DROP TABLE t2, t1;
|
||||
# End of 10.6 tests
|
||||
CREATE TABLE t1
|
||||
(
|
||||
|
@@ -0,0 +1,57 @@
|
||||
--- foreign_sql_mode.result
|
||||
+++ foreign_sql_mode,COPY,NON-STRICT.rdiff
|
||||
@@ -3,14 +3,14 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, FOREIGN KEY(f1) REFERENCES t1(f2) ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1);
|
||||
UPDATE t1 SET f2= NULL;
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM t2;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
-1 NULL
|
||||
+1 1
|
||||
UPDATE t1 SET f2 = NULL;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
@@ -20,7 +20,7 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY(f1) REFERENCES t1(f1) ON UPDATE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
+ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1, 1);
|
||||
UPDATE t1 SET f1= 2;
|
||||
@@ -32,7 +32,7 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY (f2) REFERENCES t1(f2) ON DELETE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f2 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f2' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
+ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE t2, t1;
|
||||
# modify parent column NULL ON UPDATE CASCADE child column NOT NULL
|
||||
CREATE TABLE `t#1`(f1 INT, f2 INT NOT NULL, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
@@ -40,11 +40,10 @@
|
||||
FOREIGN KEY(f1) REFERENCES `t#1`(f2)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE `t#1` MODIFY COLUMN f2 INT;
|
||||
-ERROR HY000: Cannot change column 'f2': used in a foreign key constraint 't#2_ibfk_1' of table 'test.t#2'
|
||||
INSERT INTO `t#1` VALUES(1, 1);
|
||||
INSERT INTO `t#2` VALUES(1);
|
||||
UPDATE `t#1` SET f2= NULL;
|
||||
-ERROR 23000: Column 'f2' cannot be null
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t#2`, CONSTRAINT `t#2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t#1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM `t#2`;
|
||||
SELECT * FROM `t#1`;
|
||||
f1 f2
|
||||
@@ -60,6 +59,5 @@
|
||||
PRIMARY KEY(f1, f2),
|
||||
FOREIGN KEY(f2, f3) REFERENCES t1(f2, f1)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
-ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t1;
|
@@ -0,0 +1,55 @@
|
||||
--- foreign_sql_mode.result 2025-01-21 17:23:46.014938931 +0530
|
||||
+++ foreign_sql_mode.reject 2025-01-21 17:24:11.783981181 +0530
|
||||
@@ -3,20 +3,20 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, FOREIGN KEY(f1) REFERENCES t1(f2) ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1);
|
||||
UPDATE t1 SET f2= NULL;
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM t2;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
-1 NULL
|
||||
+1 1
|
||||
DROP TABLE t2, t1;
|
||||
# modify child column NOT NULL ON UPDATE SET NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY(f1) REFERENCES t1(f1) ON UPDATE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
+ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1, 1);
|
||||
UPDATE t1 SET f1= 2;
|
||||
@@ -28,7 +28,7 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY (f2) REFERENCES t1(f2) ON DELETE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f2 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f2' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
+ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE t2, t1;
|
||||
# modify parent column NULL ON UPDATE CASCADE child column NOT NULL
|
||||
CREATE TABLE `t#1`(f1 INT, f2 INT NOT NULL, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
@@ -36,11 +36,10 @@
|
||||
FOREIGN KEY(f1) REFERENCES `t#1`(f2)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE `t#1` MODIFY COLUMN f2 INT;
|
||||
-ERROR HY000: Cannot change column 'f2': used in a foreign key constraint 't#2_ibfk_1' of table 'test.t#2'
|
||||
INSERT INTO `t#1` VALUES(1, 1);
|
||||
INSERT INTO `t#2` VALUES(1);
|
||||
UPDATE `t#1` SET f2= NULL;
|
||||
-ERROR 23000: Column 'f2' cannot be null
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t#2`, CONSTRAINT `t#2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t#1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM `t#2`;
|
||||
SELECT * FROM `t#1`;
|
||||
f1 f2
|
||||
@@ -56,6 +55,5 @@
|
||||
PRIMARY KEY(f1, f2),
|
||||
FOREIGN KEY(f2, f3) REFERENCES t1(f2, f1)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
-ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t1;
|
@@ -0,0 +1,39 @@
|
||||
--- foreign_sql_mode.result
|
||||
+++ foreign_sql_mode,INPLACE,NON-STRICT.rdiff
|
||||
@@ -3,14 +3,14 @@
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, FOREIGN KEY(f1) REFERENCES t1(f2) ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
-ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1);
|
||||
UPDATE t1 SET f2= NULL;
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM t2;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
-1 NULL
|
||||
+1 1
|
||||
UPDATE t1 SET f2 = NULL;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
@@ -40,11 +40,10 @@
|
||||
FOREIGN KEY(f1) REFERENCES `t#1`(f2)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE `t#1` MODIFY COLUMN f2 INT;
|
||||
-ERROR HY000: Cannot change column 'f2': used in a foreign key constraint 't#2_ibfk_1' of table 'test.t#2'
|
||||
INSERT INTO `t#1` VALUES(1, 1);
|
||||
INSERT INTO `t#2` VALUES(1);
|
||||
UPDATE `t#1` SET f2= NULL;
|
||||
-ERROR 23000: Column 'f2' cannot be null
|
||||
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t#2`, CONSTRAINT `t#2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t#1` (`f2`) ON UPDATE CASCADE)
|
||||
DELETE FROM `t#2`;
|
||||
SELECT * FROM `t#1`;
|
||||
f1 f2
|
||||
@@ -60,6 +59,5 @@
|
||||
PRIMARY KEY(f1, f2),
|
||||
FOREIGN KEY(f2, f3) REFERENCES t1(f2, f1)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
-ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t1;
|
65
mysql-test/suite/innodb/r/foreign_sql_mode.result
Normal file
65
mysql-test/suite/innodb/r/foreign_sql_mode.result
Normal file
@@ -0,0 +1,65 @@
|
||||
call mtr.add_suppression("InnoDB: In ALTER TABLE .* has or is referenced in foreign key constraints which are not compatible with the new table definition.");
|
||||
# modify child column NOT NULL on UPDATE CASCADE..parent column NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, FOREIGN KEY(f1) REFERENCES t1(f2) ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1);
|
||||
UPDATE t1 SET f2= NULL;
|
||||
DELETE FROM t2;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 NULL
|
||||
UPDATE t1 SET f2 = NULL;
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 NULL
|
||||
DROP TABLE t2, t1;
|
||||
# modify child column NOT NULL ON UPDATE SET NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY(f1) REFERENCES t1(f1) ON UPDATE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL;
|
||||
ERROR HY000: Column 'f1' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1, 1);
|
||||
UPDATE t1 SET f1= 2;
|
||||
SELECT * FROM t2;
|
||||
f1 f2
|
||||
NULL 1
|
||||
DROP TABLE t2, t1;
|
||||
# modify child column NOT NULL ON DELETE SET NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY (f2) REFERENCES t1(f2) ON DELETE SET NULL)ENGINE=InnoDB;
|
||||
ALTER TABLE t2 MODIFY COLUMN f2 INT NOT NULL;
|
||||
ERROR HY000: Column 'f2' cannot be NOT NULL: needed in a foreign key constraint 't2_ibfk_1' SET NULL
|
||||
DROP TABLE t2, t1;
|
||||
# modify parent column NULL ON UPDATE CASCADE child column NOT NULL
|
||||
CREATE TABLE `t#1`(f1 INT, f2 INT NOT NULL, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE `t#2`(f1 INT NOT NULL,
|
||||
FOREIGN KEY(f1) REFERENCES `t#1`(f2)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ALTER TABLE `t#1` MODIFY COLUMN f2 INT;
|
||||
ERROR HY000: Cannot change column 'f2': used in a foreign key constraint 't#2_ibfk_1' of table 'test.t#2'
|
||||
INSERT INTO `t#1` VALUES(1, 1);
|
||||
INSERT INTO `t#2` VALUES(1);
|
||||
UPDATE `t#1` SET f2= NULL;
|
||||
ERROR 23000: Column 'f2' cannot be null
|
||||
DELETE FROM `t#2`;
|
||||
SELECT * FROM `t#1`;
|
||||
f1 f2
|
||||
1 1
|
||||
DROP TABLE `t#2`, `t#1`;
|
||||
CREATE TABLE t1(f1 INT NOT NULL AUTO_INCREMENT,
|
||||
f2 INT DEFAULT NULL,
|
||||
PRIMARY KEY(f1),
|
||||
FOREIGN KEY(f2) REFERENCES t1(f1))ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (f1 INT NOT NULL,
|
||||
f2 INT NOT NULL,
|
||||
f3 INT DEFAULT NULL,
|
||||
PRIMARY KEY(f1, f2),
|
||||
FOREIGN KEY(f2, f3) REFERENCES t1(f2, f1)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t1;
|
@@ -1,15 +1,6 @@
|
||||
DROP TABLE IF EXISTS t1_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.t1_56228'
|
||||
DROP TABLE IF EXISTS t2_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.t2_56228'
|
||||
DROP FUNCTION IF EXISTS bug56228;
|
||||
Warnings:
|
||||
Note 1305 FUNCTION test.bug56228 does not exist
|
||||
CREATE TEMPORARY TABLE t1_56228(
|
||||
CREATE TABLE t1_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TEMPORARY TABLE t2_56228(
|
||||
CREATE TABLE t2_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE FUNCTION bug56228() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
@@ -17,14 +8,18 @@ INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TEMPORARY TABLE t1_56228;
|
||||
DROP TABLE t1_56228;
|
||||
RETURN 42;
|
||||
END //
|
||||
SELECT bug56228();
|
||||
bug56228()
|
||||
42
|
||||
DROP FUNCTION bug56228;
|
||||
DROP TEMPORARY TABLE t2_56228;
|
||||
DROP TEMPORARY TABLE IF EXISTS t1_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.t1_56228'
|
||||
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
|
||||
CREATE PROCEDURE bug56228()
|
||||
BEGIN
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TABLE t1_56228;
|
||||
END //
|
||||
CALL bug56228();
|
||||
DROP PROCEDURE bug56228;
|
||||
DROP TABLE t2_56228;
|
||||
|
@@ -659,6 +659,8 @@ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 15000
|
||||
NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 16000
|
||||
ALTER TABLE testdb_wl5522.t1 ADD INDEX idx1 (col_1);
|
||||
ALTER TABLE testdb_wl5522.t1 ADD INDEX idx6 (col_1(255));
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `idx6`. This is deprecated and will be disallowed in a future release
|
||||
ALTER TABLE testdb_wl5522.t1 ADD INDEX idx10 (col_10(255));
|
||||
SELECT
|
||||
col_1 = REPEAT("col1_00001",10),
|
||||
|
@@ -3338,3 +3338,9 @@ Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 FORCE;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-35723: applying zero offset to null pointer on INSERT
|
||||
#
|
||||
CREATE TABLE t1(c TEXT(1) NOT NULL, INDEX (c)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 SET c='';
|
||||
DROP TABLE t1;
|
||||
|
@@ -0,0 +1,6 @@
|
||||
[old]
|
||||
--innodb-autoinc-lock-mode=0
|
||||
[new]
|
||||
--innodb-autoinc-lock-mode=1
|
||||
[none]
|
||||
--innodb-autoinc-lock-mode=2
|
61
mysql-test/suite/innodb/t/auto_increment_lock_mode.test
Normal file
61
mysql-test/suite/innodb/t/auto_increment_lock_mode.test
Normal file
@@ -0,0 +1,61 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE t1(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t3(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t4(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t5(a TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TABLE t6(a SERIAL, b INT) ENGINE=InnoDB;
|
||||
|
||||
DELIMITER $$;
|
||||
CREATE FUNCTION p1() RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO t1() VALUES();
|
||||
INSERT INTO t2() VALUES();
|
||||
INSERT INTO t3() VALUES();
|
||||
INSERT INTO t4() VALUES();
|
||||
INSERT INTO t5() VALUES();
|
||||
RETURN 1;
|
||||
END$$
|
||||
DELIMITER ;$$
|
||||
|
||||
INSERT INTO t6(b) SELECT p1();
|
||||
|
||||
UPDATE t1,t2,t3,t4,t5 SET t1.a=2,t2.a=2,t3.a=2,t4.a=2,t5.a=2;
|
||||
SELECT * FROM t1;
|
||||
--source include/count_sessions.inc
|
||||
|
||||
--connect(con1,localhost,root,,)
|
||||
let $ID1= `SELECT @id := CONNECTION_ID()`;
|
||||
--connect(con2,localhost,root,,)
|
||||
let $ID2= `SELECT @id := CONNECTION_ID()`;
|
||||
--connect(con3,localhost,root,,)
|
||||
let $ID3= `SELECT @id := CONNECTION_ID()`;
|
||||
--connection con1
|
||||
send INSERT INTO t6(b) SELECT SLEEP(p1());
|
||||
--connection con2
|
||||
send INSERT INTO t6(b) SELECT SLEEP(p1());
|
||||
--connection con3
|
||||
send UPDATE t1,t2,t3,t4,t5 SET t1.a=0,t2.a=0,t3.a=0,t4.a=0,t5.a=0
|
||||
WHERE t1.a=2 AND t2.a=2 AND t3.a=2 AND t4.a=2 AND t5.a=2;
|
||||
--connection default
|
||||
evalp KILL QUERY $ID1;
|
||||
evalp KILL QUERY $ID2;
|
||||
evalp KILL QUERY $ID3;
|
||||
--connection con1
|
||||
--error 0,ER_QUERY_INTERRUPTED,ER_AUTOINC_READ_FAILED
|
||||
--reap
|
||||
--disconnect con1
|
||||
--connection con2
|
||||
--error 0,ER_QUERY_INTERRUPTED,ER_AUTOINC_READ_FAILED
|
||||
--reap
|
||||
--disconnect con2
|
||||
--connection con3
|
||||
--error 0,ER_QUERY_INTERRUPTED,ER_AUTOINC_READ_FAILED
|
||||
--reap
|
||||
--disconnect con3
|
||||
--connection default
|
||||
|
||||
DROP FUNCTION p1;
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||
--source include/wait_until_count_sessions.inc
|
@@ -4,6 +4,7 @@
|
||||
|
||||
--disable_query_log
|
||||
call mtr.add_suppression("InnoDB: Transaction was aborted due to ");
|
||||
call mtr.add_suppression("Invalid \\(old\\?\\) table or database name '#mysql50#d-b'");
|
||||
--enable_query_log
|
||||
|
||||
SET GLOBAL innodb_stats_persistent = 0;
|
||||
@@ -141,9 +142,6 @@ INSERT INTO child SET a=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM parent;
|
||||
ALTER TABLE child ADD INDEX(a);
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM parent;
|
||||
ALTER TABLE child FORCE;
|
||||
DELETE FROM parent;
|
||||
DROP TABLE child,parent;
|
||||
|
||||
@@ -1067,6 +1065,21 @@ alter table t2 add foreign key(a) references t1;
|
||||
show create table t2;
|
||||
drop tables t2, t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-29182 Assertion fld->field_no < table->n_v_def failed on cascade
|
||||
--echo #
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(3), c INT AS (LENGTH(b)) VIRTUAL,
|
||||
INDEX(c)) ENGINE=InnoDB;
|
||||
CREATE TABLE t2(a INT REFERENCES t1(a) ON UPDATE CASCADE,
|
||||
b INT GENERATED ALWAYS AS(a) VIRTUAL, INDEX(b)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 SET a=1,b='fu';
|
||||
INSERT INTO t2 SET a=1;
|
||||
UPDATE t1 SET a=2,b='bar';
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2,t1;
|
||||
|
||||
--echo # End of 10.5 tests
|
||||
|
||||
--echo #
|
||||
@@ -1188,6 +1201,50 @@ CHECK TABLE binaries, collections EXTENDED;
|
||||
# Cleanup
|
||||
DROP TABLE binaries, collections;
|
||||
|
||||
CREATE SCHEMA `#mysql50##mysql50#d-b`;
|
||||
CREATE TABLE `#mysql50##mysql50#d-b`.t1 (a INT PRIMARY KEY, b INT UNIQUE) engine=InnoDB;
|
||||
USE `#mysql50##mysql50#d-b`;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT UNIQUE REFERENCES t1(b)) ENGINE=InnoDB;
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
ALTER TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1(a);
|
||||
SHOW CREATE TABLE t2;
|
||||
INSERT INTO t1 SET a=1;
|
||||
INSERT INTO t2 SET a=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
DELETE FROM t1;
|
||||
DROP DATABASE `#mysql50##mysql50#d-b`;
|
||||
USE test;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-35962 CREATE INDEX fails to heal a FOREIGN KEY constraint
|
||||
--echo #
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t2 (b INT, FOREIGN KEY (b) REFERENCES t1(a)) ENGINE=InnoDB;
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
CREATE TABLE t2 (b INT, FOREIGN KEY (b) REFERENCES t1(a)) ENGINE=InnoDB;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--error ER_NO_REFERENCED_ROW_2
|
||||
INSERT INTO t2 VALUES (1);
|
||||
ALTER TABLE t1 ADD KEY(a), ALGORITHM=NOCOPY;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
--error ER_DROP_INDEX_FK
|
||||
DROP INDEX b ON t2;
|
||||
SET STATEMENT foreign_key_checks=0 FOR
|
||||
DROP INDEX b ON t2;
|
||||
DELETE FROM t2;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1;
|
||||
ALTER TABLE t2 ADD KEY(b), ALGORITHM=NOCOPY;
|
||||
DELETE FROM t1;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
--echo # End of 10.6 tests
|
||||
|
||||
CREATE TABLE t1
|
||||
|
2
mysql-test/suite/innodb/t/foreign_sql_mode.combinations
Normal file
2
mysql-test/suite/innodb/t/foreign_sql_mode.combinations
Normal file
@@ -0,0 +1,2 @@
|
||||
[COPY]
|
||||
[INPLACE]
|
129
mysql-test/suite/innodb/t/foreign_sql_mode.test
Normal file
129
mysql-test/suite/innodb/t/foreign_sql_mode.test
Normal file
@@ -0,0 +1,129 @@
|
||||
--source include/have_innodb.inc
|
||||
--source alter_sql_mode.inc
|
||||
call mtr.add_suppression("InnoDB: In ALTER TABLE .* has or is referenced in foreign key constraints which are not compatible with the new table definition.");
|
||||
|
||||
let $combination=`select regexp_replace('$MTR_COMBINATIONS', 'innodb,\|,innodb', '')`;
|
||||
|
||||
let $copy_algo=`select ((strcmp(substring_index('$combination', ",", 1), "COPY") = 0) or (strcmp(substring_index('$combination', ",", -1), "COPY") = 0))`;
|
||||
|
||||
let $inplace_algo=`select ((strcmp(substring_index('$combination', ",", 1), "INPLACE") = 0) or (strcmp(substring_index('$combination', ",", -1), "INPLACE") = 0))`;
|
||||
|
||||
let $algorithm=COPY;
|
||||
if ($inplace_algo)
|
||||
{
|
||||
let $algorithm=INPLACE;
|
||||
}
|
||||
let $sql_mode = `SELECT @@SQL_MODE`;
|
||||
let $error_code = 0;
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES") {
|
||||
let $error_code = ER_FK_COLUMN_NOT_NULL;
|
||||
}
|
||||
|
||||
--echo # modify child column NOT NULL on UPDATE CASCADE..parent column NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, FOREIGN KEY(f1) REFERENCES t1(f2) ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
replace_result ,ALGORITHM=COPY '' ,ALGORITHM=INPLACE '';
|
||||
--error $error_code
|
||||
eval ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL,ALGORITHM=$algorithm;
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1);
|
||||
|
||||
let $dml_error_code = ER_ROW_IS_REFERENCED_2;
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES")
|
||||
{
|
||||
let $dml_error_code = 0;
|
||||
}
|
||||
|
||||
--error $dml_error_code
|
||||
UPDATE t1 SET f2= NULL;
|
||||
DELETE FROM t2;
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET f2 = NULL;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
let $error_code= ER_ERROR_ON_RENAME;
|
||||
if ($algorithm == "INPLACE")
|
||||
{
|
||||
let $error_code= ER_FK_COLUMN_NOT_NULL;
|
||||
}
|
||||
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES")
|
||||
{
|
||||
let $error_code = ER_FK_COLUMN_NOT_NULL;
|
||||
}
|
||||
|
||||
# Modifying referenced column from NULL to NOT NULL fails when foreign
|
||||
# clause is ON UPDATE SET NULL or ON DELETE SET NULL irrespective
|
||||
# of SQL_MODE variable. This is the behaviour even before MDEV-34392
|
||||
|
||||
--echo # modify child column NOT NULL ON UPDATE SET NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY(f1) REFERENCES t1(f1) ON UPDATE SET NULL)ENGINE=InnoDB;
|
||||
replace_result ,ALGORITHM=COPY '' ,ALGORITHM=INPLACE '';
|
||||
--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/
|
||||
--error $error_code
|
||||
eval ALTER TABLE t2 MODIFY COLUMN f1 INT NOT NULL,ALGORITHM=$algorithm;
|
||||
INSERT INTO t1 VALUES(1, 1);
|
||||
INSERT INTO t2 VALUES(1, 1);
|
||||
UPDATE t1 SET f1= 2;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
--echo # modify child column NOT NULL ON DELETE SET NULL
|
||||
CREATE TABLE t1(f1 INT, f2 INT, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE t2(f1 INT, f2 INT, FOREIGN KEY (f2) REFERENCES t1(f2) ON DELETE SET NULL)ENGINE=InnoDB;
|
||||
replace_result ,ALGORITHM=COPY '' ,ALGORITHM=INPLACE '';
|
||||
--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/
|
||||
--error $error_code
|
||||
eval ALTER TABLE t2 MODIFY COLUMN f2 INT NOT NULL,ALGORITHM=$algorithm;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES")
|
||||
{
|
||||
let $dml_error_code = ER_BAD_NULL_ERROR;
|
||||
}
|
||||
|
||||
let $error_code= 0;
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES")
|
||||
{
|
||||
let $error_code = ER_FK_COLUMN_CANNOT_CHANGE_CHILD;
|
||||
}
|
||||
|
||||
--echo # modify parent column NULL ON UPDATE CASCADE child column NOT NULL
|
||||
CREATE TABLE `t#1`(f1 INT, f2 INT NOT NULL, PRIMARY KEY(f1), KEY(f2))ENGINE=InnoDB;
|
||||
CREATE TABLE `t#2`(f1 INT NOT NULL,
|
||||
FOREIGN KEY(f1) REFERENCES `t#1`(f2)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
replace_result ,ALGORITHM=COPY '' ,ALGORITHM=INPLACE '';
|
||||
--error $error_code
|
||||
eval ALTER TABLE `t#1` MODIFY COLUMN f2 INT,ALGORITHM=$algorithm;
|
||||
INSERT INTO `t#1` VALUES(1, 1);
|
||||
INSERT INTO `t#2` VALUES(1);
|
||||
--error $dml_error_code
|
||||
UPDATE `t#1` SET f2= NULL;
|
||||
DELETE FROM `t#2`;
|
||||
SELECT * FROM `t#1`;
|
||||
DROP TABLE `t#2`, `t#1`;
|
||||
|
||||
let $error_code= 0;
|
||||
if ($sql_mode == "STRICT_TRANS_TABLES")
|
||||
{
|
||||
let $error_code = ER_CANT_CREATE_TABLE;
|
||||
}
|
||||
|
||||
CREATE TABLE t1(f1 INT NOT NULL AUTO_INCREMENT,
|
||||
f2 INT DEFAULT NULL,
|
||||
PRIMARY KEY(f1),
|
||||
FOREIGN KEY(f2) REFERENCES t1(f1))ENGINE=InnoDB;
|
||||
--error $error_code
|
||||
CREATE TABLE t2 (f1 INT NOT NULL,
|
||||
f2 INT NOT NULL,
|
||||
f3 INT DEFAULT NULL,
|
||||
PRIMARY KEY(f1, f2),
|
||||
FOREIGN KEY(f2, f3) REFERENCES t1(f2, f1)
|
||||
ON UPDATE CASCADE)ENGINE=InnoDB;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
@@ -2,33 +2,45 @@
|
||||
##
|
||||
# Bug #56228: dropping tables from within an active statement crashes server
|
||||
#
|
||||
DROP TABLE IF EXISTS t1_56228;
|
||||
DROP TABLE IF EXISTS t2_56228;
|
||||
DROP FUNCTION IF EXISTS bug56228;
|
||||
|
||||
CREATE TEMPORARY TABLE t1_56228(
|
||||
# This test used to use TEMPORARY TABLE, which before MySQL 5.7 or
|
||||
# MariaDB Server 10.2 were covered by InnoDB locks.
|
||||
# In MariaDB Server 10.6, the locking and logging was corrected for Atomic DDL.
|
||||
# Hence, even if we tweaked create_table_info_t::innobase_table_flags()
|
||||
# so that TEMPORARY TABLE are created as persistent tables,
|
||||
# the DROP TEMPORARY TABLE statement inside the function would
|
||||
# fail due to HA_ERR_LOCK_WAIT_TIMEOUT, instead of breaking locks
|
||||
# like it used to do before MDEV-26603 and possibly other changes.
|
||||
CREATE TABLE t1_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TEMPORARY TABLE t2_56228(
|
||||
CREATE TABLE t2_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
DELIMITER //;
|
||||
|
||||
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
|
||||
CREATE FUNCTION bug56228() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TEMPORARY TABLE t1_56228;
|
||||
DROP TABLE t1_56228;
|
||||
RETURN 42;
|
||||
END //
|
||||
|
||||
CREATE PROCEDURE bug56228()
|
||||
BEGIN
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TABLE t1_56228;
|
||||
END //
|
||||
|
||||
DELIMITER ;//
|
||||
|
||||
--disable_ps_protocol
|
||||
SELECT bug56228();
|
||||
--enable_ps2_protocol
|
||||
CALL bug56228();
|
||||
|
||||
DROP FUNCTION bug56228;
|
||||
DROP TEMPORARY TABLE t2_56228;
|
||||
DROP TEMPORARY TABLE IF EXISTS t1_56228;
|
||||
DROP PROCEDURE bug56228;
|
||||
DROP TABLE t2_56228;
|
||||
|
@@ -2609,3 +2609,10 @@ CHECK TABLE t1;
|
||||
ALTER TABLE t1 FORCE;
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-35723: applying zero offset to null pointer on INSERT
|
||||
--echo #
|
||||
CREATE TABLE t1(c TEXT(1) NOT NULL, INDEX (c)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 SET c='';
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user