[Pkg-mysql-commits] r1135 - in trunk/debian: . patches

Norbert Tretkowski nobse at alioth.debian.org
Wed Jan 30 17:36:25 UTC 2008


tags 463137 pending
thanks

Author: nobse
Date: 2008-01-30 17:36:24 +0000 (Wed, 30 Jan 2008)
New Revision: 1135

Added:
   trunk/debian/patches/60_raise-max-keylength.dpatch
Modified:
   trunk/debian/changelog
   trunk/debian/patches/00list
Log:
Raise the maximum key length to 4005 bytes or 1335 UTF-8 characters.

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2008-01-29 18:02:19 UTC (rev 1134)
+++ trunk/debian/changelog	2008-01-30 17:36:24 UTC (rev 1135)
@@ -7,6 +7,8 @@
     + debian/patches/92_SECURITY_CVE-2007-6303.dpatch
     + debian/patches/93_SECURITY_CVE-2007-6304.dpatch
     + debian/patches/94_SECURITY_CVE-2008-0226+0227.dpatch
+  * New patch 60_raise-max-keylength.dpatch to raise the maximum key length to
+    4005 bytes or 1335 UTF-8 characters. (closes: 463137)
   * Add recommendation on libhtml-template-perl to -server package, used by
     ndb_size. (closes: #462265)
   * Update mysqlreport to 3.4a release.

Modified: trunk/debian/patches/00list
===================================================================
--- trunk/debian/patches/00list	2008-01-29 18:02:19 UTC (rev 1134)
+++ trunk/debian/patches/00list	2008-01-30 17:36:24 UTC (rev 1135)
@@ -11,6 +11,7 @@
 53_integer-gcc-4.2.dpatch
 54_ssl-client-support.dpatch
 55_testsuite-2008.dpatch
+60_raise-max-keylength.dpatch
 86_PATH_MAX.dpatch
 89_ndb__staticlib.dpatch
 90_upstreamdebiandir.dpatch

Added: trunk/debian/patches/60_raise-max-keylength.dpatch
===================================================================
--- trunk/debian/patches/60_raise-max-keylength.dpatch	                        (rev 0)
+++ trunk/debian/patches/60_raise-max-keylength.dpatch	2008-01-30 17:36:24 UTC (rev 1135)
@@ -0,0 +1,495 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 60_raise-max-keylength.dpatch by Norbert Tretkowski <nobse at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Raises the maximum key length to 4005 bytes or 1335 UTF-8 characters,
+## DP: which is the maximum raise possible without changing other parameters.
+
+ at DPATCH@
+diff -Nrup a/include/myisam.h b/include/myisam.h
+--- a/include/myisam.h	2006-12-23 20:04:05 +01:00
++++ b/include/myisam.h	2008-01-30 18:26:56 +01:00
+@@ -48,15 +48,27 @@ extern "C" {
+ #define MI_MAX_KEY                  MAX_INDEXES         /* Max allowed keys */
+ #endif
+ 
+-#define MI_MAX_POSSIBLE_KEY_BUFF    (1024+6+6)      /* For myisam_chk */
+ /*
+   The following defines can be increased if necessary.
+   But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and MI_MAX_KEY_LENGTH.
+ */
+-#define MI_MAX_KEY_LENGTH           1000            /* Max length in bytes */
+ #define MI_MAX_KEY_SEG              16              /* Max segments for key */
++  /*
++    Max key length computes from max key block. At least 4 keys should
++    go into a key block. Each key has a length (1 or 3 bytes), a data
++    file pointer (max 8 bytes), optionally a key file pointer (max 8
++    bytes), optional length per key segment (max 3 bytes), and an
++    optional null byte per key segment. The key_length computation in
++    mi_create() adds another data pointer per key (max 8 bytes). A block
++    has a 2 byte length and optionally a key file pointer. See
++    myisamdef.h:MI_BLOCK_SIZE() and mi_create(). With
++    MI_MAX_KEY_BLOCK_LENGTH = 16384 and MI_MAX_KEY_SEG = 16 we have
++    (16384-2-8)/4-8-8-(8+(3+1)*16) = 4005 bytes.
++  */
++#define MI_MAX_KEY_LENGTH 4005          /* Max key length in bytes */
+ 
+ #define MI_MAX_KEY_BUFF  (MI_MAX_KEY_LENGTH+MI_MAX_KEY_SEG*6+8+8)
++#define MI_MAX_POSSIBLE_KEY_BUFF (MI_MAX_KEY_LENGTH+24+6+6) /* For myisam_chk */
+ #define MI_MAX_MSG_BUF      1024 /* used in CHECK TABLE, REPAIR TABLE */
+ #define MI_NAME_IEXT	".MYI"
+ #define MI_NAME_DEXT	".MYD"
+diff -Nrup a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
+--- a/mysql-test/r/ctype_utf8.result	2007-10-30 09:20:28 +01:00
++++ b/mysql-test/r/ctype_utf8.result	2008-01-30 18:26:56 +01:00
+@@ -240,8 +240,10 @@ select hex(s1) from t1;
+ hex(s1)
+ 41
+ drop table t1;
+-create table t1 (a text character set utf8, primary key(a(360)));
+-ERROR 42000: Specified key was too long; max key length is 1000 bytes
++create table t1 (a text character set utf8, primary key(a(1336)));
++ERROR 42000: Specified key was too long; max key length is 4005 bytes
++create table t1 (a text character set utf8, primary key(a(1335)));
++drop table t1;
+ CREATE TABLE t1 ( a varchar(10) ) CHARACTER SET utf8;
+ INSERT INTO t1 VALUES ( 'test' );
+ SELECT a.a, b.a FROM t1 a, t1 b WHERE a.a = b.a;
+diff -Nrup a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result
+--- a/mysql-test/r/innodb.result	2007-12-13 11:49:11 +01:00
++++ b/mysql-test/r/innodb.result	2008-01-30 18:26:56 +01:00
+@@ -2773,7 +2773,7 @@ c varchar(255) character set utf8,
+ d varchar(255) character set utf8,
+ e varchar(255) character set utf8,
+ key (a,b,c,d,e)) engine=innodb;
+-ERROR 42000: Specified key was too long; max key length is 3072 bytes
++ERROR 42000: Specified key was too long; max key length is 3500 bytes
+ create table t1 (s1 varbinary(2),primary key (s1)) engine=innodb;
+ create table t2 (s1 binary(2),primary key (s1)) engine=innodb;
+ create table t3 (s1 varchar(2) binary,primary key (s1)) engine=innodb;
+diff -Nrup a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
+--- a/mysql-test/r/myisam.result	2008-01-16 12:15:56 +01:00
++++ b/mysql-test/r/myisam.result	2008-01-30 18:26:56 +01:00
+@@ -322,11 +322,34 @@ CHECK TABLE t1;
+ Table	Op	Msg_type	Msg_text
+ test.t1	check	status	OK
+ drop table t1;
+-CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255), KEY t1 (a, b, c, d, e));
+-ERROR 42000: Specified key was too long; max key length is 1000 bytes
+-CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255));
+-ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e);
+-ERROR 42000: Specified key was too long; max key length is 1000 bytes
++CREATE TABLE t1 (
++a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++m varchar(255), n varchar(255), o varchar(255), p varchar(181),
++KEY t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p));
++ERROR 42000: Specified key was too long; max key length is 4005 bytes
++CREATE TABLE t1 (
++a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++m varchar(255), n varchar(255), o varchar(255), p varchar(181));
++ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
++ERROR 42000: Specified key was too long; max key length is 4005 bytes
++DROP TABLE t1;
++CREATE TABLE t1 (
++a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++m varchar(255), n varchar(255), o varchar(255), p varchar(180),
++KEY t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p));
++DROP TABLE t1;
++CREATE TABLE t1 (
++a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++m varchar(255), n varchar(255), o varchar(255), p varchar(180));
++ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
+ DROP TABLE t1;
+ CREATE TABLE t1 (a int not null, b int, c int, key(b), key(c), key(a,b), key(c,a));
+ INSERT into t1 values (0, null, 0), (0, null, 1), (0, null, 2), (0, null,3), (1,1,4);
+@@ -1093,6 +1116,186 @@ length(c1)	c1
+ 2		A
+ 2	 B
+ DROP TABLE t1;
++CREATE TABLE t1 (
++c1 VARCHAR(255) NOT NULL,
++c2 VARCHAR(255) NOT NULL,
++c3 VARCHAR(255) NOT NULL,
++c4 VARCHAR(255) NOT NULL,
++c5 VARCHAR(255) NOT NULL,
++c6 VARCHAR(61),
++KEY i1 (c1, c2, c3, c4, c5, c6)) DEFAULT CHARSET=UTF8;
++ERROR 42000: Specified key was too long; max key length is 4005 bytes
++CREATE TABLE t1 (
++c1 VARCHAR(255) NOT NULL,
++c2 VARCHAR(255) NOT NULL,
++c3 VARCHAR(255) NOT NULL,
++c4 VARCHAR(255) NOT NULL,
++c5 VARCHAR(255) NOT NULL,
++c6 VARCHAR(60),
++KEY i1 (c1, c2, c3, c4, c5, c6)) DEFAULT CHARSET=UTF8;
++INSERT INTO t1 VALUES
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '1')),
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '7')),
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '5')),
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '8')),
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '6')),
++(REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '5'));
++CHECK TABLE t1 EXTENDED;
++Table	Op	Msg_type	Msg_text
++test.t1	check	status	OK
++OPTIMIZE TABLE t1;
++Table	test.t1
++Op	optimize
++Msg_type	status
++Msg_text	OK
++SHOW CREATE TABLE t1;
++Table	t1
++Create Table	CREATE TABLE `t1` (
++  `c1` varchar(255) NOT NULL,
++  `c2` varchar(255) NOT NULL,
++  `c3` varchar(255) NOT NULL,
++  `c4` varchar(255) NOT NULL,
++  `c5` varchar(255) NOT NULL,
++  `c6` varchar(60) default NULL,
++  KEY `i1` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`)
++) ENGINE=MyISAM DEFAULT CHARSET=utf8
++SHOW TABLE STATUS LIKE 't1';
++Name	t1
++Engine	MyISAM
++Version	10
++Row_format	Dynamic
++Rows	6
++Avg_row_length	#
++Data_length	#
++Max_data_length	#
++Index_length	#
++Data_free	0
++Auto_increment	NULL
++Create_time	#
++Update_time	#
++Check_time	#
++Collation	utf8_general_ci
++Checksum	NULL
++Create_options	
++Comment	
++SHOW INDEX FROM t1;
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	1
++Column_name	c1
++Collation	A
++Cardinality	1
++Sub_part	NULL
++Packed	NULL
++Null	
++Index_type	BTREE
++Comment	
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	2
++Column_name	c2
++Collation	A
++Cardinality	1
++Sub_part	NULL
++Packed	NULL
++Null	
++Index_type	BTREE
++Comment	
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	3
++Column_name	c3
++Collation	A
++Cardinality	1
++Sub_part	NULL
++Packed	NULL
++Null	
++Index_type	BTREE
++Comment	
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	4
++Column_name	c4
++Collation	A
++Cardinality	1
++Sub_part	NULL
++Packed	NULL
++Null	
++Index_type	BTREE
++Comment	
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	5
++Column_name	c5
++Collation	A
++Cardinality	1
++Sub_part	NULL
++Packed	NULL
++Null	
++Index_type	BTREE
++Comment	
++Table	t1
++Non_unique	1
++Key_name	i1
++Seq_in_index	6
++Column_name	c6
++Collation	A
++Cardinality	6
++Sub_part	NULL
++Packed	NULL
++Null	YES
++Index_type	BTREE
++Comment	
++EXPLAIN SELECT SUBSTR(c6, 50) FROM t1
++ORDER BY c1, c2, c3, c4, c5, c6;
++id	1
++select_type	SIMPLE
++table	t1
++type	index
++possible_keys	NULL
++key	i1
++key_len	4018
++ref	NULL
++rows	6
++Extra	Using index
++SELECT SUBSTR(c6, 50) FROM t1 ORDER BY c1, c2, c3, c4, c5, c6;
++SUBSTR(c6, 50)
++MMMMMMMMMM1
++MMMMMMMMMM5
++MMMMMMMMMM5
++MMMMMMMMMM6
++MMMMMMMMMM7
++MMMMMMMMMM8
++DELETE FROM t1 WHERE c6 LIKE '%5' LIMIT 1;
++UPDATE t1 SET c6 = CONCAT(REPEAT('M', 59), '9') WHERE c6 LIKE '%1';
++SELECT SUBSTR(c6, 50) FROM t1 ORDER BY c1, c2, c3, c4, c5, c6;
++SUBSTR(c6, 50)
++MMMMMMMMMM5
++MMMMMMMMMM6
++MMMMMMMMMM7
++MMMMMMMMMM8
++MMMMMMMMMM9
++CHECK TABLE t1 EXTENDED;
++Table	Op	Msg_type	Msg_text
++test.t1	check	status	OK
++REPAIR TABLE t1 EXTENDED;
++Table	Op	Msg_type	Msg_text
++test.t1	repair	status	OK
++CHECK TABLE t1 EXTENDED;
++Table	Op	Msg_type	Msg_text
++test.t1	check	status	OK
++DROP TABLE t1;
+ End of 4.1 tests
+ set storage_engine=MyISAM;
+ drop table if exists t1,t2,t3;
+@@ -1668,7 +1871,7 @@ a	b
+ drop table t1;
+ create table t1 (v varchar(65530), key(v));
+ Warnings:
+-Warning	1071	Specified key was too long; max key length is 1000 bytes
++Warning	1071	Specified key was too long; max key length is 4005 bytes
+ drop table if exists t1;
+ create table t1 (v varchar(65536));
+ Warnings:
+diff -Nrup a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result
+--- a/mysql-test/r/type_blob.result	2007-11-19 18:34:12 +01:00
++++ b/mysql-test/r/type_blob.result	2008-01-30 18:26:56 +01:00
+@@ -356,16 +356,24 @@ HELLO MY	1
+ a	1
+ hello	1
+ 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)));
++create table t1 (a text, unique (a(4006)));
++ERROR 42000: Specified key was too long; max key length is 4005 bytes
++create table t1 (a text, unique (a(4005)));
++show create table t1;
++Table	Create Table
++t1	CREATE TABLE `t1` (
++  `a` text,
++  UNIQUE KEY `a` (`a`(4005))
++) ENGINE=MyISAM DEFAULT CHARSET=latin1
++drop table t1;
++create table t1 (a text, key (a(4006)));
+ Warnings:
+-Warning	1071	Specified key was too long; max key length is 1000 bytes
++Warning	1071	Specified key was too long; max key length is 4005 bytes
+ show create table t1;
+ Table	Create Table
+ t1	CREATE TABLE `t1` (
+   `a` text,
+-  KEY `a` (`a`(1000))
++  KEY `a` (`a`(4005))
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin1
+ drop table t1;
+ CREATE TABLE t1 (
+diff -Nrup a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
+--- a/mysql-test/t/ctype_utf8.test	2007-10-30 09:20:28 +01:00
++++ b/mysql-test/t/ctype_utf8.test	2008-01-30 18:26:56 +01:00
+@@ -162,9 +162,12 @@ drop table t1;
+ #
+ # Bug 2699
+ # UTF8 breaks primary keys for cols > 333 characters
++# Limit raised to 1335 UTF-8 chars by fix for Bug#4541. See myisam.test.
+ #
+ --error 1071
+-create table t1 (a text character set utf8, primary key(a(360)));
++create table t1 (a text character set utf8, primary key(a(1336)));
++create table t1 (a text character set utf8, primary key(a(1335)));
++drop table t1;
+ 
+ 
+ #
+diff -Nrup a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
+--- a/mysql-test/t/myisam.test	2008-01-16 12:15:56 +01:00
++++ b/mysql-test/t/myisam.test	2008-01-30 18:26:56 +01:00
+@@ -334,13 +334,36 @@ drop table t1;
+ 
+ #
+ # Test of creating table with too long key
++# Limit raised to 4005 bytes by fix for Bug#4541. See myisam.test.
+ #
+-
+ --error 1071
+-CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255), KEY t1 (a, b, c, d, e));
+-CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255));
++CREATE TABLE t1 (
++  a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++  e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++  i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++  m varchar(255), n varchar(255), o varchar(255), p varchar(181),
++  KEY t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p));
++CREATE TABLE t1 (
++  a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++  e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++  i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++  m varchar(255), n varchar(255), o varchar(255), p varchar(181));
+ --error 1071
+-ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e);
++ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
++DROP TABLE t1;
++CREATE TABLE t1 (
++  a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++  e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++  i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++  m varchar(255), n varchar(255), o varchar(255), p varchar(180),
++  KEY t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p));
++DROP TABLE t1;
++CREATE TABLE t1 (
++  a varchar(255), b varchar(255), c varchar(255), d varchar(255),
++  e varchar(255), f varchar(255), g varchar(255), h varchar(255),
++  i varchar(255), j varchar(255), k varchar(255), l varchar(255),
++  m varchar(255), n varchar(255), o varchar(255), p varchar(180));
++ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
+ DROP TABLE t1;
+ 
+ #
+@@ -1016,6 +1039,59 @@ SELECT DISTINCT length(c1), c1 FROM t1 W
+ SELECT DISTINCT COUNT(*) FROM t1 IGNORE INDEX (c1) WHERE c1 = '';
+ SELECT DISTINCT length(c1), c1 FROM t1 IGNORE INDEX (c1) WHERE c1 = '';
+ SELECT DISTINCT length(c1), c1 FROM t1 ORDER BY c1;
++DROP TABLE t1;
++
++#
++# Bug#4541 - "Specified key was too long; max key length is 1000 bytes"
++#            with utf8
++# Raised limit for max key length from 1000 to 4005 bytes.
++# This is maximum without changing other limits (e.g. MI_MAX_KEY_BLOCK_LENGTH)
++#
++--error 1071
++CREATE TABLE t1 (
++  c1 VARCHAR(255) NOT NULL,
++  c2 VARCHAR(255) NOT NULL,
++  c3 VARCHAR(255) NOT NULL,
++  c4 VARCHAR(255) NOT NULL,
++  c5 VARCHAR(255) NOT NULL,
++  c6 VARCHAR(61),
++  KEY i1 (c1, c2, c3, c4, c5, c6)) DEFAULT CHARSET=UTF8;
++CREATE TABLE t1 (
++  c1 VARCHAR(255) NOT NULL,
++  c2 VARCHAR(255) NOT NULL,
++  c3 VARCHAR(255) NOT NULL,
++  c4 VARCHAR(255) NOT NULL,
++  c5 VARCHAR(255) NOT NULL,
++  c6 VARCHAR(60),
++  KEY i1 (c1, c2, c3, c4, c5, c6)) DEFAULT CHARSET=UTF8;
++INSERT INTO t1 VALUES
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '1')),
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '7')),
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '5')),
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '8')),
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '6')),
++  (REPEAT('0', 255), REPEAT('0', 255), REPEAT('0', 255),
++   REPEAT('0', 255), REPEAT('0', 255), CONCAT(REPEAT('M', 59), '5'));
++CHECK TABLE t1 EXTENDED;
++query_vertical OPTIMIZE TABLE t1;
++query_vertical SHOW CREATE TABLE t1;
++--replace_column 6 # 7 # 8 # 9 # 12 # 13 # 14 #
++query_vertical SHOW TABLE STATUS LIKE 't1';
++query_vertical SHOW INDEX FROM t1;
++query_vertical EXPLAIN SELECT SUBSTR(c6, 50) FROM t1
++                         ORDER BY c1, c2, c3, c4, c5, c6;
++SELECT SUBSTR(c6, 50) FROM t1 ORDER BY c1, c2, c3, c4, c5, c6;
++DELETE FROM t1 WHERE c6 LIKE '%5' LIMIT 1;
++UPDATE t1 SET c6 = CONCAT(REPEAT('M', 59), '9') WHERE c6 LIKE '%1';
++SELECT SUBSTR(c6, 50) FROM t1 ORDER BY c1, c2, c3, c4, c5, c6;
++CHECK TABLE t1 EXTENDED;
++REPAIR TABLE t1 EXTENDED;
++CHECK TABLE t1 EXTENDED;
+ DROP TABLE t1;
+ 
+ --echo End of 4.1 tests
+diff -Nrup a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test
+--- a/mysql-test/t/type_blob.test	2007-11-19 18:34:12 +01:00
++++ b/mysql-test/t/type_blob.test	2008-01-30 18:26:56 +01:00
+@@ -131,9 +131,15 @@ select c,count(*) from t1 group by c;
+ select d,count(*) from t1 group by d;
+ drop table t1;
+ 
++#
++# Limit raised to 4005 bytes by fix for Bug#4541. See myisam.test.
++#
+ -- error 1071
+-create table t1 (a text, unique (a(2100))); # should give an error
+-create table t1 (a text, key (a(2100)));    # key is auto-truncated
++create table t1 (a text, unique (a(4006))); # should give an error
++create table t1 (a text, unique (a(4005))); # should give an error
++show create table t1;
++drop table t1;
++create table t1 (a text, key (a(4006)));    # key is auto-truncated
+ show create table t1;
+ drop table t1;
+ 
+diff -Nrup a/sql/unireg.h b/sql/unireg.h
+--- a/sql/unireg.h	2007-08-02 22:57:41 +02:00
++++ b/sql/unireg.h	2008-01-30 18:26:56 +01:00
+@@ -49,7 +49,7 @@
+ #define MAX_SYS_VAR_LENGTH 32
+ #define MAX_KEY MAX_INDEXES                     /* Max used keys */
+ #define MAX_REF_PARTS 16			/* Max parts used as ref */
+-#define MAX_KEY_LENGTH 3072			/* max possible key */
++#define MAX_KEY_LENGTH 4005 /* myisamdef.h */   /* max possible key */
+ #if SIZEOF_OFF_T > 4
+ #define MAX_REFLENGTH 8				/* Max length for record ref */
+ #else




More information about the Pkg-mysql-commits mailing list