diff --git a/mysql-test/suite/innodb/r/default_row_format_16k.result b/mysql-test/suite/innodb/r/default_row_format_16k.result index 7bb81bbb6c65..a3c63ad773ae 100644 --- a/mysql-test/suite/innodb/r/default_row_format_16k.result +++ b/mysql-test/suite/innodb/r/default_row_format_16k.result @@ -839,3 +839,19 @@ CREATE INDEX idx1 ON t1(a); ALTER TABLE t1 ROW_FORMAT=COMPACT; ERROR 42000: Specified key was too long; max key length is 767 bytes DROP TABLE t1; +# +# Bug#25579578 - FAILING ASSERTION: !FIELD->PREFIX_LEN || +# FIELD->FIXED_LEN == FIELD->PREFIX_LEN +# +CREATE TABLE t1(a CHAR(255) CHARACTER SET UTF32,KEY k1(a(195))) ENGINE=INNODB; +INSERT INTO t1 VALUES(-233); +DROP TABLE t1; +CREATE TABLE t1(a CHAR(255) CHARACTER SET UTF32,KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; +CREATE TABLE t1(a CHAR(255) CHARACTER SET latin1,KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; +CREATE TABLE t1(a CHAR(255), KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/innodb_bug120323.result b/mysql-test/suite/innodb/r/innodb_bug120323.result new file mode 100644 index 000000000000..eddc7f0d6191 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_bug120323.result @@ -0,0 +1,236 @@ +DROP TABLE IF EXISTS `t0xxxxxxx`; +Warnings: +Note 1051 Unknown table 'test.t0xxxxxxx' +CREATE TABLE `t0xxxxxxx` ( +`f0xxxxxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f1xxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x' PRIMARY KEY, +`f2xxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f3xxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f4xxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f5xxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f6xxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f7xxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, +`f8xxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, +`f9xxxxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f10xxxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f11xxxxxxxxxxxxxxx` tinyint NULL DEFAULT NULL, +`f12xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT NULL, +`f13xxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f14xxxxxxxxxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', +`f15xxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f16xxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f17xxxxxxxxxxxxxxx` varchar(7) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f18xxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f19xxxxxxxxxxx` varchar(4096) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f20xxxxxxxxxxx` varchar(22) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f21xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f22xxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', +`f23xxxxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f24xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f25xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f26xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f27xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f28xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f29xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f30xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f31xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f32xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f33xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f34xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f35xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f36xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f37xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f38xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f39xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f40xxxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', +`f41xxxxxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f42xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f43xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f44xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f45xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f46xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f47xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f48xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f49xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f50xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f51xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f52xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f53xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f54xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f55xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f56xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f57xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f58xxxxxxxxxxxxxxxxxxxx` varchar(7) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f59xxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f60xxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f61xxxxxxxxxxxxxxxxxxx` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', +`f62xxxxxxxxxxxxxxxxxxxxxx` datetime NULL DEFAULT NULL, +`f63xxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', +`f64xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f65xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f66xxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f67xxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', +`f68xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f69xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f70xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f71xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f72xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f73xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f74xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f75xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f76xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f77xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f78xxxxxxxxxxxxxxxxxxxxxxx` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f79xxxxxxxxxxxxxxxx` smallint UNSIGNED NULL DEFAULT 300, +`f80xxxxxxxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', +`f81xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f82xxxxxxxxxxxx` varchar(25) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxx', +`f83xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f84xxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', +`f85xxxxxxxxxxxxxxxxxxxx` varchar(500) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxx', +`f86xxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', +`f87xxxxxxxxxxxxxxxxxxxxxxxx` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f88xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f89xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT 0, +`f90xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT 0, +`f91xxxxxxxxxx` varchar(100) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f92xxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f93xxxxxxxxxxxxx` varchar(436) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f94xxxxxxxxxxxxxxxxxxx` varchar(13) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxx', +`f95xxxxxxxxxxxxxxxxxx` varchar(13) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxx', +`f96xxxxxxxxxxxxxxxxxxx` varchar(24) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f97xxxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f98xxxxxxxxxxxxxxxxxx` varchar(12) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f99xxxxxxxxxxxxxxxxxxxx` varchar(31) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f100xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f101xxxxxxxxxxxxxxxxxxx` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxx', +`f102xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', +`f103xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f104xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxx', +`f105xxxxxxxxxxxxxxxxxxxxxxxx` varchar(30) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', +`f106xxxxxxxxxxxxxxx` varchar(22) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', +`f107xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f108xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f109xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f110xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f111xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f112xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f113xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f114xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f115xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f116xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f117xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f118xxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f119xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f120xxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f121xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f122xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f123xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f124xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f125xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f126xxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f127xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f128xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f129xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f130xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f131xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f132xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f133xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f134xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f135xxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f136xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f137xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f138xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(6) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f139xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f140xxxxxxxxxxxxxxxxxxxx` varchar(9) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f141xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f142xxxxxxxxxxxxx` varchar(12) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f143xxxxxxxxxxxxxxxxxxxxx` varchar(6) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f144xxxxxxxxxxxxxxxx` varchar(628) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f145xxxxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f146xxxxxxxxxxxxxxxxxxxx` text CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f147xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f148xxxxxxxxxxxxxxxxxx` smallint UNSIGNED NULL DEFAULT 10, +`f149xxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f150xxxxxxxxxxxxxxxxxxx` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxx', +`f151xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f152xxxxxxxxxxxxxxxxxxxxxxxxx` mediumint UNSIGNED NULL DEFAULT 0, +`f153xxxxxxxxxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', +`f154xxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f155xxxxxxxxx` int UNSIGNED NULL DEFAULT 300, +`f156xxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 300, +`f157xxxxxxxxxxxxxxx` varchar(120) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f158xxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f159xxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f160xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f161xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f162xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f163xxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f164xxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f165xxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 0, +`f166xxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f167xxxxxxxxxxxxxxxx` varchar(1460) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', +`f168xxxxxxxxxxx` varchar(1460) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f169xxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f170xxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f171xxxxxxxxxxxxxxxxxx` varchar(100) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f172xxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f173xxxxxxxxxxxxxx` varchar(3072) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f174xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f175xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f176xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f177xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f178xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f179xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f180xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f181xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f182xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f183xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f184xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f185xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f186xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f187xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f188xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f189xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f190xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f191xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f192xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f193xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f194xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f195xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f196xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f197xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f198xxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f199xxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f200xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f201xxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f202xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f203xxxxxxxxxxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, +`f204xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, +`f205xxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f206xxxxxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f207xxxxxxxxxxxxxxxxxxxx` varchar(836) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f208xxxxxxxxxxxxxxxxx` varchar(836) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f209xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f210xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f211xxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f212xxxxxxxxxxxxxxxxxxx` varchar(4096) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f213xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f214xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f215xxxxxxxxxxxxxxxxx` varchar(140) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f216xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', +`f217xxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f218xxxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f219xxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f220xxxxxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f221xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f222xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f223xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, +`f224xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(756) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f225xxxxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f226xxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 0, +`f227xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, +`f228xxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', +`f229xxxxxxxxxxxx` timestamp on update CURRENT_TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE InnoDB DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs ROW_FORMAT=DYNAMIC; +DROP TABLE t0xxxxxxx; diff --git a/mysql-test/suite/innodb/r/innodb_bug39129182.result b/mysql-test/suite/innodb/r/innodb_bug39129182.result new file mode 100644 index 000000000000..2dd46715b8ef --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_bug39129182.result @@ -0,0 +1,80 @@ +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +SET GLOBAL innodb_adaptive_hash_index = false; +SET GLOBAL innodb_stats_persistent = false; +SET GLOBAL innodb_flush_log_at_trx_commit = 0; +# +# Case 1: Fixed-length PK columns (fast path in estimation). +# CHAR(255) latin1 -- dict_col_get_fixed_size() returns 255, +# field->fixed_len = 255 (correctly set, below 768 threshold). +# +CREATE TABLE t1 ( +a00 CHAR(255) NOT NULL DEFAULT 'a', +a01 CHAR(255) NOT NULL DEFAULT 'a', +a02 CHAR(255) NOT NULL DEFAULT 'a', +b INT NOT NULL DEFAULT 0, +CONSTRAINT pkey PRIMARY KEY(a00, a01, a02) +) charset latin1 ENGINE = InnoDB COMMENT='MERGE_THRESHOLD=45'; +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; +DELETE FROM t1 WHERE a00 = 'cnm'; +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; +# Case 1 passed: fixed-length PK estimation is correct +# +# Case 2: Variable-length PK columns (slow path in estimation). +# CHAR(255) utf8 -- dict_col_get_fixed_size() returns 0 in +# COMPACT format (mbminlen != mbmaxlen), so the estimation +# takes the slow path using dict_col_get_max_size(). +# +CREATE TABLE t2 ( +a00 CHAR(255) NOT NULL DEFAULT 'a', +a01 CHAR(255) NOT NULL DEFAULT 'a', +b INT NOT NULL DEFAULT 0, +CONSTRAINT pkey PRIMARY KEY(a00, a01) +) charset utf8 ENGINE = InnoDB COMMENT='MERGE_THRESHOLD=45'; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze status OK +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; +# Case 2 passed: variable-length PK estimation is correct +# +# Case 3: CHAR(255) CHARACTER SET utf32 PK -- missing COMPACT overhead. +# utf32 has mbminlen == mbmaxlen == 4, so dtype_get_fixed_size_low() +# returns 255*4=1020 in COMPACT format. But dict_index_add_col() zeros +# field->fixed_len because 1020 > DICT_MAX_FIXED_COL_LEN (768). +# +# The fast path in dict_index_node_ptr_max_size() adds 1020 but skips +# the 2-byte variable-length header that COMPACT actually encodes. +# Underestimation: 2 bytes per such column in the PK. +# +# CHAR(193) utf32 = 772 bytes is the minimum to exceed the 768 threshold. +# We use CHAR(255) utf32 = 1020 bytes for the maximum effect. +# +CREATE TABLE t3 ( +a CHAR(255) NOT NULL, +b CHAR(255) NOT NULL, +c INT NOT NULL DEFAULT 0, +PRIMARY KEY (a, b) +) CHARACTER SET utf32 ENGINE=InnoDB COMMENT='MERGE_THRESHOLD=45'; +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; +ANALYZE TABLE t3; +Table Op Msg_type Msg_text +test.t3 analyze status OK +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; +DELETE FROM t3 WHERE c BETWEEN 10 AND 20; +# Case 3 passed: utf32 PK estimation is correct +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; diff --git a/mysql-test/suite/innodb/r/innodb_bug39129182_spatial.result b/mysql-test/suite/innodb/r/innodb_bug39129182_spatial.result new file mode 100644 index 000000000000..49904bcebf6c --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_bug39129182_spatial.result @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_adaptive_hash_index = false; +SET GLOBAL innodb_stats_persistent = false; +SET GLOBAL innodb_flush_log_at_trx_commit = 0; +# +# Case 1: GEOMETRY column with SPATIAL KEY -- ULINT_MAX overflow. +# dtype_get_max_size_low() returns ULINT_MAX for DATA_GEOMETRY. +# dict_index_node_ptr_max_size() adds ULINT_MAX to rec_max_size, +# causing unsigned integer wrap-around. The resulting tiny value +# is caught by the debug assertion during purge traversal. +# +# Uses LINESTRING (not POINT) because POINT has its own data type +# (DATA_POINT) with a known fixed size -- only GEOMETRY returns +# ULINT_MAX from dtype_get_max_size_low(). +# +CREATE TABLE t1 ( +id INT AUTO_INCREMENT PRIMARY KEY, +g GEOMETRY NOT NULL, +SPATIAL KEY idx_g (g) +) ENGINE=InnoDB COMMENT='MERGE_THRESHOLD=45'; +Warnings: +Warning 3674 The spatial index on column 'g' will not be used by the query optimizer since the column does not have an SRID attribute. Consider adding an SRID attribute to the column. +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; +DELETE FROM t1 WHERE id BETWEEN 100 AND 500; +# Case 1 passed: spatial index node pointer estimation is correct +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/innodb_bug39129182_too_big_row.result b/mysql-test/suite/innodb/r/innodb_bug39129182_too_big_row.result new file mode 100644 index 000000000000..d5fb7e086dcb --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_bug39129182_too_big_row.result @@ -0,0 +1,74 @@ +DROP TABLE IF EXISTS t1; +# +# Case1: Primary key is large +# +CREATE TABLE t1 ( +a CHAR(255) NOT NULL, +b CHAR(255) NOT NULL, +c CHAR(255) NOT NULL, +d CHAR(175) NOT NULL, +g GEOMETRY NOT NULL, +PRIMARY KEY (a, b, c, d), +SPATIAL KEY idx_g (g) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; +Warnings: +Warning 3674 The spatial index on column 'g' will not be used by the query optimizer since the column does not have an SRID attribute. Consider adding an SRID attribute to the column. +INSERT INTO t1(a,b,c,d,g) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +SELECT a,b,c,d FROM t1; +a b c d +DROP TABLE t1; +# +# Case2: Primary key is small, row is big (we use index on GEOMETRY) +# +CREATE TABLE t1 ( +a CHAR(255) NOT NULL, +b CHAR(255) NOT NULL, +c CHAR(255) NOT NULL, +d CHAR(175) NOT NULL, +g GEOMETRY NOT NULL, +PRIMARY KEY (a), +SPATIAL KEY idx_g (g) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; +Warnings: +Warning 3674 The spatial index on column 'g' will not be used by the query optimizer since the column does not have an SRID attribute. Consider adding an SRID attribute to the column. +INSERT INTO t1(a,b,c,d,g) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +SELECT a,b,c,d FROM t1; +a b c d +a b c d +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (a,b,c,d); +ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +SELECT a,b,c,d FROM t1; +a b c d +a b c d +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression +t1 0 PRIMARY 1 a A 1 NULL NULL BTREE YES NULL +t1 1 idx_g 1 g A 1 32 NULL SPATIAL YES NULL +DROP TABLE t1; +# +# Case3: Primary key is small, row is big (we use index on POINT) +# +CREATE TABLE t1 ( +a CHAR(255) NOT NULL, +b CHAR(255) NOT NULL, +c CHAR(255) NOT NULL, +d CHAR(175) NOT NULL, +p POINT NOT NULL SRID 4326, +PRIMARY KEY (a), +SPATIAL KEY idx_p (p) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; +INSERT INTO t1(a,b,c,d,p) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +SELECT a,b,c,d FROM t1; +a b c d +a b c d +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (a,b,c,d); +ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +SELECT a,b,c,d FROM t1; +a b c d +a b c d +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression +t1 0 PRIMARY 1 a A 1 NULL NULL BTREE YES NULL +t1 1 idx_p 1 p A 1 32 NULL SPATIAL YES NULL +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/default_row_format_16k.test b/mysql-test/suite/innodb/t/default_row_format_16k.test index 6806cea991b1..657db73032eb 100644 --- a/mysql-test/suite/innodb/t/default_row_format_16k.test +++ b/mysql-test/suite/innodb/t/default_row_format_16k.test @@ -357,3 +357,23 @@ CREATE INDEX idx1 ON t1(a); ALTER TABLE t1 ROW_FORMAT=COMPACT; DROP TABLE t1; +--echo # +--echo # Bug#25579578 - FAILING ASSERTION: !FIELD->PREFIX_LEN || +--echo # FIELD->FIXED_LEN == FIELD->PREFIX_LEN +--echo # + +CREATE TABLE t1(a CHAR(255) CHARACTER SET UTF32,KEY k1(a(195))) ENGINE=INNODB; +INSERT INTO t1 VALUES(-233); +DROP TABLE t1; + +CREATE TABLE t1(a CHAR(255) CHARACTER SET UTF32,KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; + +CREATE TABLE t1(a CHAR(255) CHARACTER SET latin1,KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; + +CREATE TABLE t1(a CHAR(255), KEY k1(a(195))); +INSERT INTO t1 VALUES('x'); +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb_bug120323.test b/mysql-test/suite/innodb/t/innodb_bug120323.test new file mode 100644 index 000000000000..e0c9c92569cd --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_bug120323.test @@ -0,0 +1,237 @@ +# Test created by: Supervision NV (see: https://bugs.mysql.com/bug.php?id=120323) + +DROP TABLE IF EXISTS `t0xxxxxxx`; +CREATE TABLE `t0xxxxxxx` ( + `f0xxxxxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f1xxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x' PRIMARY KEY, + `f2xxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f3xxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f4xxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f5xxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f6xxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f7xxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, + `f8xxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, + `f9xxxxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f10xxxxxxxxxxxxxxxxxxxxxx` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f11xxxxxxxxxxxxxxx` tinyint NULL DEFAULT NULL, + `f12xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT NULL, + `f13xxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f14xxxxxxxxxxx` varchar(40) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', + `f15xxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f16xxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f17xxxxxxxxxxxxxxx` varchar(7) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f18xxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f19xxxxxxxxxxx` varchar(4096) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f20xxxxxxxxxxx` varchar(22) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f21xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f22xxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', + `f23xxxxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f24xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f25xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f26xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f27xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f28xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f29xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f30xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f31xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f32xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f33xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f34xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f35xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f36xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f37xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f38xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f39xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f40xxxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', + `f41xxxxxxxxxxxxxxxxxxxx` varchar(160) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f42xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f43xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f44xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f45xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f46xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f47xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f48xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f49xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f50xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f51xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f52xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f53xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f54xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f55xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f56xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(224) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f57xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f58xxxxxxxxxxxxxxxxxxxx` varchar(7) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f59xxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f60xxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f61xxxxxxxxxxxxxxxxxxx` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', + `f62xxxxxxxxxxxxxxxxxxxxxx` datetime NULL DEFAULT NULL, + `f63xxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', + `f64xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f65xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f66xxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f67xxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', + `f68xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f69xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f70xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f71xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f72xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f73xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f74xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f75xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1000) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f76xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f77xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f78xxxxxxxxxxxxxxxxxxxxxxx` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f79xxxxxxxxxxxxxxxx` smallint UNSIGNED NULL DEFAULT 300, + `f80xxxxxxxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', + `f81xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f82xxxxxxxxxxxx` varchar(25) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxx', + `f83xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f84xxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', + `f85xxxxxxxxxxxxxxxxxxxx` varchar(500) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxx', + `f86xxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', + `f87xxxxxxxxxxxxxxxxxxxxxxxx` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f88xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f89xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT 0, + `f90xxxxxxxxxxxxxxxxx` tinyint NULL DEFAULT 0, + `f91xxxxxxxxxx` varchar(100) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f92xxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f93xxxxxxxxxxxxx` varchar(436) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f94xxxxxxxxxxxxxxxxxxx` varchar(13) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxx', + `f95xxxxxxxxxxxxxxxxxx` varchar(13) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxx', + `f96xxxxxxxxxxxxxxxxxxx` varchar(24) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f97xxxxxxxxxxxxxxxxxxx` varchar(8) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f98xxxxxxxxxxxxxxxxxx` varchar(12) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f99xxxxxxxxxxxxxxxxxxxx` varchar(31) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f100xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f101xxxxxxxxxxxxxxxxxxx` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxx', + `f102xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(128) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxx', + `f103xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f104xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(26) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxx', + `f105xxxxxxxxxxxxxxxxxxxxxxxx` varchar(30) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxx', + `f106xxxxxxxxxxxxxxx` varchar(22) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxx', + `f107xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f108xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f109xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f110xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f111xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f112xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f113xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f114xxxxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f115xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f116xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f117xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f118xxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f119xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f120xxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f121xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f122xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f123xxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f124xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f125xxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f126xxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f127xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f128xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f129xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f130xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f131xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f132xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f133xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f134xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f135xxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f136xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f137xxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f138xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(6) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f139xxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f140xxxxxxxxxxxxxxxxxxxx` varchar(9) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f141xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(416) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f142xxxxxxxxxxxxx` varchar(12) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f143xxxxxxxxxxxxxxxxxxxxx` varchar(6) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f144xxxxxxxxxxxxxxxx` varchar(628) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f145xxxxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f146xxxxxxxxxxxxxxxxxxxx` text CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f147xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f148xxxxxxxxxxxxxxxxxx` smallint UNSIGNED NULL DEFAULT 10, + `f149xxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f150xxxxxxxxxxxxxxxxxxx` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxx', + `f151xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(4) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f152xxxxxxxxxxxxxxxxxxxxxxxxx` mediumint UNSIGNED NULL DEFAULT 0, + `f153xxxxxxxxxxxxxxxxxxxxxxxx` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'x', + `f154xxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f155xxxxxxxxx` int UNSIGNED NULL DEFAULT 300, + `f156xxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 300, + `f157xxxxxxxxxxxxxxx` varchar(120) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f158xxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f159xxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f160xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f161xxxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f162xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f163xxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f164xxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f165xxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 0, + `f166xxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f167xxxxxxxxxxxxxxxx` varchar(1460) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + `f168xxxxxxxxxxx` varchar(1460) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f169xxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f170xxxxxxxxxxxxxxxx` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f171xxxxxxxxxxxxxxxxxx` varchar(100) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f172xxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f173xxxxxxxxxxxxxx` varchar(3072) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f174xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f175xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f176xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f177xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f178xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f179xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f180xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f181xxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f182xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f183xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f184xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f185xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f186xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f187xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f188xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f189xxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f190xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f191xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f192xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f193xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f194xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f195xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f196xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f197xxxxxxxxxxxxxxxxxxxxxxxx` varchar(70) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f198xxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f199xxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f200xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f201xxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f202xxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f203xxxxxxxxxxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, + `f204xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` int UNSIGNED NULL DEFAULT 0, + `f205xxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f206xxxxxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f207xxxxxxxxxxxxxxxxxxxx` varchar(836) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f208xxxxxxxxxxxxxxxxx` varchar(836) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f209xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f210xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f211xxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f212xxxxxxxxxxxxxxxxxxx` varchar(4096) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f213xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f214xxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f215xxxxxxxxxxxxxxxxx` varchar(140) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f216xxxxxxxxxxxxxxxxxxx` varchar(3) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT 'xxx', + `f217xxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f218xxxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f219xxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f220xxxxxxxxxxxxxxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f221xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f222xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(3320) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f223xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 1, + `f224xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` varchar(756) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f225xxxxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f226xxxxxxxxxxxxxxxxx` tinyint UNSIGNED NULL DEFAULT 0, + `f227xxxxxxxxxxxxxxxxxxxxxxxx` mediumtext CHARACTER SET latin1 COLLATE latin1_general_cs NULL DEFAULT NULL, + `f228xxx` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '', + `f229xxxxxxxxxxxx` timestamp on update CURRENT_TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE InnoDB DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs ROW_FORMAT=DYNAMIC; + +DROP TABLE t0xxxxxxx; diff --git a/mysql-test/suite/innodb/t/innodb_bug39129182.test b/mysql-test/suite/innodb/t/innodb_bug39129182.test new file mode 100644 index 000000000000..7acb7dddace3 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_bug39129182.test @@ -0,0 +1,236 @@ +# +# Test for Bug#39129182 +# +# MySQL is crashing when dict_index_node_ptr_max_size() +# underestimates the maximum size for index node pointer. +# +# dict_index_node_ptr_max_size() has a fast path (dict0dict.cc): +# +# field_max_size = dict_col_get_fixed_size(col, comp); +# if (field_max_size) { +# rec_max_size += field_max_size; +# continue; +# } +# +# This path is taken whenever dict_col_get_fixed_size() returns non-zero, +# but it skips the variable-length encoding overhead (field_ext_max_size) +# that COMPACT/DYNAMIC format needs. When dict_index_add_col() has zeroed +# field->fixed_len (because fixed_len > DICT_MAX_FIXED_COL_LEN=768), +# the field IS variable-length-encoded, but the fast path doesn't know. +# +# Compare with dict_index_too_big_for_tree() which correctly checks: +# if (field_max_size && field->fixed_len != 0) +# +# Cases 1 & 2 verify correct estimation for column types where +# dict_col_get_fixed_size() <= 768 (so field->fixed_len is preserved +# and the fast path is correct). +# +# Case 3 exploits the bug using CHAR(255) CHARACTER SET utf32: +# - utf32 has mbminlen == mbmaxlen == 4 +# - dict_col_get_fixed_size(col, comp=1) returns 255*4 = 1020 +# - dict_index_add_col() zeros field->fixed_len (1020 > 768) +# - The fast path adds 1020 but SKIPS the 2-byte length prefix +# that COMPACT format requires for variable-length fields +# - Underestimation: 2 bytes per such PK column +# +# With the bug present, Case 3 crash the server via the debug +# assertion ut_ad(node_ptr_max_size >= actual_node_ptr_size). +# + +--source include/have_debug.inc +--source include/have_innodb_16k.inc + +--disable_query_log +SET @old_innodb_limit_optimistic_insert_debug = @@innodb_limit_optimistic_insert_debug; +SET @old_innodb_adaptive_hash_index = @@innodb_adaptive_hash_index; +SET @old_innodb_stats_persistent = @@innodb_stats_persistent; +SET @old_innodb_flush_log_at_trx_commit = @@innodb_flush_log_at_trx_commit; +--enable_query_log + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +--enable_warnings + +--source include/count_sessions.inc + +SET GLOBAL innodb_adaptive_hash_index = false; +SET GLOBAL innodb_stats_persistent = false; +SET GLOBAL innodb_flush_log_at_trx_commit = 0; + +--echo # +--echo # Case 1: Fixed-length PK columns (fast path in estimation). +--echo # CHAR(255) latin1 -- dict_col_get_fixed_size() returns 255, +--echo # field->fixed_len = 255 (correctly set, below 768 threshold). +--echo # + +CREATE TABLE t1 ( + a00 CHAR(255) NOT NULL DEFAULT 'a', + a01 CHAR(255) NOT NULL DEFAULT 'a', + a02 CHAR(255) NOT NULL DEFAULT 'a', + b INT NOT NULL DEFAULT 0, + CONSTRAINT pkey PRIMARY KEY(a00, a01, a02) +) charset latin1 ENGINE = InnoDB COMMENT='MERGE_THRESHOLD=45'; + +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; + +--disable_query_log +DELIMITER |; +CREATE PROCEDURE data_load_t1() +BEGIN + DECLARE c1 INT DEFAULT 97; + DECLARE c2 INT DEFAULT 97; + DECLARE c3 INT DEFAULT 97; + WHILE c1 < 102 DO + WHILE c2 < 123 DO + WHILE c3 < 123 DO + INSERT INTO t1 (a00) VALUES (CHAR(c1,c2,c3)); + SET c3 = c3 + 1; + END WHILE; + SET c3 = 97; + SET c2 = c2 + 1; + END WHILE; + SET c2 = 97; + SET c1 = c1 + 1; + END WHILE; +END | +DELIMITER ;| +CALL data_load_t1(); +DROP PROCEDURE data_load_t1; +--enable_query_log + +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; + +ANALYZE TABLE t1; + +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; + +DELETE FROM t1 WHERE a00 = 'cnm'; +--source include/wait_innodb_all_purged.inc + +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; + +--echo # Case 1 passed: fixed-length PK estimation is correct + +--echo # +--echo # Case 2: Variable-length PK columns (slow path in estimation). +--echo # CHAR(255) utf8 -- dict_col_get_fixed_size() returns 0 in +--echo # COMPACT format (mbminlen != mbmaxlen), so the estimation +--echo # takes the slow path using dict_col_get_max_size(). +--echo # + +CREATE TABLE t2 ( + a00 CHAR(255) NOT NULL DEFAULT 'a', + a01 CHAR(255) NOT NULL DEFAULT 'a', + b INT NOT NULL DEFAULT 0, + CONSTRAINT pkey PRIMARY KEY(a00, a01) +) charset utf8 ENGINE = InnoDB COMMENT='MERGE_THRESHOLD=45'; + +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; + +--disable_query_log +DELIMITER |; +CREATE PROCEDURE data_load_t2() +BEGIN + DECLARE c1 INT DEFAULT 97; + DECLARE c2 INT DEFAULT 97; + WHILE c1 < 123 DO + WHILE c2 < 123 DO + INSERT IGNORE INTO t2 (a00) VALUES (CHAR(c1,c2)); + SET c2 = c2 + 1; + END WHILE; + SET c2 = 97; + SET c1 = c1 + 1; + END WHILE; +END | + + +DELIMITER ;| +CALL data_load_t2(); +DROP PROCEDURE data_load_t2; +--enable_query_log + + +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; + +ANALYZE TABLE t2; + + +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; + +--source include/wait_innodb_all_purged.inc + +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; + +--echo # Case 2 passed: variable-length PK estimation is correct + +--echo # +--echo # Case 3: CHAR(255) CHARACTER SET utf32 PK -- missing COMPACT overhead. +--echo # utf32 has mbminlen == mbmaxlen == 4, so dtype_get_fixed_size_low() +--echo # returns 255*4=1020 in COMPACT format. But dict_index_add_col() zeros +--echo # field->fixed_len because 1020 > DICT_MAX_FIXED_COL_LEN (768). +--echo # +--echo # The fast path in dict_index_node_ptr_max_size() adds 1020 but skips +--echo # the 2-byte variable-length header that COMPACT actually encodes. +--echo # Underestimation: 2 bytes per such column in the PK. +--echo # +--echo # CHAR(193) utf32 = 772 bytes is the minimum to exceed the 768 threshold. +--echo # We use CHAR(255) utf32 = 1020 bytes for the maximum effect. +--echo # + +CREATE TABLE t3 ( + a CHAR(255) NOT NULL, + b CHAR(255) NOT NULL, + c INT NOT NULL DEFAULT 0, + PRIMARY KEY (a, b) +) CHARACTER SET utf32 ENGINE=InnoDB COMMENT='MERGE_THRESHOLD=45'; + +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; + +--disable_query_log +DELIMITER |; +CREATE PROCEDURE data_load_t3() +BEGIN + DECLARE i INT DEFAULT 0; + WHILE i < 50 DO + INSERT IGNORE INTO t3 (a, b, c) VALUES ( + CONCAT(REPEAT('x', 254), CHAR(65 + (i MOD 26) USING utf32)), + CONCAT(REPEAT('y', 254), CHAR(65 + (i DIV 26) USING utf32)), + i + ); + SET i = i + 1; + END WHILE; +END | + +DELIMITER ;| +CALL data_load_t3(); +DROP PROCEDURE data_load_t3; +--enable_query_log + +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; + +ANALYZE TABLE t3; + +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; + +DELETE FROM t3 WHERE c BETWEEN 10 AND 20; + +--source include/wait_innodb_all_purged.inc + +--echo # Case 3 passed: utf32 PK estimation is correct + +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; + +# Cleanup +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +--disable_query_log +SET GLOBAL innodb_limit_optimistic_insert_debug = @old_innodb_limit_optimistic_insert_debug; +SET GLOBAL innodb_adaptive_hash_index = @old_innodb_adaptive_hash_index; +SET GLOBAL innodb_stats_persistent = @old_innodb_stats_persistent; +SET GLOBAL innodb_flush_log_at_trx_commit = @old_innodb_flush_log_at_trx_commit; +--enable_query_log + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/innodb_bug39129182_spatial.test b/mysql-test/suite/innodb/t/innodb_bug39129182_spatial.test new file mode 100644 index 000000000000..6df8fc079154 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_bug39129182_spatial.test @@ -0,0 +1,97 @@ +# +# Test for Bug#39129182 +# +# MySQL is crashing when dict_index_node_ptr_max_size() +# underestimates the maximum size for index node pointer. +# +# Bug exists for SPATIAL indexes on GEOMETRY columns: +# - dtype_get_max_size_low() returns ULINT_MAX for DATA_GEOMETRY +# - field->prefix_len is 0 for spatial index columns (no capping) +# - "rec_max_size += ULINT_MAX" causes wrap-around to a tiny value +# +# With the bug present, we crash the server via the debug +# assertion ut_ad(node_ptr_max_size >= actual_node_ptr_size). +# + +--source include/have_debug.inc +--source include/have_innodb_16k.inc + +--disable_query_log +SET @old_innodb_limit_optimistic_insert_debug = @@innodb_limit_optimistic_insert_debug; +SET @old_innodb_adaptive_hash_index = @@innodb_adaptive_hash_index; +SET @old_innodb_stats_persistent = @@innodb_stats_persistent; +SET @old_innodb_flush_log_at_trx_commit = @@innodb_flush_log_at_trx_commit; +--enable_query_log + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--source include/count_sessions.inc + +SET GLOBAL innodb_adaptive_hash_index = false; +SET GLOBAL innodb_stats_persistent = false; +SET GLOBAL innodb_flush_log_at_trx_commit = 0; + +--echo # +--echo # Case 1: GEOMETRY column with SPATIAL KEY -- ULINT_MAX overflow. +--echo # dtype_get_max_size_low() returns ULINT_MAX for DATA_GEOMETRY. +--echo # dict_index_node_ptr_max_size() adds ULINT_MAX to rec_max_size, +--echo # causing unsigned integer wrap-around. The resulting tiny value +--echo # is caught by the debug assertion during purge traversal. +--echo # +--echo # Uses LINESTRING (not POINT) because POINT has its own data type +--echo # (DATA_POINT) with a known fixed size -- only GEOMETRY returns +--echo # ULINT_MAX from dtype_get_max_size_low(). +--echo # + +CREATE TABLE t1 ( + id INT AUTO_INCREMENT PRIMARY KEY, + g GEOMETRY NOT NULL, + SPATIAL KEY idx_g (g) +) ENGINE=InnoDB COMMENT='MERGE_THRESHOLD=45'; + +SET GLOBAL innodb_limit_optimistic_insert_debug = 3; + +--disable_query_log +DELIMITER |; +CREATE PROCEDURE data_load_t1() +BEGIN + DECLARE i INT DEFAULT 0; + WHILE i < 1500 DO + INSERT INTO t1 (g) VALUES ( + ST_GeomFromText(CONCAT( + 'LINESTRING(', i, ' ', i, ',', i + 1, ' ', i + 1, ')')) + ); + SET i = i + 1; + END WHILE; +END | +DELIMITER ;| +CALL data_load_t1(); +DROP PROCEDURE data_load_t1; +--enable_query_log + +SET GLOBAL innodb_limit_optimistic_insert_debug = 0; + +ANALYZE TABLE t1; + +SET GLOBAL DEBUG = "+d,check_node_ptr_size_estimation"; + +DELETE FROM t1 WHERE id BETWEEN 100 AND 500; +--source include/wait_innodb_all_purged.inc + +--echo # Case 1 passed: spatial index node pointer estimation is correct + +SET GLOBAL DEBUG = "-d,check_node_ptr_size_estimation"; + +# Cleanup +DROP TABLE t1; + +--disable_query_log +SET GLOBAL innodb_limit_optimistic_insert_debug = @old_innodb_limit_optimistic_insert_debug; +SET GLOBAL innodb_adaptive_hash_index = @old_innodb_adaptive_hash_index; +SET GLOBAL innodb_stats_persistent = @old_innodb_stats_persistent; +SET GLOBAL innodb_flush_log_at_trx_commit = @old_innodb_flush_log_at_trx_commit; +--enable_query_log + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/innodb_bug39129182_too_big_row.test b/mysql-test/suite/innodb/t/innodb_bug39129182_too_big_row.test new file mode 100644 index 000000000000..7446e78d1124 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_bug39129182_too_big_row.test @@ -0,0 +1,76 @@ +# Test for Bug#39129182 which targets geometry table with too big row. + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--echo # +--echo # Case1: Primary key is large +--echo # + +CREATE TABLE t1 ( + a CHAR(255) NOT NULL, + b CHAR(255) NOT NULL, + c CHAR(255) NOT NULL, + d CHAR(175) NOT NULL, + g GEOMETRY NOT NULL, + PRIMARY KEY (a, b, c, d), + SPATIAL KEY idx_g (g) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; + +--error ER_TOO_BIG_ROWSIZE +INSERT INTO t1(a,b,c,d,g) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +SELECT a,b,c,d FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Case2: Primary key is small, row is big (we use index on GEOMETRY) +--echo # + +CREATE TABLE t1 ( + a CHAR(255) NOT NULL, + b CHAR(255) NOT NULL, + c CHAR(255) NOT NULL, + d CHAR(175) NOT NULL, + g GEOMETRY NOT NULL, + PRIMARY KEY (a), + SPATIAL KEY idx_g (g) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; + +INSERT INTO t1(a,b,c,d,g) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +SELECT a,b,c,d FROM t1; + +--error ER_TOO_BIG_ROWSIZE +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (a,b,c,d); + +SELECT a,b,c,d FROM t1; +SHOW INDEX FROM t1; + +DROP TABLE t1; + + +--echo # +--echo # Case3: Primary key is small, row is big (we use index on POINT) +--echo # + +CREATE TABLE t1 ( + a CHAR(255) NOT NULL, + b CHAR(255) NOT NULL, + c CHAR(255) NOT NULL, + d CHAR(175) NOT NULL, + p POINT NOT NULL SRID 4326, + PRIMARY KEY (a), + SPATIAL KEY idx_p (p) +) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=latin1; + +INSERT INTO t1(a,b,c,d,p) VALUES ('a', 'b', 'c', 'd', ST_GeomFromText('POINT(37.7749 -122.4194)', 4326)); +SELECT a,b,c,d FROM t1; + +--error ER_TOO_BIG_ROWSIZE +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (a,b,c,d); + +SELECT a,b,c,d FROM t1; +SHOW INDEX FROM t1; + +DROP TABLE t1; diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index c9ad016f0590..49b33877048e 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -1342,6 +1342,20 @@ void btr_cur_search_to_nth_level( offsets = rec_get_offsets(node_ptr, index, offsets, ULINT_UNDEFINED, UT_LOCATION_HERE, &heap); + /* The node_ptr_max_size estimate (from + dict_index_node_ptr_max_size()) is only computed and used by + btr_cur_will_modify_tree() in BTR_MODIFY_TREE mode; in the + other latch modes the variable keeps its placeholder value + (UNIV_PAGE_SIZE / 2) and the assertion would be either + trivially true or comparing against a meaningless value, so + we restrict the check to BTR_MODIFY_TREE where the pessimistic + tree-modify code actually relies on this value being a true + upper bound on the node pointer record size. */ + DBUG_EXECUTE_IF( + "check_node_ptr_size_estimation", if (latch_mode == BTR_MODIFY_TREE) { + ut_ad(rec_offs_size(offsets) <= node_ptr_max_size); + }); + /* If the rec is the first or last in the page for pessimistic delete intention, it might cause node_ptr insert for the upper level. We should change the intention and retry. diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 718b58683402..28c5579bfac2 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -2099,8 +2099,30 @@ ulint dict_index_node_ptr_max_size(const dict_index_t *index) /*!< in: index */ /* Determine the maximum length of the index field. */ + /* For spatial indexes, the first field stores the MBR + (DATA_MBR_LEN bytes), not the original geometry payload. + This avoids the DATA_GEOMETRY == ULINT_MAX overflow in + dict_col_get_max_size() and accounts for the COMPACT + length byte only when the field is actually variable- + length encoded (MBR is always 32 bytes, < 128, so a + 1-byte prefix is sufficient). This is on purpose not + kept in sync with dict_index_too_big_for_tree(). */ + if (dict_index_is_spatial(index) && i == 0) { + rec_max_size += DATA_MBR_LEN; + if (comp && field->fixed_len == 0) { + rec_max_size += 1; + } + continue; + } + field_max_size = col->get_fixed_size(comp); - if (field_max_size) { + + /* We must not use the fast path when fixed_len = 0, + because it might be the case that the field is encoded + as variable-length and therefore needs 1-2 extra bytes. + In such case the field_max_size might be underestimated + by these 2 bytes. */ + if (field_max_size && field->fixed_len != 0) { /* dict_index_add_col() should guarantee this */ ut_ad(!field->prefix_len || field->fixed_len == field->prefix_len); /* Fixed lengths are not encoded @@ -2116,6 +2138,12 @@ ulint dict_index_node_ptr_max_size(const dict_index_t *index) /*!< in: index */ field_max_size = field->prefix_len; } + /* Sanity check, preventing overflow. Note that + col->get_max_size()==ULINT_MAX implies DATA_BIG_COL(col), and we don't have + secondary indexes on BLOBs without prefix_len, so if you combine all the + logical conditions leading to this line, you should see why it must hold. */ + ut_ad(field_max_size != ULINT_MAX); + if (comp) { /* Add the extra size for ROW_FORMAT=COMPACT. For ROW_FORMAT=REDUNDANT, these bytes were @@ -2192,6 +2220,23 @@ void get_field_max_size(const dict_table_t *table, const dict_index_t *index, return; } + /* Note: for spatial data types, we will set below + field_max_size to ULINT_MAX. This will later result + in overflow when adding size upper bounds for pk + fields. However, if we decided to fix this overflow, + we would make it impossible to create some of tables + that previously were allowed to be created. With the + overflow, the estimation would become size(pk) - 2, + because ULINT_MAX + 2 is 0. When this function + underestimates, it allows a table to be created + and potentially later rows could not be inserted. + It's still better situation than not allowing to + create table that previously was allowed to be + created (especially if it allowed to insert rows). + Situation is different in dict_index_node_ptr_max_size: + we must not underestimate there. Therefore these two + functions do not need to be kept in sync. */ + field_max_size = col->get_max_size(); field_ext_max_size = field_max_size < 256 ? 1 : 2;