bug #22634 (partitioned tables with DATA DIRECTORY option corrupts table)

In fact the problem is inside the ARCHIVE engine.
It stores real datapath inside the ARM file, but doesn't implement
specific ha_archive::rename_table function.
As the ALTER TABLE statement first creates the table with the temporary
name and then renames it to the normal one, we get the temporary name
saved in ARM what leads to "can't open file" error.
Code modified to store only path in the ARM, without filename.
parent 0357510d
......@@ -470,7 +470,7 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name,
Since we now possibly no real_path, we will use it instead if it exists.
*/
if (*share->real_path)
fn_format(share->data_file_name, share->real_path, "", ARZ,
fn_format(share->data_file_name, table_name, share->real_path, ARZ,
MY_REPLACE_EXT|MY_UNPACK_FILENAME);
VOID(my_hash_insert(&archive_open_tables, (byte*) share));
thr_lock_init(&share->lock);
......@@ -698,9 +698,13 @@ int ha_archive::create(const char *name, TABLE *table_arg,
goto error;
}
/*
We reuse name_buff since it is available.
*/
write_meta_file(create_file, 0, stats.auto_increment_value, 0,
(char *)create_info->data_file_name,
FALSE);
(create_info->data_file_name &&
dirname_part(name_buff, (char*)create_info->data_file_name))
? name_buff : 0, FALSE);
my_close(create_file,MYF(0));
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment