summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsvoj@june.mysql.com <>2007-03-02 14:17:55 +0400
committersvoj@june.mysql.com <>2007-03-02 14:17:55 +0400
commit31322ca0cb339f4e5647bb1fdbc82e1f010b0aa2 (patch)
tree353ee67196d3da05469ae822c2225d68dd61cb45
parent2baf35b4fab1cd1c185b7b98645eb76ed88d9f73 (diff)
parentddb8131207c7b58203ca5b5729827f507323c3c6 (diff)
downloadmariadb-git-31322ca0cb339f4e5647bb1fdbc82e1f010b0aa2.tar.gz
Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.1
into mysql.com:/home/svoj/devel/mysql/BUG26238/mysql-5.1-engines
-rw-r--r--mysql-test/r/heap.result7
-rw-r--r--mysql-test/t/heap.test9
-rw-r--r--storage/heap/ha_heap.cc7
-rw-r--r--storage/myisam/mi_open.c24
4 files changed, 28 insertions, 19 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;
}
diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
index 830332fe0c1..a06b21ee5b4 100644
--- a/storage/myisam/mi_open.c
+++ b/storage/myisam/mi_open.c
@@ -506,22 +506,6 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share->data_file_type = DYNAMIC_RECORD;
my_afree((gptr) disk_cache);
mi_setup_functions(share);
- if (open_flags & HA_OPEN_MMAP)
- {
- info.s= share;
- if (mi_dynmap_file(&info, share->state.state.data_file_length))
- {
- /* purecov: begin inspected */
- /* Ignore if mmap fails. Use file I/O instead. */
- DBUG_PRINT("warning", ("mmap failed: errno: %d", errno));
- /* purecov: end */
- }
- else
- {
- share->file_read= mi_mmap_pread;
- share->file_write= mi_mmap_pwrite;
- }
- }
share->is_log_table= FALSE;
#ifdef THREAD
thr_lock_init(&share->lock);
@@ -552,6 +536,14 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
}
}
#endif
+ /*
+ Memory mapping can only be requested after initializing intern_lock.
+ */
+ if (open_flags & HA_OPEN_MMAP)
+ {
+ info.s= share;
+ mi_extra(&info, HA_EXTRA_MMAP, 0);
+ }
}
else
{