mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-18923 Assertion `!lex_string_cmp(system_charset_info, fk_info->referenced_table, &table->s->table_name)' failed in fk_truncate_illegal_if_parent
don't assert the correctness of FK constraints, as it can be broken under `SET FOREIGN_KEY_CHECKS= OFF`
This commit is contained in:
@ -66,3 +66,16 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
call mtr.add_suppression('InnoDB: Error: in RENAME TABLE table `test`.`t3`');
|
||||||
|
SET FOREIGN_KEY_CHECKS= OFF;
|
||||||
|
CREATE TABLE t1 (f2 INT, f4 INT, KEY(f2), FOREIGN KEY (f4) REFERENCES t3 (f4)) ENGINE=InnoDB;
|
||||||
|
SET FOREIGN_KEY_CHECKS= ON;
|
||||||
|
CREATE TABLE t2 (f2 INT, FOREIGN KEY(f2) REFERENCES t1 (f2)) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t3 (a INT) ENGINE=InnoDB;
|
||||||
|
ERROR HY000: Can't create table 'test.t3' (errno: 150)
|
||||||
|
ALTER TABLE t1 RENAME TO t3;
|
||||||
|
ERROR HY000: Error on rename of './test/t1' to './test/t3' (errno: 150)
|
||||||
|
ALTER TABLE t1 FORCE;
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
ERROR 42000: Cannot truncate a table referenced in a foreign key constraint (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f2`) REFERENCES `test`.`t3` (`f2`))
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
@ -62,3 +62,19 @@ INSERT INTO t1 VALUES (NULL), (NULL);
|
|||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-18923 Assertion `!lex_string_cmp(system_charset_info, fk_info->referenced_table, &table->s->table_name)' failed in fk_truncate_illegal_if_parent
|
||||||
|
#
|
||||||
|
call mtr.add_suppression('InnoDB: Error: in RENAME TABLE table `test`.`t3`');
|
||||||
|
SET FOREIGN_KEY_CHECKS= OFF;
|
||||||
|
CREATE TABLE t1 (f2 INT, f4 INT, KEY(f2), FOREIGN KEY (f4) REFERENCES t3 (f4)) ENGINE=InnoDB;
|
||||||
|
SET FOREIGN_KEY_CHECKS= ON;
|
||||||
|
CREATE TABLE t2 (f2 INT, FOREIGN KEY(f2) REFERENCES t1 (f2)) ENGINE=InnoDB;
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TABLE t3 (a INT) ENGINE=InnoDB;
|
||||||
|
--error ER_ERROR_ON_RENAME
|
||||||
|
ALTER TABLE t1 RENAME TO t3;
|
||||||
|
ALTER TABLE t1 FORCE;
|
||||||
|
--error ER_TRUNCATE_ILLEGAL_FK
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
DROP TABLE t2, t1;
|
||||||
|
@ -150,15 +150,11 @@ fk_truncate_illegal_if_parent(THD *thd, TABLE *table)
|
|||||||
/* Loop over the set of foreign keys for which this table is a parent. */
|
/* Loop over the set of foreign keys for which this table is a parent. */
|
||||||
while ((fk_info= it++))
|
while ((fk_info= it++))
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(!my_strcasecmp(system_charset_info,
|
if (my_strcasecmp(system_charset_info, fk_info->referenced_db->str,
|
||||||
fk_info->referenced_db->str,
|
table->s->db.str) ||
|
||||||
table->s->db.str));
|
my_strcasecmp(system_charset_info, fk_info->referenced_table->str,
|
||||||
|
table->s->table_name.str) ||
|
||||||
DBUG_ASSERT(!my_strcasecmp(system_charset_info,
|
my_strcasecmp(system_charset_info, fk_info->foreign_db->str,
|
||||||
fk_info->referenced_table->str,
|
|
||||||
table->s->table_name.str));
|
|
||||||
|
|
||||||
if (my_strcasecmp(system_charset_info, fk_info->foreign_db->str,
|
|
||||||
table->s->db.str) ||
|
table->s->db.str) ||
|
||||||
my_strcasecmp(system_charset_info, fk_info->foreign_table->str,
|
my_strcasecmp(system_charset_info, fk_info->foreign_table->str,
|
||||||
table->s->table_name.str))
|
table->s->table_name.str))
|
||||||
|
Reference in New Issue
Block a user