summaryrefslogtreecommitdiff
path: root/sql/sql_rename.cc
diff options
context:
space:
mode:
authorunknown <sanja@askmonty.org>2011-05-11 14:09:48 +0300
committerunknown <sanja@askmonty.org>2011-05-11 14:09:48 +0300
commit520927a7df486a1a21f87dadd9c5a920bf583917 (patch)
tree22d6d45d1f035091b578b5f74d64828f584d83de /sql/sql_rename.cc
parente2ff2885319e480477e8f7d2824065ee4f4363a6 (diff)
downloadmariadb-git-520927a7df486a1a21f87dadd9c5a920bf583917.tar.gz
Bugfix: New table creation/renaming block added if old encoded table present.
mysql-test/r/create.result: test of renaming mysql-test/r/upgrade.result: Now such behaviour prohibited to avoid problems. mysql-test/t/create.test: test of renaming mysql-test/t/upgrade.test: Now such behaviour prohibited to avoid problems. sql/mysql_priv.h: Function to test table name presence added. sql/sql_rename.cc: Rename fixed. sql/sql_table.cc: Function to test table name presence added. Create fixed.
Diffstat (limited to 'sql/sql_rename.cc')
-rw-r--r--sql/sql_rename.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc
index df7054c94d0..81c6e3ad4be 100644
--- a/sql/sql_rename.cc
+++ b/sql/sql_rename.cc
@@ -245,7 +245,7 @@ do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, char *new_table_name,
char *new_table_alias, bool skip_error)
{
int rc= 1;
- char name[FN_REFLEN + 1];
+ char new_name[FN_REFLEN + 1], old_name[FN_REFLEN + 1];
const char *new_alias, *old_alias;
frm_type_enum frm_type;
enum legacy_db_type table_type;
@@ -264,17 +264,17 @@ do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, char *new_table_name,
}
DBUG_ASSERT(new_alias);
- build_table_filename(name, sizeof(name) - 1,
+ build_table_filename(new_name, sizeof(new_name) - 1,
new_db, new_alias, reg_ext, 0);
- if (!access(name,F_OK))
+ build_table_filename(old_name, sizeof(old_name) - 1,
+ ren_table->db, old_alias, reg_ext, 0);
+ if (check_table_file_presence(old_name,
+ new_name, new_db, new_alias, new_alias, TRUE))
{
- my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_alias);
DBUG_RETURN(1); // This can't be skipped
}
- build_table_filename(name, sizeof(name) - 1,
- ren_table->db, old_alias, reg_ext, 0);
- frm_type= mysql_frm_type(thd, name, &table_type);
+ frm_type= mysql_frm_type(thd, old_name, &table_type);
switch (frm_type)
{
case FRMTYPE_TABLE:
@@ -319,7 +319,7 @@ do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, char *new_table_name,
default:
DBUG_ASSERT(0); // should never happen
case FRMTYPE_ERROR:
- my_error(ER_FILE_NOT_FOUND, MYF(0), name, my_errno);
+ my_error(ER_FILE_NOT_FOUND, MYF(0), old_name, my_errno);
break;
}
if (rc && !skip_error)