Commit 16e96aac authored by unknown's avatar unknown

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.


storage/archive/ha_archive.cc:
  now we store only path in the ARM file, not the full filename,
  then we add the tablename as a filename after reading the metafile.
parent bbc5d138
......@@ -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