3412 Marko Mäkelä 2010-04-21
dict_create_index_step(): Be strict about DYNAMIC and COMPRESSED tables.
Bug #50495 is about REDUNDANT and COMPACT tables, after all.
modified:
mysql-test/suite/innodb_plugin/r/innodb-zip.result
mysql-test/suite/innodb_plugin/t/innodb-zip.test
storage/innodb_plugin/ChangeLog
storage/innodb_plugin/dict/dict0crea.c
3411 Marko Mäkelä 2010-04-21
ha_innobase::add_index(): Only check for duplicate indexes
when the data dictionary is locked.
This fixes a UNIV_DEBUG assertion failure in innodb-index.test.
modified:
storage/innodb_plugin/handler/handler0alter.cc
=== modified file 'mysql-test/suite/innodb_plugin/r/innodb-zip.result'
--- a/mysql-test/suite/innodb_plugin/r/innodb-zip.result 2010-04-21 09:40:32 +0000
+++ b/mysql-test/suite/innodb_plugin/r/innodb-zip.result 2010-04-21 10:27:23 +0000
@@ -127,12 +127,6 @@ CREATE TABLE t1(
c TEXT NOT NULL, d TEXT NOT NULL,
PRIMARY KEY (c(767),d(767)))
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
-DROP TABLE t1;
-SET SESSION innodb_strict_mode = on;
-CREATE TABLE t1(
-c TEXT NOT NULL, d TEXT NOT NULL,
-PRIMARY KEY (c(767),d(767)))
-ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
CREATE TABLE t1(
c TEXT NOT NULL, d TEXT NOT NULL,
=== modified file 'mysql-test/suite/innodb_plugin/t/innodb-zip.test'
--- a/mysql-test/suite/innodb_plugin/t/innodb-zip.test 2010-04-21 09:40:32 +0000
+++ b/mysql-test/suite/innodb_plugin/t/innodb-zip.test 2010-04-21 10:27:23 +0000
@@ -85,14 +85,9 @@ SELECT table_schema, table_name, row_for
FROM information_schema.tables WHERE engine='innodb';
drop table t1,t2;
-# The following should not fail in non-strict mode. (Bug #50945)
+# The following should fail in non-strict mode too.
+# (The fix of Bug #50945 only affects REDUNDANT and COMPACT tables.)
SET SESSION innodb_strict_mode = off;
-CREATE TABLE t1(
- c TEXT NOT NULL, d TEXT NOT NULL,
- PRIMARY KEY (c(767),d(767)))
-ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
-DROP TABLE t1;
-SET SESSION innodb_strict_mode = on;
--error ER_TOO_BIG_ROWSIZE
CREATE TABLE t1(
c TEXT NOT NULL, d TEXT NOT NULL,
=== modified file 'storage/innodb_plugin/ChangeLog'
--- a/storage/innodb_plugin/ChangeLog 2010-04-21 09:50:33 +0000
+++ b/storage/innodb_plugin/ChangeLog 2010-04-21 10:27:23 +0000
@@ -9,7 +9,7 @@
Fix Bug#50495 'Row size too large' for plugin, but works for
built-in InnoDB
Only check the record size at index creation time when
- innodb_strict_mode is set.
+ innodb_strict_mode is set or when ROW_FORMAT is DYNAMIC or COMPRESSED.
2010-04-20 The InnoDB Team
=== modified file 'storage/innodb_plugin/dict/dict0crea.c'
--- a/storage/innodb_plugin/dict/dict0crea.c 2010-04-20 11:42:22 +0000
+++ b/storage/innodb_plugin/dict/dict0crea.c 2010-04-21 10:27:23 +0000
@@ -1105,8 +1105,11 @@ dict_create_index_step(
dulint index_id = node->index->id;
- err = dict_index_add_to_cache(node->table, node->index,
- FIL_NULL, trx_is_strict(trx));
+ err = dict_index_add_to_cache(
+ node->table, node->index, FIL_NULL,
+ trx_is_strict(trx)
+ || dict_table_get_format(node->table)
+ >= DICT_TF_FORMAT_ZIP);
node->index = dict_index_get_if_in_cache_low(index_id);
ut_a(!node->index == (err != DB_SUCCESS));
Attachment: [text/bzr-bundle] bzr/marko.makela@oracle.com-20100421102723-0i80uezbyu0ekj5d.bundle
| Thread |
|---|
| • bzr push into mysql-5.1-innodb branch (marko.makela:3411 to 3412) Bug#50495 | marko.makela | 21 Apr |