summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <acurtis@xiphis.org>2006-07-05 17:18:59 -0700
committerunknown <acurtis@xiphis.org>2006-07-05 17:18:59 -0700
commit854d7c4d4f5ccc110f65dd740e304a196428b3d6 (patch)
tree399f52e407d89318f0656e4e938b4f98d202ea6d /myisam
parent8fdac9c74b0dbd7f6c8fc073b1c0e69864840245 (diff)
downloadmariadb-git-854d7c4d4f5ccc110f65dd740e304a196428b3d6.tar.gz
Bug#8706
"temporary table with data directory option fails" myisam should not use user-specified table name when creating temporary tables and use generated connection specific real name. Test included. myisam/mi_create.c: Bug#8706 When creating a temporary table with directory override, ensure that the real filename is using the hidden temporary name otherwise multiple clients cannot have same named temporary tables without conflict. mysql-test/r/myisam.result: Bug#8706 Test for bug mysql-test/t/myisam.test: Bug#8706 Test for bug
Diffstat (limited to 'myisam')
-rw-r--r--myisam/mi_create.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/myisam/mi_create.c b/myisam/mi_create.c
index 41c965c7c80..d15cad2840f 100644
--- a/myisam/mi_create.c
+++ b/myisam/mi_create.c
@@ -519,9 +519,20 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if (ci->index_file_name)
{
- fn_format(filename, ci->index_file_name,"",MI_NAME_IEXT,4);
- fn_format(linkname,name, "",MI_NAME_IEXT,4);
- linkname_ptr=linkname;
+ if (options & HA_OPTION_TMP_TABLE)
+ {
+ char *path;
+ /* chop off the table name, tempory tables use generated name */
+ 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);
+ }
+ else
+ fn_format(filename, ci->index_file_name, "",
+ MI_NAME_IEXT, MY_UNPACK_FILENAME);
+ fn_format(linkname, name, "", MI_NAME_IEXT, MY_UNPACK_FILENAME);
+ linkname_ptr= linkname;
/*
Don't create the table if the link or file exists to ensure that one
doesn't accidently destroy another table.
@@ -575,10 +586,21 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
{
if (ci->data_file_name)
{
- fn_format(filename, ci->data_file_name,"",MI_NAME_DEXT,4);
- fn_format(linkname, name, "",MI_NAME_DEXT,4);
- linkname_ptr=linkname;
- create_flag=0;
+ if (options & HA_OPTION_TMP_TABLE)
+ {
+ char *path;
+ /* chop off the table name, tempory tables use generated name */
+ if ((path= strrchr(ci->data_file_name, FN_LIBCHAR)))
+ *path= '\0';
+ fn_format(filename, name, ci->data_file_name, MI_NAME_DEXT,
+ MY_REPLACE_DIR | MY_UNPACK_FILENAME);
+ }
+ else
+ fn_format(filename, ci->data_file_name, "",
+ MI_NAME_DEXT, MY_UNPACK_FILENAME);
+ fn_format(linkname, name, "", MI_NAME_DEXT, MY_UNPACK_FILENAME);
+ linkname_ptr= linkname;
+ create_flag= 0;
}
else
{