summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2005-04-27 22:20:58 +0200
committerunknown <msvensson@neptunus.(none)>2005-04-27 22:20:58 +0200
commit1de04529074ab2d91a78d2cc1d7f0be0db42ae4d (patch)
tree6ad95df674d02e99cdfa846afc36b6eb635b2526
parent103b1bd147bfc87aa9d90597dcbff7dd51ef0c4d (diff)
downloadmariadb-git-1de04529074ab2d91a78d2cc1d7f0be0db42ae4d.tar.gz
BUG#9911 RENAME TABLE of type ARCHIVE fails with .ARN file error
- Different behaviuor in 5.0 pushes a warning when renaming a non existent file. Avoid that by checking that the file exists before renaming. mysql-test/r/archive.result: Warning is not produced anymore sql/examples/ha_archive.cc: Change ha_archive::rename_table to avoid warning when trying to rename non existent file.
-rw-r--r--mysql-test/r/archive.result2
-rw-r--r--sql/examples/ha_archive.cc17
2 files changed, 11 insertions, 8 deletions
diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result
index 793e50cf653..9cd5bba267f 100644
--- a/mysql-test/r/archive.result
+++ b/mysql-test/r/archive.result
@@ -192,8 +192,6 @@ select count(*) from t3;
count(*)
1199
rename table t3 to t4;
-Warnings:
-Error 7 Error on rename of './test/t3.ARN' to './test/t4.ARN' (Errcode: 2)
select * from t4 where fld3='bonfire';
auto fld1 companynr fld3 fld4 fld5 fld6
1191 068504 00 bonfire corresponds positively
diff --git a/sql/examples/ha_archive.cc b/sql/examples/ha_archive.cc
index e3ad677714f..58f8580e724 100644
--- a/sql/examples/ha_archive.cc
+++ b/sql/examples/ha_archive.cc
@@ -455,17 +455,22 @@ const char **ha_archive::bas_ext() const
int ha_archive::rename_table(const char * from, const char * to)
{
DBUG_ENTER("ha_archive::rename_table");
+ DBUG_PRINT("enter", ("from: %s, to: %s", from, to));
for (const char **ext=bas_ext(); *ext ; ext++)
{
- if (rename_file_ext(from,to,*ext))
+ // Check if the .arn file exists before rename
+ if (!my_strcasecmp(system_charset_info, *ext, ARN))
{
- if (my_errno == ENOENT &&
- !my_strcasecmp(system_charset_info, *ext, ARN))
+ char name[FN_REFLEN];
+ (void)strxnmov(name, FN_REFLEN, from, ARN, NullS);
+ if (access(name, F_OK))
+ {
+ DBUG_PRINT("info", ("%s does not exist on disk, skipping it", name));
continue;
-
- DBUG_RETURN(my_errno);
+ }
}
-
+ if (rename_file_ext(from,to,*ext))
+ DBUG_RETURN(my_errno);
}
DBUG_RETURN(0);
}