diff options
author | Gleb Shchepa <gshchepa@mysql.com> | 2008-09-30 18:16:11 +0500 |
---|---|---|
committer | Gleb Shchepa <gshchepa@mysql.com> | 2008-09-30 18:16:11 +0500 |
commit | 0d24398697469deebd2b58cb16e355c09febbebc (patch) | |
tree | 985ef000a6323c141dba7b919caac613545f2b3c | |
parent | b8734a1ce2d835729ffaf0058aaf75275c88aaca (diff) | |
parent | 3c9d4ea8219469510999a89d6800e3d1786ec88c (diff) | |
download | mariadb-git-0d24398697469deebd2b58cb16e355c09febbebc.tar.gz |
manual merge 5.0-bugteam --> 5.1-bugteam
-rw-r--r-- | sql/parse_file.cc | 24 | ||||
-rw-r--r-- | sql/parse_file.h | 5 | ||||
-rw-r--r-- | sql/sql_db.cc | 17 | ||||
-rw-r--r-- | sql/sql_view.cc | 4 |
4 files changed, 39 insertions, 11 deletions
diff --git a/sql/parse_file.cc b/sql/parse_file.cc index 1f0a45edd5e..d8cbc7ff174 100644 --- a/sql/parse_file.cc +++ b/sql/parse_file.cc @@ -26,6 +26,9 @@ #include <my_sys.h> #include <my_dir.h> +/* from sql_db.cc */ +extern long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path); + /** Write string with escaping. @@ -282,8 +285,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, DBUG_RETURN(TRUE); } - // archive copies management path[path_end]='\0'; +#ifdef FRM_ARCHIVE + // archive copies management: disabled unused feature (see bug #17823). if (!access(path, F_OK)) { if (old_version != ULONGLONG_MAX && max_versions != 0) @@ -330,6 +334,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, } } } +#endif//FRM_ARCHIVE { // rename temporary file @@ -352,6 +357,7 @@ err_w_file: /** Renames a frm file (including backups) in same schema. + @thd thread handler @param schema name of given schema @param old_name original file name @param new_name new file name @@ -363,7 +369,8 @@ err_w_file: @retval 1 Error (only if renaming of frm failed) */ -my_bool rename_in_schema_file(const char *schema, const char *old_name, +my_bool rename_in_schema_file(THD *thd, + const char *schema, const char *old_name, const char *new_name, ulonglong revision, uint num_view_backups) { @@ -377,9 +384,10 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name, if (my_rename(old_path, new_path, MYF(MY_WME))) return 1; - /* check if arc_dir exists */ + /* check if arc_dir exists: disabled unused feature (see bug #17823). */ build_table_filename(arc_path, sizeof(arc_path) - 1, schema, "arc", "", 0); +#ifdef FRM_ARCHIVE if (revision > 0 && !access(arc_path, F_OK)) { char old_name_buf[FN_REFLEN], new_name_buf[FN_REFLEN]; @@ -400,6 +408,16 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name, my_rename(old_path, new_path, MYF(0)); } } +#else//FRM_ARCHIVE + { // remove obsolete 'arc' directory and files if any + MY_DIR *new_dirp; + if ((new_dirp = my_dir(arc_path, MYF(MY_DONT_SORT)))) + { + DBUG_PRINT("my",("Archive subdir found: %s", arc_path)); + (void) mysql_rm_arc_files(thd, new_dirp, arc_path); + } + } +#endif//FRM_ARCHIVE return 0; } diff --git a/sql/parse_file.h b/sql/parse_file.h index 30c902478b8..c05b2853b9a 100644 --- a/sql/parse_file.h +++ b/sql/parse_file.h @@ -82,8 +82,9 @@ my_bool sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, const LEX_STRING *type, uchar* base, File_option *parameters, uint versions); -my_bool rename_in_schema_file(const char *schema, const char *old_name, - const char *new_name, ulonglong revision, +my_bool rename_in_schema_file(THD *thd, + const char *schema, const char *old_name, + const char *new_name, ulonglong revision, uint num_view_backups); class File_parser: public Sql_alloc diff --git a/sql/sql_db.cc b/sql/sql_db.cc index e1bff5e435b..0db88d7dd90 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -37,7 +37,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db, const char *path, uint level, TABLE_LIST **dropped_tables); -static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path); +long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path); static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error); static void mysql_change_db_impl(THD *thd, LEX_STRING *new_db_name, @@ -1096,7 +1096,11 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db, else if (file->name[0] == 'a' && file->name[1] == 'r' && file->name[2] == 'c' && file->name[3] == '\0') { - /* .frm archive */ + /* .frm archive: + Those archives are obsolete, but following code should + exist to remove existent "arc" directories. + See #ifdef FRM_ARCHIVE directives for obsolete code. + */ char newpath[FN_REFLEN]; MY_DIR *new_dirp; strxmov(newpath, org_path, "/", "arc", NullS); @@ -1260,9 +1264,13 @@ static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error) RETURN > 0 number of removed files -1 error + + NOTE + A support of "arc" directories is obsolete, however this + function should exist to remove existent "arc" directories. + See #ifdef FRM_ARCHIVE directives for obsolete code. */ -static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, - const char *org_path) +long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path) { long deleted= 0; ulong found_other_files= 0; @@ -1304,6 +1312,7 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, { goto err; } + deleted++; } if (thd->killed) goto err; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 12b2adf4f13..87b073af078 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -1947,7 +1947,7 @@ mysql_rename_view(THD *thd, goto err; /* rename view and it's backups */ - if (rename_in_schema_file(view->db, view->table_name, new_name, + if (rename_in_schema_file(thd, view->db, view->table_name, new_name, view_def.revision - 1, num_view_backups)) goto err; @@ -1967,7 +1967,7 @@ mysql_rename_view(THD *thd, num_view_backups)) { /* restore renamed view in case of error */ - rename_in_schema_file(view->db, new_name, view->table_name, + rename_in_schema_file(thd, view->db, new_name, view->table_name, view_def.revision - 1, num_view_backups); goto err; } |