summaryrefslogtreecommitdiff
path: root/sql/ha_myisam.cc
diff options
context:
space:
mode:
authorunknown <svoj@april.(none)>2006-09-12 18:25:35 +0500
committerunknown <svoj@april.(none)>2006-09-12 18:25:35 +0500
commitfa1436bf1f87cbe627d42e75b5e84cf7eb40b6b8 (patch)
treef55c1bef77080c8bc784fbe2aac8f150441acea5 /sql/ha_myisam.cc
parent86ce30966e8cd3c1d662c34f488a1c26f640b8f7 (diff)
downloadmariadb-git-fa1436bf1f87cbe627d42e75b5e84cf7eb40b6b8.tar.gz
BUG#20256 - LOCK WRITE - MyISAM
Only MyISAM tables locked with LOCK TABLES ... WRITE were affected. A query that is optimized with index_merge doesn't reflect rows inserted within LOCK TABLES. MyISAM doesn't flush a state within LOCK TABLES. index_merge optimization creates a copy of the handler, which thus gets outdated MyISAM state. New handler->clone() method is introduced to fix this problem. For non-MyISAM storage engines it allocates a handler and opens it with ha_open(). For MyISAM it additionally copies MyISAM state pointer to cloned handler. mysql-test/r/index_merge.result: A test case for bug#20256. mysql-test/t/index_merge.test: A test case for bug#20256. sql/ha_myisam.cc: clone method added to handler class. sql/ha_myisam.h: clone method added to handler class. sql/handler.cc: clone method added to handler class. sql/handler.h: clone method added to handler class. sql/opt_range.cc: Use handler clone method.
Diffstat (limited to 'sql/ha_myisam.cc')
-rw-r--r--sql/ha_myisam.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc
index 128cc191434..876cd33ec9c 100644
--- a/sql/ha_myisam.cc
+++ b/sql/ha_myisam.cc
@@ -169,6 +169,14 @@ ha_myisam::ha_myisam(TABLE *table_arg)
can_enable_indexes(1)
{}
+handler *ha_myisam::clone(MEM_ROOT *mem_root)
+{
+ ha_myisam *new_handler= static_cast <ha_myisam *>(handler::clone(mem_root));
+ if (new_handler)
+ new_handler->file->state= file->state;
+ return new_handler;
+}
+
static const char *ha_myisam_exts[] = {
".MYI",