mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge branch '11.4' into 11.7
* rpl.rpl_system_versioning_partitions updated for MDEV-32188 * innodb.row_size_error_log_warnings_3 changed error for MDEV-33658 (checks are done in a different order)
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;
|
198
mysql-test/suite/innodb/r/avoid_deadlock_with_blocked.result
Normal file
198
mysql-test/suite/innodb/r/avoid_deadlock_with_blocked.result
Normal file
@@ -0,0 +1,198 @@
|
||||
connect stop_purge,localhost,root;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
connect con1,localhost,root,,;
|
||||
connect con2,localhost,root,,;
|
||||
connect con3,localhost,root,,;
|
||||
connection default;
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
INSERT INTO t1 (id) VALUES (1);
|
||||
# Simplest scenario:
|
||||
# <con1, S, granted>,
|
||||
# <con1, S, granted>, <con2, X, waiting for con1>,
|
||||
# Before MDEV-34877:
|
||||
# <con1, S, granted>, <con2, X, waiting for con1>, <con1, X, waiting for con1>
|
||||
# After MDEV-34877:
|
||||
# <con1, S, granted>, <con1, X, granted>, <con2, X, waiting for con1>
|
||||
# Expected: instead of deadlocking, the con1's request should ingore con2's
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con2;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
# The scenario when we bypass X<-S pair:
|
||||
# <con1, S, granted>,
|
||||
# <con1, S, granted>, <con2, X, waiting for con1>,
|
||||
# <con1, S, granted>, <con2, X, waiting for con1>, <con3, S, waiting for con2>
|
||||
# <con1, S, granted>, <con1, X, granted>, <con2, X, waiting for con1>, <con3, S, waiting for con2>
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con3;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con2;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con3;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
# A variant of the above scenario:
|
||||
# <con1, X REC_NOT_GAP, granted>,
|
||||
# <con1, X REC_NOT_GAP, granted>, <con2, S, waiting for con1>,
|
||||
# <con1, X REC_NOT_GAP, granted>, <con2, S, waiting for con1>, <con1, INSERT INTENTION, waiting for con1>
|
||||
# Expected: a deadlock, as INSERT INTENTION should not overtake locks on gap, to not slice them
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 FOR UPDATE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_start SIGNAL con2_will_wait';
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
INSERT INTO t1 VALUES (0);
|
||||
ROLLBACK;
|
||||
connection con2;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
COMMIT;
|
||||
# More complicated scenario:
|
||||
# <con1, S, granted>,
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>,
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>, <con1, INSERT_INTENTION, waiting for con3>
|
||||
# <con1, S, granted>, <con3, X, waiting for con1>, <con1, INSERT_INTENTION, waiting for con3>
|
||||
# Expected: a deadlock, as INSERT INTENTION should not overtake locks on gap, to not slice them
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con3;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_start SIGNAL con1_will_wait';
|
||||
INSERT INTO t1 VALUES (0);
|
||||
connection con2;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con1_will_wait';
|
||||
COMMIT;
|
||||
connection con1;
|
||||
ROLLBACK;
|
||||
connection con3;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
# More complicated scenario.
|
||||
# <con1, S, granted>,
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>,
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
# <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>, <con1, X REC_NOT_GAP, waiting for con2>
|
||||
# Before MDEV-34877:
|
||||
# <con1, S, granted>, <con3, X, waiting for con1>, <con1, X REC_NOT_GAP, waiting for con3>
|
||||
# After MDEV-34877:
|
||||
# <con1, S, granted>, <con1, X REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection default;
|
||||
connection con3;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con1_will_wait';
|
||||
SELECT * FROM t1 WHERE id=1 FOR UPDATE;
|
||||
connection con2;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con1_will_wait';
|
||||
COMMIT;
|
||||
connection con1;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con3;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
# A secenario, where con1 has to bypass two transactions:
|
||||
# <con1, S, granted>
|
||||
# <con1, S, granted> <con2, X, waiting>
|
||||
# <con1, S, granted> <con2, X, waiting> <con3, X, waiting>
|
||||
# Before MDEV-34877:
|
||||
# <con1, S, granted> <con2, X, waiting> <con3, X, waiting> <con1, X REC_NOT_GAP, waiting for con2>
|
||||
# After MDEV-34877:
|
||||
# <con1, S, granted> <con1, X REC_NOT_GAP, granted> <con2, X, waiting> <con3, X, waiting>
|
||||
connection con1;
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
id
|
||||
1
|
||||
connection con2;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con3;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SELECT * FROM t1 WHERE id=1 FOR UPDATE;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con2;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection con3;
|
||||
id
|
||||
1
|
||||
COMMIT;
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
disconnect stop_purge;
|
||||
DROP TABLE t1;
|
50
mysql-test/suite/innodb/r/bulk_load.result
Normal file
50
mysql-test/suite/innodb/r/bulk_load.result
Normal file
@@ -0,0 +1,50 @@
|
||||
CREATE TABLE t1(f1 INT NOT NULL,f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
INSERT INTO t1 SELECT seq, seq from seq_1_to_131072;
|
||||
INSERT INTO t1 VALUES(131073, 131073), (131074, 131073);
|
||||
SELECT * INTO OUTFILE "VARDIR/tmp/t1.outfile" FROM t1;
|
||||
# successful load statement using bulk insert
|
||||
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
|
||||
f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
SET unique_checks=0, foreign_key_checks=0;
|
||||
LOAD DATA INFILE 'VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
131074
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 check status OK
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2(f1 INT NOT NULL, PRIMARY KEY(f1 DESC),
|
||||
f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
LOAD DATA INFILE 'VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
131074
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 check status OK
|
||||
DROP TABLE t2;
|
||||
# load statement using bulk insert fails during secondary index
|
||||
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
|
||||
f2 INT NOT NULL UNIQUE KEY)ENGINE=InnoDB;
|
||||
LOAD DATA INFILE 'VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 check status OK
|
||||
DROP TABLE t2;
|
||||
# load statement using bulk insert fails during primary index
|
||||
CREATE TABLE t2(f1 INT NOT NULL,
|
||||
f2 INT NOT NULL PRIMARY KEY)ENGINE=InnoDB;
|
||||
LOAD DATA INFILE 'VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
ERROR 23000: Duplicate entry '131073' for key 'PRIMARY'
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 check status OK
|
||||
DROP TABLE t2, t1;
|
@@ -3,7 +3,6 @@ connection default;
|
||||
CREATE TABLE t1 ENGINE=InnoDB SELECT * FROM seq_1_to_100000000;
|
||||
connection con1;
|
||||
KILL QUERY @id;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB;
|
||||
@@ -18,3 +17,26 @@ execute stmt;
|
||||
execute stmt;
|
||||
drop table t;
|
||||
# End of 10.5 tests
|
||||
#
|
||||
# MDEV-35647 Possible hang during CREATE TABLE…SELECT error handling
|
||||
#
|
||||
call mtr.add_suppression("InnoDB: DROP TABLE `test`\\.`t4`: Record changed");
|
||||
SET @save_debug= @@GLOBAL.innodb_evict_tables_on_commit_debug;
|
||||
SET GLOBAL innodb_evict_tables_on_commit_debug=on;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
SET GLOBAL innodb_evict_tables_on_commit_debug=@save_debug;
|
||||
connection con1;
|
||||
CREATE TABLE t2 (b BLOB) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),('2025-01-21 00:00:00');
|
||||
SET STATEMENT innodb_snapshot_isolation=ON FOR
|
||||
CREATE TABLE t3 ENGINE=InnoDB AS SELECT * FROM t1;
|
||||
connection default;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SET STATEMENT innodb_snapshot_isolation=ON FOR
|
||||
CREATE TABLE t4 (b BLOB CHECK (b)) ENGINE=InnoDB AS SELECT b FROM t2;
|
||||
ERROR 22007: Truncated incorrect DOUBLE value: '2025-01-21 00:00:00'
|
||||
connection con1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP TABLE t3,t2,t1;
|
||||
# End of 10.6 tests
|
||||
|
@@ -243,3 +243,25 @@ Level Code Message
|
||||
Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=COMPRESSED
|
||||
Error 1005 Can't create table `test`.`t1` (errno: 140 "Wrong create options")
|
||||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
|
||||
# End of 10.5 tests
|
||||
#
|
||||
# MDEV-35598 foreign key error is unnecessary truncated
|
||||
#
|
||||
set names utf8;
|
||||
create table t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null primary key,
|
||||
f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null
|
||||
) engine=innodb;
|
||||
create table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш varchar(100),
|
||||
f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null,
|
||||
index i2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш)
|
||||
) engine=innodb;
|
||||
insert t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш values(99, 2);
|
||||
alter table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш add foreign key(f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш) references t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш);
|
||||
insert t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш values('g', 3);
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш`, CONSTRAINT `t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш_ibfk_1` FOREIGN KEY (`f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш`) REFERENCES `t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш` (`f1яяяяяяяяяяььььььььььззззз
|
||||
drop table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш,
|
||||
t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш;
|
||||
# End of 10.6 tests
|
||||
|
@@ -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';
|
||||
@@ -1027,6 +1024,23 @@ t2 CREATE TABLE `t2` (
|
||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t1` (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_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
|
||||
@@ -1122,6 +1136,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=utf8mb4 COLLATE=utf8mb4_uca1400_ai_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;
|
67
mysql-test/suite/innodb/r/import_cfg.result
Normal file
67
mysql-test/suite/innodb/r/import_cfg.result
Normal file
@@ -0,0 +1,67 @@
|
||||
#
|
||||
# MDEV-35169 ALTER TABLE...IMPORT TABLESPACE does not
|
||||
# work with INDEX DESC
|
||||
#
|
||||
# prepare cfg for primary key with desc column
|
||||
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
# prepare cfg for secondary index with desc column
|
||||
create table t1 (pk int primary key, a int,key(a desc)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
# prepare cfg for secondary index with ascending column
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
# Import desc tablespace into desc frm
|
||||
# Import into table with desc primary key column
|
||||
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
# Import into table with desc secondary index
|
||||
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
# Import asc tablespace into desc frm
|
||||
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
alter table t1 import tablespace;
|
||||
ERROR HY000: Schema mismatch (Index a field a is DESC which does not match with .cfg file)
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check Error Tablespace has been discarded for table `t1`
|
||||
test.t1 check error Corrupt
|
||||
drop table t1;
|
||||
# Import desc tablespace into asc frm
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
alter table t1 import tablespace;
|
||||
ERROR HY000: Schema mismatch (Index a field a is ASC which does not match with .cfg file)
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check Error Tablespace has been discarded for table `t1`
|
||||
test.t1 check error Corrupt
|
||||
drop table t1;
|
||||
# Import asc tablespace into asc frm
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table 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),
|
||||
|
@@ -153,16 +153,6 @@ SET SESSION debug_dbug=@saved_debug_dbug;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
|
||||
FLUSH TABLES t1 FOR EXPORT;
|
||||
Warnings:
|
||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
|
||||
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
|
||||
UNLOCK TABLES;
|
||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_10";
|
||||
FLUSH TABLES t1 FOR EXPORT;
|
||||
Warnings:
|
||||
|
@@ -3353,4 +3353,10 @@ 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;
|
||||
ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
|
||||
|
Binary file not shown.
@@ -25,8 +25,14 @@ SET GLOBAL innodb_log_file_buffering=ON;
|
||||
SET GLOBAL innodb_log_file_buffering=@save;
|
||||
SET GLOBAL innodb_log_file_mmap=OFF;
|
||||
Got one of the listed errors
|
||||
SET GLOBAL innodb_log_file_size=5242880;
|
||||
connect con1,localhost,root;
|
||||
SET GLOBAL innodb_log_file_size=7340032;
|
||||
connection default;
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
connection default;
|
||||
SET GLOBAL innodb_log_file_size=5242880;
|
||||
connection con1;
|
||||
UPDATE t SET b='' WHERE a<10;
|
||||
connection default;
|
||||
SHOW VARIABLES LIKE 'innodb_log_file_size';
|
||||
|
@@ -1,2 +1,17 @@
|
||||
91a92
|
||||
> ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||
--- a/mysql-test/suite/innodb/r/row_size_error_log_warnings_3.result
|
||||
+++ b/mysql-test/suite/innodb/r/row_size_error_log_warnings_3.result
|
||||
@@ -81,7 +81,7 @@ f25(10), f26(10), f27(10), f28(10),
|
||||
f29(10), f30(10), f31(10), f32(10),
|
||||
f33(10)))
|
||||
ENGINE=InnoDB;
|
||||
-ERROR 42000: Too many key parts specified; max 32 parts allowed
|
||||
+ERROR 42000: Specified key was too long; max key length is 1173 bytes
|
||||
#
|
||||
# MDEV-31161 Assertion failures upon adding a too long key
|
||||
# to table with COMPRESSED row format
|
||||
@@ -89,4 +89,5 @@ ERROR 42000: Too many key parts specified; max 32 parts allowed
|
||||
CREATE TABLE t1(pk INT PRIMARY KEY, f1 INT, f2 TEXT)ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
||||
INSERT INTO t1 (pk) VALUES (1);
|
||||
ALTER TABLE t1 ADD KEY (f1), ADD KEY (f2(1000));
|
||||
+ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||
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
|
228
mysql-test/suite/innodb/t/avoid_deadlock_with_blocked.test
Normal file
228
mysql-test/suite/innodb/t/avoid_deadlock_with_blocked.test
Normal file
@@ -0,0 +1,228 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
--disable_query_log
|
||||
call mtr.add_suppression("InnoDB: Transaction was aborted due to ");
|
||||
--enable_query_log
|
||||
|
||||
connect stop_purge,localhost,root;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
|
||||
--connect (con1,localhost,root,,)
|
||||
--connect (con2,localhost,root,,)
|
||||
--connect (con3,localhost,root,,)
|
||||
|
||||
--connection default
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
INSERT INTO t1 (id) VALUES (1);
|
||||
|
||||
--echo # Simplest scenario:
|
||||
--echo # <con1, S, granted>,
|
||||
--echo # <con1, S, granted>, <con2, X, waiting for con1>,
|
||||
--echo # Before MDEV-34877:
|
||||
--echo # <con1, S, granted>, <con2, X, waiting for con1>, <con1, X, waiting for con1>
|
||||
--echo # After MDEV-34877:
|
||||
--echo # <con1, S, granted>, <con1, X, granted>, <con2, X, waiting for con1>
|
||||
--echo # Expected: instead of deadlocking, the con1's request should ingore con2's
|
||||
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con2
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
COMMIT;
|
||||
|
||||
--connection con2
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--echo # The scenario when we bypass X<-S pair:
|
||||
--echo # <con1, S, granted>,
|
||||
--echo # <con1, S, granted>, <con2, X, waiting for con1>,
|
||||
--echo # <con1, S, granted>, <con2, X, waiting for con1>, <con3, S, waiting for con2>
|
||||
--echo # <con1, S, granted>, <con1, X, granted>, <con2, X, waiting for con1>, <con3, S, waiting for con2>
|
||||
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con2
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con3
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
--send SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
COMMIT;
|
||||
|
||||
--connection con2
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--connection con3
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
#
|
||||
--echo # A variant of the above scenario:
|
||||
--echo # <con1, X REC_NOT_GAP, granted>,
|
||||
--echo # <con1, X REC_NOT_GAP, granted>, <con2, S, waiting for con1>,
|
||||
--echo # <con1, X REC_NOT_GAP, granted>, <con2, S, waiting for con1>, <con1, INSERT INTENTION, waiting for con1>
|
||||
--echo # Expected: a deadlock, as INSERT INTENTION should not overtake locks on gap, to not slice them
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 FOR UPDATE;
|
||||
|
||||
--connection con2
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC = 'lock_wait_start SIGNAL con2_will_wait';
|
||||
--send SELECT * FROM t1 LOCK IN SHARE MODE
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
INSERT INTO t1 VALUES (0);
|
||||
ROLLBACK;
|
||||
|
||||
--connection con2
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--echo # More complicated scenario:
|
||||
--echo # <con1, S, granted>,
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>,
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>, <con1, INSERT_INTENTION, waiting for con3>
|
||||
--echo # <con1, S, granted>, <con3, X, waiting for con1>, <con1, INSERT_INTENTION, waiting for con3>
|
||||
--echo # Expected: a deadlock, as INSERT INTENTION should not overtake locks on gap, to not slice them
|
||||
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con2
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con3
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_start SIGNAL con1_will_wait';
|
||||
--send INSERT INTO t1 VALUES (0)
|
||||
|
||||
--connection con2
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con1_will_wait';
|
||||
COMMIT;
|
||||
|
||||
--connection con1
|
||||
--reap
|
||||
ROLLBACK;
|
||||
|
||||
--connection con3
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
--echo # More complicated scenario.
|
||||
--echo # <con1, S, granted>,
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>,
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
--echo # <con1, S, granted>, <con2, S REC_NOT_GAP, granted>, <con3, X, waiting for con1>, <con1, X REC_NOT_GAP, waiting for con2>
|
||||
--echo # Before MDEV-34877:
|
||||
--echo # <con1, S, granted>, <con3, X, waiting for con1>, <con1, X REC_NOT_GAP, waiting for con3>
|
||||
--echo # After MDEV-34877:
|
||||
--echo # <con1, S, granted>, <con1, X REC_NOT_GAP, granted>, <con3, X, waiting for con1>
|
||||
|
||||
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con2
|
||||
BEGIN;
|
||||
SELECT * FROM t1 WHERE id=1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection default
|
||||
|
||||
--connection con3
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con1_will_wait';
|
||||
--send SELECT * FROM t1 WHERE id=1 FOR UPDATE
|
||||
|
||||
--connection con2
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con1_will_wait';
|
||||
COMMIT;
|
||||
|
||||
--connection con1
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--connection con3
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--echo # A secenario, where con1 has to bypass two transactions:
|
||||
--echo # <con1, S, granted>
|
||||
--echo # <con1, S, granted> <con2, X, waiting>
|
||||
--echo # <con1, S, granted> <con2, X, waiting> <con3, X, waiting>
|
||||
--echo # Before MDEV-34877:
|
||||
--echo # <con1, S, granted> <con2, X, waiting> <con3, X, waiting> <con1, X REC_NOT_GAP, waiting for con2>
|
||||
--echo # After MDEV-34877:
|
||||
--echo # <con1, S, granted> <con1, X REC_NOT_GAP, granted> <con2, X, waiting> <con3, X, waiting>
|
||||
--connection con1
|
||||
BEGIN;
|
||||
SELECT * FROM t1 LOCK IN SHARE MODE;
|
||||
|
||||
--connection con2
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con2_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con3
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con2_will_wait';
|
||||
SET DEBUG_SYNC = 'lock_wait_before_suspend SIGNAL con3_will_wait';
|
||||
--send SELECT * FROM t1 FOR UPDATE
|
||||
|
||||
--connection con1
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR con3_will_wait';
|
||||
SELECT * FROM t1 WHERE id=1 FOR UPDATE;
|
||||
COMMIT;
|
||||
|
||||
--connection con2
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--connection con3
|
||||
--reap
|
||||
COMMIT;
|
||||
|
||||
--connection default
|
||||
--disconnect con1
|
||||
--disconnect con2
|
||||
--disconnect con3
|
||||
--disconnect stop_purge
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
1
mysql-test/suite/innodb/t/bulk_load.opt
Normal file
1
mysql-test/suite/innodb/t/bulk_load.opt
Normal file
@@ -0,0 +1 @@
|
||||
--innodb_sort_buffer_size=65536
|
52
mysql-test/suite/innodb/t/bulk_load.test
Normal file
52
mysql-test/suite/innodb/t/bulk_load.test
Normal file
@@ -0,0 +1,52 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_sequence.inc
|
||||
--source include/big_test.inc
|
||||
|
||||
CREATE TABLE t1(f1 INT NOT NULL,f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
INSERT INTO t1 SELECT seq, seq from seq_1_to_131072;
|
||||
INSERT INTO t1 VALUES(131073, 131073), (131074, 131073);
|
||||
--replace_result $MYSQLTEST_VARDIR VARDIR
|
||||
--disable_cursor_protocol
|
||||
--disable_ps2_protocol
|
||||
eval SELECT * INTO OUTFILE "$MYSQLTEST_VARDIR/tmp/t1.outfile" FROM t1;
|
||||
--enable_ps2_protocol
|
||||
--enable_cursor_protocol
|
||||
|
||||
--echo # successful load statement using bulk insert
|
||||
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
|
||||
f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
SET unique_checks=0, foreign_key_checks=0;
|
||||
--replace_result $MYSQLTEST_VARDIR VARDIR
|
||||
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2(f1 INT NOT NULL, PRIMARY KEY(f1 DESC),
|
||||
f2 INT NOT NULL)ENGINE=InnoDB;
|
||||
--replace_result $MYSQLTEST_VARDIR VARDIR
|
||||
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # load statement using bulk insert fails during secondary index
|
||||
CREATE TABLE t2(f1 INT NOT NULL PRIMARY KEY,
|
||||
f2 INT NOT NULL UNIQUE KEY)ENGINE=InnoDB;
|
||||
--replace_result $MYSQLTEST_VARDIR VARDIR
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # load statement using bulk insert fails during primary index
|
||||
CREATE TABLE t2(f1 INT NOT NULL,
|
||||
f2 INT NOT NULL PRIMARY KEY)ENGINE=InnoDB;
|
||||
--replace_result $MYSQLTEST_VARDIR VARDIR
|
||||
--error ER_DUP_ENTRY
|
||||
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.outfile' INTO TABLE t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
CHECK TABLE t2 EXTENDED;
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.outfile
|
||||
DROP TABLE t2, t1;
|
@@ -1,6 +1,7 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_sequence.inc
|
||||
--source include/count_sessions.inc
|
||||
--source include/maybe_debug.inc
|
||||
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
|
||||
@@ -17,7 +18,6 @@ let $wait_condition=
|
||||
and info = 'CREATE TABLE t1 ENGINE=InnoDB SELECT * FROM seq_1_to_100000000';
|
||||
--source include/wait_condition.inc
|
||||
KILL QUERY @id;
|
||||
disconnect con1;
|
||||
|
||||
connection default;
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
@@ -25,7 +25,6 @@ reap;
|
||||
|
||||
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB;
|
||||
DROP TABLE t1;
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
--echo # End of 10.2 tests
|
||||
|
||||
@@ -39,3 +38,38 @@ execute stmt;
|
||||
drop table t;
|
||||
|
||||
--echo # End of 10.5 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-35647 Possible hang during CREATE TABLE…SELECT error handling
|
||||
--echo #
|
||||
call mtr.add_suppression("InnoDB: DROP TABLE `test`\\.`t4`: Record changed");
|
||||
|
||||
--error 0,ER_UNKNOWN_SYSTEM_VARIABLE
|
||||
SET @save_debug= @@GLOBAL.innodb_evict_tables_on_commit_debug;
|
||||
--error 0,ER_UNKNOWN_SYSTEM_VARIABLE
|
||||
SET GLOBAL innodb_evict_tables_on_commit_debug=on;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
--error 0,ER_UNKNOWN_SYSTEM_VARIABLE
|
||||
SET GLOBAL innodb_evict_tables_on_commit_debug=@save_debug;
|
||||
|
||||
connection con1;
|
||||
CREATE TABLE t2 (b BLOB) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),('2025-01-21 00:00:00');
|
||||
--send
|
||||
SET STATEMENT innodb_snapshot_isolation=ON FOR
|
||||
CREATE TABLE t3 ENGINE=InnoDB AS SELECT * FROM t1;
|
||||
|
||||
connection default;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
SET STATEMENT innodb_snapshot_isolation=ON FOR
|
||||
CREATE TABLE t4 (b BLOB CHECK (b)) ENGINE=InnoDB AS SELECT b FROM t2;
|
||||
connection con1;
|
||||
reap;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP TABLE t3,t2,t1;
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
--echo # End of 10.6 tests
|
||||
|
@@ -272,3 +272,30 @@ SET FOREIGN_KEY_CHECKS=DEFAULT;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1(a SERIAL) ENGINE=InnoDB ROW_FORMAT=COMPRESSED PAGE_COMPRESSED=1;
|
||||
SHOW WARNINGS;
|
||||
|
||||
--echo # End of 10.5 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-35598 foreign key error is unnecessary truncated
|
||||
--echo #
|
||||
set names utf8;
|
||||
create table t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null primary key,
|
||||
f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null
|
||||
) engine=innodb;
|
||||
create table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш varchar(100),
|
||||
f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш int not null,
|
||||
index i2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш
|
||||
(f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш)
|
||||
) engine=innodb;
|
||||
|
||||
insert t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш values(99, 2);
|
||||
alter table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш add foreign key(f2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш) references t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш(f1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш);
|
||||
|
||||
--error ER_NO_REFERENCED_ROW_2
|
||||
insert t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш values('g', 3);
|
||||
drop table t2яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш,
|
||||
t1яяяяяяяяяяььььььььььззззззззззшшшшшшшшшш;
|
||||
|
||||
--echo # End of 10.6 tests
|
||||
|
@@ -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;
|
85
mysql-test/suite/innodb/t/import_cfg.test
Normal file
85
mysql-test/suite/innodb/t/import_cfg.test
Normal file
@@ -0,0 +1,85 @@
|
||||
--source include/have_innodb.inc
|
||||
--let $datadir= `select @@datadir`
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-35169 ALTER TABLE...IMPORT TABLESPACE does not
|
||||
--echo # work with INDEX DESC
|
||||
--echo #
|
||||
|
||||
--echo # prepare cfg for primary key with desc column
|
||||
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
--copy_file $datadir/test/t1.ibd $datadir/test/t1_pk.ibd.desc
|
||||
--copy_file $datadir/test/t1.cfg $datadir/test/t1_pk.cfg.desc
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
|
||||
--echo # prepare cfg for secondary index with desc column
|
||||
create table t1 (pk int primary key, a int,key(a desc)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
--copy_file $datadir/test/t1.ibd $datadir/test/t1.ibd.desc
|
||||
--copy_file $datadir/test/t1.cfg $datadir/test/t1.cfg.desc
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
|
||||
--echo # prepare cfg for secondary index with ascending column
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
insert into t1 values (1,10),(2,20),(3,15);
|
||||
flush table t1 for export;
|
||||
--copy_file $datadir/test/t1.ibd $datadir/test/t1.ibd.asc
|
||||
--copy_file $datadir/test/t1.cfg $datadir/test/t1.cfg.asc
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
|
||||
--echo # Import desc tablespace into desc frm
|
||||
|
||||
--echo # Import into table with desc primary key column
|
||||
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
--copy_file $datadir/test/t1_pk.ibd.desc $datadir/test/t1.ibd
|
||||
--copy_file $datadir/test/t1_pk.cfg.desc $datadir/test/t1.cfg
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--echo # Import into table with desc secondary index
|
||||
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
--copy_file $datadir/test/t1.ibd.desc $datadir/test/t1.ibd
|
||||
--copy_file $datadir/test/t1.cfg.desc $datadir/test/t1.cfg
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--echo # Import asc tablespace into desc frm
|
||||
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
--copy_file $datadir/test/t1.ibd.asc $datadir/test/t1.ibd
|
||||
--copy_file $datadir/test/t1.cfg.asc $datadir/test/t1.cfg
|
||||
--error ER_TABLE_SCHEMA_MISMATCH
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--echo # Import desc tablespace into asc frm
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
--copy_file $datadir/test/t1.ibd.desc $datadir/test/t1.ibd
|
||||
--copy_file $datadir/test/t1.cfg.desc $datadir/test/t1.cfg
|
||||
--error ER_TABLE_SCHEMA_MISMATCH
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--echo # Import asc tablespace into asc frm
|
||||
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
|
||||
alter table t1 discard tablespace;
|
||||
--copy_file $datadir/test/t1.ibd.asc $datadir/test/t1.ibd
|
||||
--copy_file $datadir/test/t1.cfg.asc $datadir/test/t1.cfg
|
||||
alter table t1 import tablespace;
|
||||
check table t1 extended;
|
||||
drop table t1;
|
||||
|
||||
--remove_files_wildcard $datadir/test t1*sc
|
@@ -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;
|
||||
|
@@ -272,22 +272,6 @@ SET SESSION debug_dbug=@saved_debug_dbug;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
|
||||
|
||||
--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/
|
||||
|
||||
FLUSH TABLES t1 FOR EXPORT;
|
||||
|
||||
UNLOCK TABLES;
|
||||
|
||||
SET SESSION debug_dbug=@saved_debug_dbug;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
|
@@ -2618,4 +2618,11 @@ 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;
|
||||
|
||||
--source include/test_db_charset_restore.inc
|
||||
|
@@ -12,15 +12,8 @@
|
||||
# get NULL
|
||||
-- source include/not_encrypted.inc
|
||||
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
|
||||
SET default_storage_engine=InnoDB;
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t_min, t_max;
|
||||
-- enable_warnings
|
||||
|
||||
let $table_def =
|
||||
(
|
||||
c01 TINYINT,
|
||||
@@ -118,7 +111,6 @@ SELECT * FROM ```t'\"_str` WHERE c1 = '3' FOR UPDATE;
|
||||
-- send
|
||||
SELECT * FROM ```t'\"_str` WHERE c1 = '4' FOR UPDATE;
|
||||
|
||||
-- enable_result_log
|
||||
-- connection con_verify_innodb_locks
|
||||
# Wait for the above queries to execute before continuing.
|
||||
# Without this, it sometimes happens that the SELECT from innodb_locks
|
||||
@@ -161,7 +153,6 @@ SET SQL_MODE='ANSI_QUOTES';
|
||||
SELECT lock_table,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
|
||||
GROUP BY lock_table;
|
||||
SET @@sql_mode=@save_sql_mode;
|
||||
-- disable_result_log
|
||||
|
||||
-- connection default
|
||||
|
||||
@@ -184,9 +175,7 @@ DROP TABLE t_min, t_max, ```t'\"_str`;
|
||||
# INFORMATION_SCHEMA.INNODB_TRX
|
||||
#
|
||||
|
||||
-- enable_result_log
|
||||
DESCRIBE INFORMATION_SCHEMA.INNODB_TRX;
|
||||
-- disable_result_log
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
@@ -222,17 +211,14 @@ SELECT * FROM t1 FOR UPDATE;
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
--source include/wait_condition.inc
|
||||
-- disable_query_log
|
||||
|
||||
-- connection con_verify_innodb_trx
|
||||
-- enable_result_log
|
||||
SELECT trx_state, trx_weight, trx_tables_in_use, trx_tables_locked,
|
||||
trx_rows_locked, trx_rows_modified, trx_concurrency_tickets,
|
||||
trx_isolation_level, trx_unique_checks, trx_foreign_key_checks
|
||||
FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
|
||||
-- connection con_trx
|
||||
-- disable_result_log
|
||||
ROLLBACK;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
SET UNIQUE_CHECKS = 0;
|
||||
@@ -243,14 +229,11 @@ INSERT INTO t1 VALUES (6,12);
|
||||
let $wait_condition=
|
||||
SELECT trx_unique_checks = 0 FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
--source include/wait_condition.inc
|
||||
-- disable_query_log
|
||||
|
||||
-- connection con_verify_innodb_trx
|
||||
-- enable_result_log
|
||||
SELECT trx_isolation_level, trx_unique_checks, trx_foreign_key_checks
|
||||
FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
|
||||
-- disable_result_log
|
||||
-- connection con_trx
|
||||
ROLLBACK;
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -262,13 +245,10 @@ INSERT INTO t2 VALUES (4,10);
|
||||
let $wait_condition=
|
||||
SELECT trx_unique_checks = 1 FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
--source include/wait_condition.inc
|
||||
-- disable_query_log
|
||||
|
||||
-- enable_result_log
|
||||
-- connection con_verify_innodb_trx
|
||||
SELECT trx_state, trx_isolation_level, trx_last_foreign_key_error
|
||||
FROM INFORMATION_SCHEMA.INNODB_TRX;
|
||||
-- disable_result_log
|
||||
|
||||
-- connection default
|
||||
|
||||
|
@@ -36,9 +36,19 @@ SET GLOBAL innodb_log_file_buffering=@save;
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR,ER_UNKNOWN_SYSTEM_VARIABLE
|
||||
SET GLOBAL innodb_log_file_mmap=OFF;
|
||||
|
||||
--connect con1,localhost,root
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
send SET GLOBAL innodb_log_file_size=7340032;
|
||||
--connection default
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
KILL QUERY @id;
|
||||
--connection con1
|
||||
reap;
|
||||
|
||||
--connection default
|
||||
send SET GLOBAL innodb_log_file_size=5242880;
|
||||
|
||||
--connect con1,localhost,root
|
||||
--connection con1
|
||||
send UPDATE t SET b='' WHERE a<10;
|
||||
|
||||
--connection default
|
||||
|
@@ -63,7 +63,7 @@ set global innodb_compression_level=default;
|
||||
|
||||
# Maximum field in the index
|
||||
|
||||
--error ER_TOO_MANY_KEY_PARTS
|
||||
--disable_abort_on_error
|
||||
CREATE TABLE t1(f1 char(200), f2 char(200), f3 char(200),
|
||||
f4 char(200), f5 char(200), f6 char(200),
|
||||
f7 char(200), f8 char(200), f9 char(200),
|
||||
@@ -85,19 +85,15 @@ CREATE TABLE t1(f1 char(200), f2 char(200), f3 char(200),
|
||||
f29(10), f30(10), f31(10), f32(10),
|
||||
f33(10)))
|
||||
ENGINE=InnoDB;
|
||||
--enable_abort_on_error
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-31161 Assertion failures upon adding a too long key
|
||||
--echo # to table with COMPRESSED row format
|
||||
--echo #
|
||||
--let $page_size= `SELECT @@GLOBAL.innodb_page_size`
|
||||
CREATE TABLE t1(pk INT PRIMARY KEY, f1 INT, f2 TEXT)ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
||||
INSERT INTO t1 (pk) VALUES (1);
|
||||
let $error_code = 0;
|
||||
if ($page_size == 4096) {
|
||||
let $error_code = ER_TOO_BIG_ROWSIZE;
|
||||
}
|
||||
|
||||
--error $error_code
|
||||
--disable_abort_on_error
|
||||
ALTER TABLE t1 ADD KEY (f1), ADD KEY (f2(1000));
|
||||
--enable_abort_on_error
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user