summaryrefslogtreecommitdiff
path: root/sql/parse_file.cc
diff options
context:
space:
mode:
authorGleb Shchepa <gshchepa@mysql.com>2008-09-30 17:50:28 +0500
committerGleb Shchepa <gshchepa@mysql.com>2008-09-30 17:50:28 +0500
commit3c9d4ea8219469510999a89d6800e3d1786ec88c (patch)
treea37f8385126af7360a052ee9e205dbcfbac99b30 /sql/parse_file.cc
parentce64a16b75746848c8d5a89cfb726a38691c9d6f (diff)
downloadmariadb-git-3c9d4ea8219469510999a89d6800e3d1786ec88c.tar.gz
Fixed bug #17823: 'arc' directories inside database directories.
Server created "arc" directories inside database directories and maintained there useless copies of .frm files. Creation and renaming procedures of those copies as well as creation of "arc" directories has been discontinued. Removal procedure has been kept untouched to be able to cleanup existent database directories by the DROP DATABASE query. Also view renaming procedure has been updated to remove these directories. sql/parse_file.cc: Fixed bug #17823: 'arc' directories inside database directories. View/table creation and renaming procedures maintained backup copies of .frm files. Those copies are unused yet, so this feature was incomplete and unnecessary. 1. Unwanted code has been hidden by FRM_ARCHIVE ifdefs (the FRM_ARCHIVE macro is not defined). 2. Renaming procedure has been modified to remove obsolete "arc" directories. sql/parse_file.h: Fixed bug #17823: 'arc' directories inside database directories. The "thd" parameter has been added to the rename_in_schema_file() function. sql/sql_db.cc: Fixed bug #17823: 'arc' directories inside database directories. Scope of the mysql_rm_arc_files() function has been changed to global for use from the parse_file.cc file. sql/sql_view.cc: Fixed bug #17823: 'arc' directories inside database directories. Added the "thd" argument to rename_in_schema_file() calls.
Diffstat (limited to 'sql/parse_file.cc')
-rw-r--r--sql/parse_file.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/sql/parse_file.cc b/sql/parse_file.cc
index aa352433141..2b947fcac4f 100644
--- a/sql/parse_file.cc
+++ b/sql/parse_file.cc
@@ -21,6 +21,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
@@ -265,8 +268,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)
@@ -313,6 +317,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
}
}
}
+#endif//FRM_ARCHIVE
{
// rename temporary file
@@ -337,6 +342,7 @@ err_w_file:
SYNOPSIS
rename_in_schema_file
+ thd thread handler
schema name of given schema
old_name original file name
new_name new file name
@@ -348,7 +354,8 @@ err_w_file:
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)
{
@@ -365,10 +372,11 @@ 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). */
strxnmov(arc_path, FN_REFLEN, mysql_data_home, "/", schema, "/arc", NullS);
(void) unpack_filename(arc_path, arc_path);
+#ifdef FRM_ARCHIVE
if (revision > 0 && !access(arc_path, F_OK))
{
ulonglong limit= ((revision > num_view_backups) ?
@@ -384,6 +392,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;
}