diff options
author | svoj@mysql.com/june.mysql.com <> | 2007-02-28 14:27:19 +0400 |
---|---|---|
committer | svoj@mysql.com/june.mysql.com <> | 2007-02-28 14:27:19 +0400 |
commit | ddb8131207c7b58203ca5b5729827f507323c3c6 (patch) | |
tree | 6e3106943b538567d2e7cd8909c4539bb3d90015 | |
parent | 36c9f410c8fceed1c4120de1e2643cfe1a6b06ab (diff) | |
download | mariadb-git-ddb8131207c7b58203ca5b5729827f507323c3c6.tar.gz |
BUG#26080 - Memory Storage engine not working properly
Extending varchar column length with ALTER TABLE may result in unusable
memory table.
The problem is that we use fast ALTER TABLE in this case, which is not
supported by now.
This is fixed by refusing fast ALTER TABLE when extending varchar column.
In other words force copy of a table during ALTER TABLE.
Affects MEMORY tables in 5.1 only.
-rw-r--r-- | mysql-test/r/heap.result | 7 | ||||
-rw-r--r-- | mysql-test/t/heap.test | 9 | ||||
-rw-r--r-- | storage/heap/ha_heap.cc | 7 |
3 files changed, 20 insertions, 3 deletions
diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index 29bdfcbef7a..ddf675e2f73 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -731,3 +731,10 @@ SELECT COUNT(*) FROM t1 WHERE c=REPEAT('a',256); COUNT(*) 2 DROP TABLE t1; +CREATE TABLE t1(c1 VARCHAR(100), c2 INT) ENGINE=MEMORY; +INSERT INTO t1 VALUES('', 0); +ALTER TABLE t1 MODIFY c1 VARCHAR(101); +SELECT c2 FROM t1; +c2 +0 +DROP TABLE t1; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index 624597cd8d7..b47a5fc2033 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -471,3 +471,12 @@ SELECT COUNT(*) FROM t1 WHERE c=REPEAT('a',256); DROP TABLE t1; # End of 5.0 tests + +# +# BUG#26080 - Memory Storage engine not working properly +# +CREATE TABLE t1(c1 VARCHAR(100), c2 INT) ENGINE=MEMORY; +INSERT INTO t1 VALUES('', 0); +ALTER TABLE t1 MODIFY c1 VARCHAR(101); +SELECT c2 FROM t1; +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index cf11c9923eb..f2caa7e6d18 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -703,9 +703,10 @@ bool ha_heap::check_if_incompatible_data(HA_CREATE_INFO *info, uint table_changes) { /* Check that auto_increment value was not changed */ - if ((table_changes != IS_EQUAL_YES && - info->used_fields & HA_CREATE_USED_AUTO) && - info->auto_increment_value != 0) + if ((info->used_fields & HA_CREATE_USED_AUTO && + info->auto_increment_value != 0) || + table_changes == IS_EQUAL_NO || + table_changes & IS_EQUAL_PACK_LENGTH) // Not implemented yet return COMPATIBLE_DATA_NO; return COMPATIBLE_DATA_YES; } |