From b8088487e4067bcf78ddd510dd0bcefa3f9c72dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Mon, 3 Jul 2023 16:09:18 +0300 Subject: [PATCH] MDEV-19216 Assertion ...SYS_FOREIGN failed in btr_node_ptr_max_size btr_node_ptr_max_size(): Handle BINARY(0) and VARBINARY(0) as special cases, similar to CHAR(0) and VARCHAR(0). --- mysql-test/suite/innodb/r/data_types.result | 7 +++++++ mysql-test/suite/innodb/t/data_types.test | 10 ++++++++++ storage/innobase/btr/btr0cur.cc | 5 ++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/innodb/r/data_types.result b/mysql-test/suite/innodb/r/data_types.result index 1394431b09dae..146f9bb080f17 100644 --- a/mysql-test/suite/innodb/r/data_types.result +++ b/mysql-test/suite/innodb/r/data_types.result @@ -174,3 +174,10 @@ DROP TABLE t1; CREATE TABLE t1 (c VARCHAR(0), KEY(c)) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); DROP TABLE t1; +# +# MDEV-19216 Assertion ...SYS_FOREIGN failed in btr_node_ptr_max_size +# +CREATE TABLE t1 (b BINARY(0), v VARBINARY(0), KEY(b), KEY(v)) ENGINE=InnoDB; +INSERT INTO t1 SET b='',v=''; +DROP TABLE t1; +# End of 10.4 tests diff --git a/mysql-test/suite/innodb/t/data_types.test b/mysql-test/suite/innodb/t/data_types.test index cfdd5201af2c4..eda6579ba4a92 100644 --- a/mysql-test/suite/innodb/t/data_types.test +++ b/mysql-test/suite/innodb/t/data_types.test @@ -136,3 +136,13 @@ DROP TABLE t1; CREATE TABLE t1 (c VARCHAR(0), KEY(c)) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); DROP TABLE t1; + +--echo # +--echo # MDEV-19216 Assertion ...SYS_FOREIGN failed in btr_node_ptr_max_size +--echo # + +CREATE TABLE t1 (b BINARY(0), v VARBINARY(0), KEY(b), KEY(v)) ENGINE=InnoDB; +INSERT INTO t1 SET b='',v=''; +DROP TABLE t1; + +--echo # End of 10.4 tests diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index d4e1497d9b31f..0f6cdf25ca295 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -1148,10 +1148,13 @@ static ulint btr_node_ptr_max_size(const dict_index_t* index) break; } /* fall through */ + case DATA_FIXBINARY: + case DATA_BINARY: case DATA_VARMYSQL: case DATA_CHAR: case DATA_MYSQL: - /* CHAR(0) and VARCHAR(0) are possible + /* BINARY(0), VARBINARY(0), + CHAR(0) and VARCHAR(0) are possible data type definitions in MariaDB. The InnoDB internal SQL parser maps CHAR to DATA_VARCHAR, so DATA_CHAR (or