From c478b1ba0843d9efeb38e40e4ef83d8df1afb68e Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 10 Dec 2024 00:11:41 +0100 Subject: [PATCH] MDEV-35598 foreign key error is unnecessary truncated truncate it at 512 bytes (max allowed by the protocol), not 192 --- mysql-test/suite/innodb/r/foreign-keys.result | 22 +++++++++++++++ mysql-test/suite/innodb/t/foreign-keys.test | 27 +++++++++++++++++++ sql/share/errmsg-utf8.txt | 16 +++++------ storage/innobase/trx/trx0trx.cc | 2 +- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/mysql-test/suite/innodb/r/foreign-keys.result b/mysql-test/suite/innodb/r/foreign-keys.result index f7f87bd7898..8ed32cae3e7 100644 --- a/mysql-test/suite/innodb/r/foreign-keys.result +++ b/mysql-test/suite/innodb/r/foreign-keys.result @@ -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 diff --git a/mysql-test/suite/innodb/t/foreign-keys.test b/mysql-test/suite/innodb/t/foreign-keys.test index aeff7009402..6010ff0e3fc 100644 --- a/mysql-test/suite/innodb/t/foreign-keys.test +++ b/mysql-test/suite/innodb/t/foreign-keys.test @@ -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 diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index fd1c2bc47ec..f0273c6cb7a 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -6318,15 +6318,15 @@ ER_FORBID_SCHEMA_CHANGE ger "Wechsel des Schemas von '%-.192s' auf '%-.192s' ist nicht erlaubt" spa "Vd no está autorizado a cambiar el esquema de '%-.192s' a '%-.192s'" ER_ROW_IS_REFERENCED_2 23000 - chi "无法删除或更新父行:外键约束失败(%.192s)" - eng "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)" - ger "Kann Eltern-Zeile nicht löschen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%.192s)" - spa "No puedo borrar o actualizar una fila padre: falla una restricción de clave foránea (%.192s)" + chi "无法删除或更新父行:外键约束失败(%s)" + eng "Cannot delete or update a parent row: a foreign key constraint fails (%s)" + ger "Kann Eltern-Zeile nicht löschen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%s)" + spa "No puedo borrar o actualizar una fila padre: falla una restricción de clave foránea (%s)" ER_NO_REFERENCED_ROW_2 23000 - chi "无法添加或更新子行:外键约束失败(%.192s)" - eng "Cannot add or update a child row: a foreign key constraint fails (%.192s)" - ger "Kann Kind-Zeile nicht hinzufügen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%.192s)" - spa "No puedo añadir o actualizar una fila hija: falla una restricción de clave foránea (%.192s)" + chi "无法添加或更新子行:外键约束失败(%s)" + eng "Cannot add or update a child row: a foreign key constraint fails (%s)" + ger "Kann Kind-Zeile nicht hinzufügen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%s)" + spa "No puedo añadir o actualizar una fila hija: falla una restricción de clave foránea (%s)" ER_SP_BAD_VAR_SHADOW 42000 chi "变量'%-.64s'必须用`...`,或重命名" eng "Variable '%-.64s' must be quoted with `...`, or renamed" diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 94ed416eb60..133fbe32aad 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -63,7 +63,7 @@ const byte timestamp_max_bytes[7] = { }; -static const ulint MAX_DETAILED_ERROR_LEN = 256; +static const ulint MAX_DETAILED_ERROR_LEN = 512; /*************************************************************//** Set detailed error message for the transaction. */