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
This commit is contained in:
parent
8fdac9c74b
commit
854d7c4d4f
@ -519,9 +519,20 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
|||||||
|
|
||||||
if (ci->index_file_name)
|
if (ci->index_file_name)
|
||||||
{
|
{
|
||||||
fn_format(filename, ci->index_file_name,"",MI_NAME_IEXT,4);
|
if (options & HA_OPTION_TMP_TABLE)
|
||||||
fn_format(linkname,name, "",MI_NAME_IEXT,4);
|
{
|
||||||
linkname_ptr=linkname;
|
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
|
Don't create the table if the link or file exists to ensure that one
|
||||||
doesn't accidently destroy another table.
|
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)
|
if (ci->data_file_name)
|
||||||
{
|
{
|
||||||
fn_format(filename, ci->data_file_name,"",MI_NAME_DEXT,4);
|
if (options & HA_OPTION_TMP_TABLE)
|
||||||
fn_format(linkname, name, "",MI_NAME_DEXT,4);
|
{
|
||||||
linkname_ptr=linkname;
|
char *path;
|
||||||
create_flag=0;
|
/* 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
|
else
|
||||||
{
|
{
|
||||||
|
@ -769,3 +769,24 @@ a b
|
|||||||
xxxxxxxxx bbbbbb
|
xxxxxxxxx bbbbbb
|
||||||
xxxxxxxxx bbbbbb
|
xxxxxxxxx bbbbbb
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TEMPORARY TABLE `t1` (
|
||||||
|
`a` int(11) default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TEMPORARY TABLE `t1` (
|
||||||
|
`a` int(11) default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
create table t1 (a int) engine=myisam select 42 a;
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
9
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
99
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
42
|
||||||
|
drop table t1;
|
||||||
|
@ -726,4 +726,35 @@ UPDATE t1 AS ta1,t1 AS ta2 SET ta1.b='aaaaaa',ta2.b='bbbbbb';
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#8706 - temporary table with data directory option fails
|
||||||
|
#
|
||||||
|
connect (session1,localhost,root,,);
|
||||||
|
connect (session2,localhost,root,,);
|
||||||
|
|
||||||
|
connection session1;
|
||||||
|
disable_query_log;
|
||||||
|
eval create temporary table t1 (a int) engine=myisam data directory="$MYSQL_TEST_DIR/var/tmp" select 9 a;
|
||||||
|
enable_query_log;
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
connection session2;
|
||||||
|
disable_query_log;
|
||||||
|
eval create temporary table t1 (a int) engine=myisam data directory="$MYSQL_TEST_DIR/var/tmp" select 99 a;
|
||||||
|
enable_query_log;
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
create table t1 (a int) engine=myisam select 42 a;
|
||||||
|
|
||||||
|
connection session1;
|
||||||
|
select * from t1;
|
||||||
|
disconnect session1;
|
||||||
|
connection session2;
|
||||||
|
select * from t1;
|
||||||
|
disconnect session2;
|
||||||
|
connection default;
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user