Make sure that the filename for temporary tables is built with fn_format()
so that extra slashes are handled in tmpdir. (Bug #8497)
This commit is contained in:
parent
c99c44805c
commit
ac69a4a22c
@ -97,3 +97,12 @@ Variable_name Value
|
||||
Created_tmp_disk_tables 0
|
||||
Created_tmp_tables 1
|
||||
drop table t1;
|
||||
create table t1 (a int, b int, index(a), index(b));
|
||||
create table t2 (c int auto_increment, d varchar(255), primary key (c));
|
||||
insert into t1 values (3,1),(3,2);
|
||||
insert into t2 values (NULL, 'foo'), (NULL, 'bar');
|
||||
select d, c from t1 left join t2 on b = c where a = 3 order by d;
|
||||
d c
|
||||
bar 2
|
||||
foo 1
|
||||
drop table t1, t2;
|
||||
|
1
mysql-test/t/temp_table-master.opt
Normal file
1
mysql-test/t/temp_table-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--tmpdir=$MYSQL_TEST_DIR/var//tmp
|
@ -89,3 +89,12 @@ flush status;
|
||||
select * from t1 group by d;
|
||||
show status like "created_tmp%tables";
|
||||
drop table t1;
|
||||
|
||||
# Bug #8497: tmpdir with extra slashes would cause failures
|
||||
#
|
||||
create table t1 (a int, b int, index(a), index(b));
|
||||
create table t2 (c int auto_increment, d varchar(255), primary key (c));
|
||||
insert into t1 values (3,1),(3,2);
|
||||
insert into t2 values (NULL, 'foo'), (NULL, 'bar');
|
||||
select d, c from t1 left join t2 on b = c where a = 3 order by d;
|
||||
drop table t1, t2;
|
||||
|
@ -408,7 +408,8 @@ THR_LOCK_DATA **ha_heap::store_lock(THD *thd,
|
||||
int ha_heap::delete_table(const char *name)
|
||||
{
|
||||
char buff[FN_REFLEN];
|
||||
int error= heap_delete_table(fn_format(buff,name,"","",4+2));
|
||||
int error= heap_delete_table(fn_format(buff,name,"","",
|
||||
MY_REPLACE_EXT|MY_UNPACK_FILENAME));
|
||||
return error == ENOENT ? 0 : error;
|
||||
}
|
||||
|
||||
@ -521,7 +522,8 @@ int ha_heap::create(const char *name, TABLE *table_arg,
|
||||
create_info->auto_increment_value - 1 : 0);
|
||||
hp_create_info.max_table_size=current_thd->variables.max_heap_table_size;
|
||||
max_rows = (ha_rows) (hp_create_info.max_table_size / mem_per_row);
|
||||
error= heap_create(fn_format(buff,name,"","",4+2),
|
||||
error= heap_create(fn_format(buff,name,"","",
|
||||
MY_REPLACE_EXT|MY_UNPACK_FILENAME),
|
||||
table_arg->keys,keydef, table_arg->reclength,
|
||||
(ulong) ((table_arg->max_rows < max_rows &&
|
||||
table_arg->max_rows) ?
|
||||
|
@ -4880,12 +4880,14 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
temp_pool_slot = bitmap_set_next(&temp_pool);
|
||||
|
||||
if (temp_pool_slot != MY_BIT_NONE) // we got a slot
|
||||
sprintf(path, "%s%s_%lx_%i", mysql_tmpdir, tmp_file_prefix,
|
||||
sprintf(path, "%s_%lx_%i", tmp_file_prefix,
|
||||
current_pid, temp_pool_slot);
|
||||
else // if we run out of slots or we are not using tempool
|
||||
sprintf(path,"%s%s%lx_%lx_%x",mysql_tmpdir,tmp_file_prefix,current_pid,
|
||||
sprintf(path,"%s%lx_%lx_%x", tmp_file_prefix,current_pid,
|
||||
thd->thread_id, thd->tmp_table++);
|
||||
|
||||
fn_format(path, path, mysql_tmpdir, "", MY_REPLACE_EXT|MY_UNPACK_FILENAME);
|
||||
|
||||
if (lower_case_table_names)
|
||||
my_casedn_str(files_charset_info, path);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user