Commit aeebffc9 authored by bar@mysql.com's avatar bar@mysql.com

table.cc:

  Try to open an old 5.0 table name
  if encoded name doesn't exist.
  This makes SELECT working without having
  to rename tables with tricky characters
  in name into 5.1 format (simpliefies upgrade).
parent 57c432b9
...@@ -270,8 +270,33 @@ int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags) ...@@ -270,8 +270,33 @@ int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags)
strxmov(path, share->normalized_path.str, reg_ext, NullS); strxmov(path, share->normalized_path.str, reg_ext, NullS);
if ((file= my_open(path, O_RDONLY | O_SHARE, MYF(0))) < 0) if ((file= my_open(path, O_RDONLY | O_SHARE, MYF(0))) < 0)
{
/* Try unecoded 5.0 name */
uint length;
strxnmov(path, sizeof(path)-1,
mysql_data_home, "/", share->db.str, "/",
share->table_name.str, reg_ext, NullS);
length= unpack_filename(path, path) - reg_ext_length;
/*
The following is a safety test and should never fail
as the old file name should never be longer than the new one.
*/
DBUG_ASSERT(length <= share->normalized_path.length);
/*
If the old and the new names have the same length,
then table name does not have tricky characters,
so no need to check the old file name.
*/
if (length == share->normalized_path.length ||
((file= my_open(path, O_RDONLY | O_SHARE, MYF(0))) < 0))
goto err_not_open; goto err_not_open;
/* Unencoded 5.0 table name found */
path[length]= '\0'; // Remove .frm extension
strmov(share->normalized_path.str, path);
share->normalized_path.length= length;
}
error= 4; error= 4;
if (my_read(file,(byte*) head, 64, MYF(MY_NABP))) if (my_read(file,(byte*) head, 64, MYF(MY_NABP)))
goto err; goto err;
......
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