diff options
author | unknown <istruewing@chilla.local> | 2007-03-23 10:26:14 +0100 |
---|---|---|
committer | unknown <istruewing@chilla.local> | 2007-03-23 10:26:14 +0100 |
commit | ab785bfe5b505a0a5c7e91edcb5f5fc2a2516b86 (patch) | |
tree | c8b467d81f5fa4ed14130219bc4b96b7c38cb9b8 | |
parent | b17ca5c738a6b1958b6677fb35e6616a42a2f63b (diff) | |
download | mariadb-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.c | 17 |
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)) { |