summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsvoj@mysql.com/june.mysql.com <>2007-02-28 14:27:19 +0400
committersvoj@mysql.com/june.mysql.com <>2007-02-28 14:27:19 +0400
commitddb8131207c7b58203ca5b5729827f507323c3c6 (patch)
tree6e3106943b538567d2e7cd8909c4539bb3d90015
parent36c9f410c8fceed1c4120de1e2643cfe1a6b06ab (diff)
downloadmariadb-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.result7
-rw-r--r--mysql-test/t/heap.test9
-rw-r--r--storage/heap/ha_heap.cc7
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;
}