summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <istruewing@chilla.local>2007-03-23 10:26:14 +0100
committerunknown <istruewing@chilla.local>2007-03-23 10:26:14 +0100
commitab785bfe5b505a0a5c7e91edcb5f5fc2a2516b86 (patch)
treec8b467d81f5fa4ed14130219bc4b96b7c38cb9b8
parentb17ca5c738a6b1958b6677fb35e6616a42a2f63b (diff)
downloadmariadb-git-ab785bfe5b505a0a5c7e91edcb5f5fc2a2516b86.tar.gz
Bug#26782 - Patch: myisamchk -rq creates .MYI.MYI file on packed MyISAM tables
After merge fix In conjunction with the newest 5.1 we always need to create a real path name to be able to detect already open tables.
-rw-r--r--storage/myisam/mi_create.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c
index 5ce07c5ac4e..71d377c8b6b 100644
--- a/storage/myisam/mi_create.c
+++ b/storage/myisam/mi_create.c
@@ -573,6 +573,10 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
pthread_mutex_lock(&THR_LOCK_myisam);
+ /*
+ NOTE: For test_if_reopen() we need a real path name. Hence we need
+ MY_RETURN_REAL_PATH for every fn_format(filename, ...).
+ */
if (ci->index_file_name)
{
char *iext= strrchr(ci->index_file_name, '.');
@@ -584,13 +588,14 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if ((path= strrchr(ci->index_file_name, FN_LIBCHAR)))
*path= '\0';
fn_format(filename, name, ci->index_file_name, MI_NAME_IEXT,
- MY_REPLACE_DIR | MY_UNPACK_FILENAME | MY_APPEND_EXT);
+ MY_REPLACE_DIR | MY_UNPACK_FILENAME |
+ MY_RETURN_REAL_PATH | MY_APPEND_EXT);
}
else
{
fn_format(filename, ci->index_file_name, "", MI_NAME_IEXT,
- MY_UNPACK_FILENAME | (have_iext ? MY_REPLACE_EXT :
- MY_APPEND_EXT));
+ MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH |
+ (have_iext ? MY_REPLACE_EXT : MY_APPEND_EXT));
}
fn_format(linkname, name, "", MI_NAME_IEXT,
MY_UNPACK_FILENAME|MY_APPEND_EXT);
@@ -606,8 +611,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
char *iext= strrchr(name, '.');
int have_iext= iext && !strcmp(iext, MI_NAME_IEXT);
fn_format(filename, name, "", MI_NAME_IEXT,
- MY_UNPACK_FILENAME |
- ((flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) |
+ MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH |
(have_iext ? MY_REPLACE_EXT : MY_APPEND_EXT));
linkname_ptr=0;
/* Replace the current file */
@@ -620,6 +624,9 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
A TRUNCATE command checks for the table in the cache only and could
be fooled to believe, the table is not open.
Pull the emergency brake in this situation. (Bug #8306)
+
+ NOTE: The filename is compared against unique_file_name of every
+ open table. Hence we need a real path here.
*/
if (test_if_reopen(filename))
{