diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result index 9cd5bba267f..793e50cf653 100644 --- a/mysql-test/r/archive.result +++ b/mysql-test/r/archive.result @@ -192,6 +192,8 @@ 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 58f8580e724..231031c9834 100644 --- a/sql/examples/ha_archive.cc +++ b/sql/examples/ha_archive.cc @@ -447,35 +447,6 @@ const char **ha_archive::bas_ext() const } -/* - Rename all files that this handler defines in bas_ext list - - NOTE Don't care if the .arn file is missing -*/ -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++) - { - // Check if the .arn file exists before rename - if (!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; - } - } - if (rename_file_ext(from,to,*ext)) - DBUG_RETURN(my_errno); - } - DBUG_RETURN(0); -} - - /* When opening a file we: Create/get our shared structure. diff --git a/sql/examples/ha_archive.h b/sql/examples/ha_archive.h index 13abc4bf715..e2c40c880a4 100644 --- a/sql/examples/ha_archive.h +++ b/sql/examples/ha_archive.h @@ -104,7 +104,6 @@ public: int end_bulk_insert(); THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type); - int rename_table(const char * from, const char * to); }; handlerton *archive_db_init(void); diff --git a/sql/handler.cc b/sql/handler.cc index 3095aeb9476..d2501afe97a 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1772,13 +1772,17 @@ int handler::delete_table(const char *name) int handler::rename_table(const char * from, const char * to) { - DBUG_ENTER("handler::rename_table"); - for (const char **ext=bas_ext(); *ext ; ext++) + int error= 0; + for (const char **ext= bas_ext(); *ext ; ext++) { - if (rename_file_ext(from,to,*ext)) - DBUG_RETURN(my_errno); + if (rename_file_ext(from, to, *ext)) + { + if ((error=my_errno) != ENOENT) + break; + error= 0; + } } - DBUG_RETURN(0); + return error; } /*