From: Jon Olav Hauglid Date: June 1 2011 2:57pm Subject: bzr commit into mysql-trunk branch (jon.hauglid:3142) Bug#12585718 List-Archive: http://lists.mysql.com/commits/138560 X-Bug: 12585718 Message-Id: <201106011457.p51Evr25025928@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7139420709020245539==" --===============7139420709020245539== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-bug12585718/ based on revid:tor.didriksen@stripped 3142 Jon Olav Hauglid 2011-06-01 Bug#12585718 REPLICATION BREAKS WITH LARGE INDEX PREFIX ON UNIQUE INDEX Tentative patch for discussion purposes. Before this patch, creating an index with a prefix longer than the maximum supported length only gave a warning for non-unique indexes but an error for unique indexes. This patch changes the behavior for non-unique indexes so an ER_TOO_LONG_KEY error is reported in this case as well. Test case added to create.test. modified: mysql-test/include/ctype_utf8mb4.inc mysql-test/include/mix1.inc mysql-test/r/create.result mysql-test/r/ctype_utf8mb4.result mysql-test/r/ctype_utf8mb4_innodb.result mysql-test/r/ctype_utf8mb4_myisam.result mysql-test/r/type_blob.result mysql-test/suite/innodb/r/innodb.result mysql-test/suite/innodb/r/innodb_index_large_prefix.result mysql-test/suite/innodb/r/innodb_mysql.result mysql-test/suite/innodb/r/innodb_prefix_index_liftedlimit.result mysql-test/suite/innodb/t/innodb.test mysql-test/suite/innodb/t/innodb_index_large_prefix.test mysql-test/suite/innodb/t/innodb_prefix_index_liftedlimit.test mysql-test/t/create.test mysql-test/t/ctype_utf8mb4.test mysql-test/t/type_blob.test sql/sql_table.cc === modified file 'mysql-test/include/ctype_utf8mb4.inc' --- a/mysql-test/include/ctype_utf8mb4.inc 2010-03-05 08:17:19 +0000 +++ b/mysql-test/include/ctype_utf8mb4.inc 2011-06-01 14:57:29 +0000 @@ -1636,7 +1636,7 @@ eval CREATE TABLE t1 ( clipid INT NOT NULL, Tape TINYTEXT, PRIMARY KEY (clipid), - KEY tape(Tape(255)) + KEY tape(Tape(191)) ) CHARACTER SET=utf8mb4 ENGINE $engine; ALTER TABLE t1 ADD mos TINYINT DEFAULT 0 AFTER clipid; SHOW CREATE TABLE t1; === modified file 'mysql-test/include/mix1.inc' --- a/mysql-test/include/mix1.inc 2011-03-30 13:33:29 +0000 +++ b/mysql-test/include/mix1.inc 2011-06-01 14:57:29 +0000 @@ -941,6 +941,7 @@ DROP TABLE t1; # create table t1(a text) engine=innodb default charset=utf8; insert into t1 values('aaa'); +--error ER_TOO_LONG_KEY alter table t1 add index(a(1024)); show create table t1; drop table t1; === modified file 'mysql-test/r/create.result' --- a/mysql-test/r/create.result 2011-02-21 02:57:30 +0000 +++ b/mysql-test/r/create.result 2011-06-01 14:57:29 +0000 @@ -2451,3 +2451,17 @@ create temporary table t1 select f(); ERROR HY000: Can't update table 't2' while 't1' is being created. drop view t2; drop function f; +# +# BUG#12585718 REPLICATION BREAKS WITH LARGE INDEX PREFIX ON UNIQUE INDEX +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(col1 TEXT, UNIQUE INDEX(col1(1001))); +ERROR 42000: Specified key was too long; max key length is 1000 bytes +CREATE TABLE t1(col1 VARCHAR(1001), UNIQUE INDEX(col1)); +ERROR 42000: Specified key was too long; max key length is 1000 bytes +CREATE TABLE t1(col1 TEXT, INDEX(col1(1001))); +ERROR 42000: Specified key was too long; max key length is 1000 bytes +CREATE TABLE t1(col1 VARCHAR(1001), INDEX(col1)); +Warnings: +Warning 1071 Specified key was too long; max key length is 1000 bytes +DROP TABLE t1; === modified file 'mysql-test/r/ctype_utf8mb4.result' --- a/mysql-test/r/ctype_utf8mb4.result 2010-11-29 13:30:18 +0000 +++ b/mysql-test/r/ctype_utf8mb4.result 2011-06-01 14:57:29 +0000 @@ -2187,10 +2187,8 @@ CREATE TABLE t1 ( clipid INT NOT NULL, Tape TINYTEXT, PRIMARY KEY (clipid), -KEY tape(Tape(255)) +KEY tape(Tape(250)) ) CHARACTER SET=utf8mb4; -Warnings: -Warning 1071 Specified key was too long; max key length is 1000 bytes ALTER TABLE t1 ADD mos TINYINT DEFAULT 0 AFTER clipid; SHOW CREATE TABLE t1; Table Create Table === modified file 'mysql-test/r/ctype_utf8mb4_innodb.result' --- a/mysql-test/r/ctype_utf8mb4_innodb.result 2010-11-29 13:30:18 +0000 +++ b/mysql-test/r/ctype_utf8mb4_innodb.result 2011-06-01 14:57:29 +0000 @@ -2155,10 +2155,8 @@ CREATE TABLE t1 ( clipid INT NOT NULL, Tape TINYTEXT, PRIMARY KEY (clipid), -KEY tape(Tape(255)) +KEY tape(Tape(191)) ) CHARACTER SET=utf8mb4 ENGINE InnoDB; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes ALTER TABLE t1 ADD mos TINYINT DEFAULT 0 AFTER clipid; SHOW CREATE TABLE t1; Table Create Table === modified file 'mysql-test/r/ctype_utf8mb4_myisam.result' --- a/mysql-test/r/ctype_utf8mb4_myisam.result 2010-11-29 13:30:18 +0000 +++ b/mysql-test/r/ctype_utf8mb4_myisam.result 2011-06-01 14:57:29 +0000 @@ -2155,10 +2155,8 @@ CREATE TABLE t1 ( clipid INT NOT NULL, Tape TINYTEXT, PRIMARY KEY (clipid), -KEY tape(Tape(255)) +KEY tape(Tape(191)) ) CHARACTER SET=utf8mb4 ENGINE MyISAM; -Warnings: -Warning 1071 Specified key was too long; max key length is 1000 bytes ALTER TABLE t1 ADD mos TINYINT DEFAULT 0 AFTER clipid; SHOW CREATE TABLE t1; Table Create Table @@ -2167,7 +2165,7 @@ t1 CREATE TABLE `t1` ( `mos` tinyint(4) DEFAULT '0', `Tape` tinytext, PRIMARY KEY (`clipid`), - KEY `tape` (`Tape`(250)) + KEY `tape` (`Tape`(191)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 DROP TABLE t1; # === modified file 'mysql-test/r/type_blob.result' --- a/mysql-test/r/type_blob.result 2010-11-01 09:52:05 +0000 +++ b/mysql-test/r/type_blob.result 2011-06-01 14:57:29 +0000 @@ -359,15 +359,7 @@ drop table t1; create table t1 (a text, unique (a(2100))); ERROR 42000: Specified key was too long; max key length is 1000 bytes create table t1 (a text, key (a(2100))); -Warnings: -Warning 1071 Specified key was too long; max key length is 1000 bytes -show create table t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `a` text, - KEY `a` (`a`(1000)) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 -drop table t1; +ERROR 42000: Specified key was too long; max key length is 1000 bytes CREATE TABLE t1 ( t1_id bigint(21) NOT NULL auto_increment, _field_72 varchar(128) DEFAULT '' NOT NULL, === modified file 'mysql-test/suite/innodb/r/innodb.result' --- a/mysql-test/suite/innodb/r/innodb.result 2011-05-19 12:43:26 +0000 +++ b/mysql-test/suite/innodb/r/innodb.result 2011-06-01 14:57:29 +0000 @@ -2488,21 +2488,13 @@ create table t2 (col1 varbinary(768), in character set = latin1 engine = innodb; Warnings: Warning 1071 Specified key was too long; max key length is 767 bytes -create table t3 (col1 text, index(col1(768))) -character set = latin1 engine = innodb; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes -create table t4 (col1 blob, index(col1(768))) -character set = latin1 engine = innodb; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `col1` varchar(768) DEFAULT NULL, KEY `col1` (`col1`(767)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -drop table t1, t2, t3, t4; +drop table t1, t2; create table t1 (col1 varchar(768) primary key) character set = latin1 engine = innodb; ERROR 42000: Specified key was too long; max key length is 767 bytes @@ -2515,6 +2507,12 @@ ERROR 42000: Specified key was too long; create table t4 (col1 blob, primary key(col1(768))) character set = latin1 engine = innodb; ERROR 42000: Specified key was too long; max key length is 767 bytes +create table t3 (col1 text, index(col1(768))) +character set = latin1 engine = innodb; +ERROR 42000: Specified key was too long; max key length is 767 bytes +create table t4 (col1 blob, index(col1(768))) +character set = latin1 engine = innodb; +ERROR 42000: Specified key was too long; max key length is 767 bytes CREATE TABLE t1 ( id INT PRIMARY KEY === modified file 'mysql-test/suite/innodb/r/innodb_index_large_prefix.result' --- a/mysql-test/suite/innodb/r/innodb_index_large_prefix.result 2011-05-31 09:30:59 +0000 +++ b/mysql-test/suite/innodb/r/innodb_index_large_prefix.result 2011-06-01 14:57:29 +0000 @@ -162,15 +162,12 @@ rollback; drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=DYNAMIC, engine = innodb; create index idx on worklog5743(a(3073)); -Warnings: -Warning 1071 Specified key was too long; max key length is 3072 bytes -Warning 1071 Specified key was too long; max key length is 3072 bytes +ERROR 42000: Specified key was too long; max key length is 3072 bytes create index idx2 on worklog5743(a(3072)); show create table worklog5743; Table Create Table worklog5743 CREATE TABLE `worklog5743` ( `a` text NOT NULL, - KEY `idx` (`a`(3072)), KEY `idx2` (`a`(3072)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC drop table worklog5743; === modified file 'mysql-test/suite/innodb/r/innodb_mysql.result' --- a/mysql-test/suite/innodb/r/innodb_mysql.result 2011-05-26 16:23:52 +0000 +++ b/mysql-test/suite/innodb/r/innodb_mysql.result 2011-06-01 14:57:29 +0000 @@ -1128,14 +1128,11 @@ DROP TABLE t1; create table t1(a text) engine=innodb default charset=utf8; insert into t1 values('aaa'); alter table t1 add index(a(1024)); -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes -Warning 1071 Specified key was too long; max key length is 767 bytes +ERROR 42000: Specified key was too long; max key length is 767 bytes show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `a` text, - KEY `a` (`a`(255)) + `a` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8 drop table t1; CREATE TABLE t1 ( === modified file 'mysql-test/suite/innodb/r/innodb_prefix_index_liftedlimit.result' --- a/mysql-test/suite/innodb/r/innodb_prefix_index_liftedlimit.result 2011-06-01 09:55:08 +0000 +++ b/mysql-test/suite/innodb/r/innodb_prefix_index_liftedlimit.result 2011-06-01 14:57:29 +0000 @@ -1313,9 +1313,7 @@ WHERE col_1_text = REPEAT("c", 4000) AND col_1_text = REPEAT("c", 4000) DROP INDEX prefix_idx ON worklog5743; CREATE INDEX prefix_idx ON worklog5743(col_1_text (4000)); -Warnings: -Warning 1071 Specified key was too long; max key length is 3072 bytes -Warning 1071 Specified key was too long; max key length is 3072 bytes +ERROR 42000: Specified key was too long; max key length is 3072 bytes INSERT INTO worklog5743 VALUES(REPEAT("a", 4000),REPEAT("o", 4000)); SELECT col_1_text = REPEAT("a", 4000) FROM worklog5743; col_1_text = REPEAT("a", 4000) === modified file 'mysql-test/suite/innodb/t/innodb.test' --- a/mysql-test/suite/innodb/t/innodb.test 2011-05-19 12:43:26 +0000 +++ b/mysql-test/suite/innodb/t/innodb.test 2011-06-01 14:57:29 +0000 @@ -1544,28 +1544,30 @@ create table t1 (col1 varchar(768), inde character set = latin1 engine = innodb; create table t2 (col1 varbinary(768), index(col1)) character set = latin1 engine = innodb; -create table t3 (col1 text, index(col1(768))) - character set = latin1 engine = innodb; -create table t4 (col1 blob, index(col1(768))) - character set = latin1 engine = innodb; show create table t1; -drop table t1, t2, t3, t4; +drop table t1, t2; # these should be refused ---error 1071 +--error ER_TOO_LONG_KEY create table t1 (col1 varchar(768) primary key) character set = latin1 engine = innodb; ---error 1071 +--error ER_TOO_LONG_KEY create table t2 (col1 varbinary(768) primary key) character set = latin1 engine = innodb; ---error 1071 +--error ER_TOO_LONG_KEY create table t3 (col1 text, primary key(col1(768))) character set = latin1 engine = innodb; ---error 1071 +--error ER_TOO_LONG_KEY create table t4 (col1 blob, primary key(col1(768))) character set = latin1 engine = innodb; +--error ER_TOO_LONG_KEY +create table t3 (col1 text, index(col1(768))) + character set = latin1 engine = innodb; +--error ER_TOO_LONG_KEY +create table t4 (col1 blob, index(col1(768))) + character set = latin1 engine = innodb; # # Test improved foreign key error messages (bug #3443) === modified file 'mysql-test/suite/innodb/t/innodb_index_large_prefix.test' --- a/mysql-test/suite/innodb/t/innodb_index_large_prefix.test 2011-05-31 09:12:32 +0000 +++ b/mysql-test/suite/innodb/t/innodb_index_large_prefix.test 2011-06-01 14:57:29 +0000 @@ -246,7 +246,8 @@ drop table worklog5743; # We have a limit of 3072 bytes for Barracuda table create table worklog5743(a TEXT not null) ROW_FORMAT=DYNAMIC, engine = innodb; -# Length exceeds maximum supported key length, will auto-truncated to 3072 +# Length exceeds maximum supported key length, error reported +--error ER_TOO_LONG_KEY create index idx on worklog5743(a(3073)); create index idx2 on worklog5743(a(3072)); === modified file 'mysql-test/suite/innodb/t/innodb_prefix_index_liftedlimit.test' --- a/mysql-test/suite/innodb/t/innodb_prefix_index_liftedlimit.test 2011-06-01 09:55:08 +0000 +++ b/mysql-test/suite/innodb/t/innodb_prefix_index_liftedlimit.test 2011-06-01 14:57:29 +0000 @@ -1277,6 +1277,7 @@ DROP INDEX prefix_idx ON worklog5743; # If "innodb_large_prefix" is turned on, than the index prefix larger than 3072 # will be truncated to 3072. If the table is REDUNDANT and COMPACT, which does # not support prefix > 767, the create index will be rejected. +--error ER_TOO_LONG_KEY CREATE INDEX prefix_idx ON worklog5743(col_1_text (4000)); INSERT INTO worklog5743 VALUES(REPEAT("a", 4000),REPEAT("o", 4000)); SELECT col_1_text = REPEAT("a", 4000) FROM worklog5743; === modified file 'mysql-test/t/create.test' --- a/mysql-test/t/create.test 2011-02-21 02:57:30 +0000 +++ b/mysql-test/t/create.test 2011-06-01 14:57:29 +0000 @@ -2083,3 +2083,26 @@ create temporary table t1 select f(); drop view t2; drop function f; + + +--echo # +--echo # BUG#12585718 REPLICATION BREAKS WITH LARGE INDEX PREFIX ON UNIQUE INDEX +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# These used to give an error +--error ER_TOO_LONG_KEY +CREATE TABLE t1(col1 TEXT, UNIQUE INDEX(col1(1001))); +--error ER_TOO_LONG_KEY +CREATE TABLE t1(col1 VARCHAR(1001), UNIQUE INDEX(col1)); + +# This used to just give a warning, but should now give error +--error ER_TOO_LONG_KEY +CREATE TABLE t1(col1 TEXT, INDEX(col1(1001))); + +# This should still just give a warning +CREATE TABLE t1(col1 VARCHAR(1001), INDEX(col1)); +DROP TABLE t1; === modified file 'mysql-test/t/ctype_utf8mb4.test' --- a/mysql-test/t/ctype_utf8mb4.test 2010-09-28 15:29:26 +0000 +++ b/mysql-test/t/ctype_utf8mb4.test 2011-06-01 14:57:29 +0000 @@ -1544,7 +1544,7 @@ CREATE TABLE t1 ( clipid INT NOT NULL, Tape TINYTEXT, PRIMARY KEY (clipid), - KEY tape(Tape(255)) + KEY tape(Tape(250)) ) CHARACTER SET=utf8mb4; ALTER TABLE t1 ADD mos TINYINT DEFAULT 0 AFTER clipid; SHOW CREATE TABLE t1; === modified file 'mysql-test/t/type_blob.test' --- a/mysql-test/t/type_blob.test 2010-11-01 09:52:05 +0000 +++ b/mysql-test/t/type_blob.test 2011-06-01 14:57:29 +0000 @@ -131,11 +131,10 @@ select c,count(*) from t1 group by c; select d,count(*) from t1 group by d; drop table t1; --- error 1071 +--error ER_TOO_LONG_KEY create table t1 (a text, unique (a(2100))); # should give an error -create table t1 (a text, key (a(2100))); # key is auto-truncated -show create table t1; -drop table t1; +--error ER_TOO_LONG_KEY +create table t1 (a text, key (a(2100))); # also gives error # # Test of join with blobs and min === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2011-06-01 09:11:28 +0000 +++ b/sql/sql_table.cc 2011-06-01 14:57:29 +0000 @@ -3672,22 +3672,8 @@ mysql_prepare_create_table(THD *thd, HA_ length > file->max_key_part_length()) { length=min(max_key_length, file->max_key_part_length()); - if (key->type == Key::MULTIPLE) - { - /* not a critical problem */ - char warn_buff[MYSQL_ERRMSG_SIZE]; - my_snprintf(warn_buff, sizeof(warn_buff), ER(ER_TOO_LONG_KEY), - length); - push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_TOO_LONG_KEY, warn_buff); - /* Align key length to multibyte char boundary */ - length-= length % sql_field->charset->mbmaxlen; - } - else - { - my_error(ER_TOO_LONG_KEY,MYF(0),length); - DBUG_RETURN(TRUE); - } + my_error(ER_TOO_LONG_KEY,MYF(0),length); + DBUG_RETURN(TRUE); } } // Catch invalid use of partial keys --===============7139420709020245539== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-trunk-bug12585718/ # testament_sha1: 7faf8338959bff29de4292898ec309457f28e3b7 # timestamp: 2011-06-01 16:57:42 +0200 # source_branch: file:///export/home/x/mysql-5.5/ # base_revision_id: tor.didriksen@stripped\ # ay5pikeas9qu2rl0 # # Begin bundle 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 Ifvflk6T4ejOWyZPe02p/4u5IpwoSEWaL1mA --===============7139420709020245539==--