Commit e97a45fd authored by Patrick Crews's avatar Patrick Crews

automerge

parents 8c33da07 3c9d4ea8
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
#include <my_sys.h> #include <my_sys.h>
#include <my_dir.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 write string with escaping
...@@ -265,8 +268,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, ...@@ -265,8 +268,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
// archive copies management
path[path_end]='\0'; path[path_end]='\0';
#ifdef FRM_ARCHIVE
// archive copies management: disabled unused feature (see bug #17823).
if (!access(path, F_OK)) if (!access(path, F_OK))
{ {
if (old_version != ULONGLONG_MAX && max_versions != 0) 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, ...@@ -313,6 +317,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
} }
} }
} }
#endif//FRM_ARCHIVE
{ {
// rename temporary file // rename temporary file
...@@ -337,6 +342,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, ...@@ -337,6 +342,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
SYNOPSIS SYNOPSIS
rename_in_schema_file rename_in_schema_file
thd thread handler
schema name of given schema schema name of given schema
old_name original file name old_name original file name
new_name new file name new_name new file name
...@@ -348,7 +354,8 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, ...@@ -348,7 +354,8 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
1 - Error (only if renaming of frm failed) 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, const char *new_name, ulonglong revision,
uint num_view_backups) uint num_view_backups)
{ {
...@@ -365,10 +372,11 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name, ...@@ -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))) if (my_rename(old_path, new_path, MYF(MY_WME)))
return 1; 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); strxnmov(arc_path, FN_REFLEN, mysql_data_home, "/", schema, "/arc", NullS);
(void) unpack_filename(arc_path, arc_path); (void) unpack_filename(arc_path, arc_path);
#ifdef FRM_ARCHIVE
if (revision > 0 && !access(arc_path, F_OK)) if (revision > 0 && !access(arc_path, F_OK))
{ {
ulonglong limit= ((revision > num_view_backups) ? ulonglong limit= ((revision > num_view_backups) ?
...@@ -384,6 +392,16 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name, ...@@ -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)); 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; return 0;
} }
......
...@@ -82,8 +82,9 @@ my_bool ...@@ -82,8 +82,9 @@ my_bool
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name, sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
const LEX_STRING *type, const LEX_STRING *type,
gptr base, File_option *parameters, uint versions); gptr base, File_option *parameters, uint versions);
my_bool rename_in_schema_file(const char *schema, const char *old_name, my_bool rename_in_schema_file(THD *thd,
const char *new_name, ulonglong revision, const char *schema, const char *old_name,
const char *new_name, ulonglong revision,
uint num_view_backups); uint num_view_backups);
class File_parser: public Sql_alloc class File_parser: public Sql_alloc
......
...@@ -35,7 +35,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, ...@@ -35,7 +35,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp,
const char *db, const char *path, uint level, const char *db, const char *path, uint level,
TABLE_LIST **dropped_tables); 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 my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error);
/* Database options hash */ /* Database options hash */
static HASH dboptions; static HASH dboptions;
...@@ -906,7 +906,11 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db, ...@@ -906,7 +906,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' && else if (file->name[0] == 'a' && file->name[1] == 'r' &&
file->name[2] == 'c' && file->name[3] == '\0') 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]; char newpath[FN_REFLEN];
MY_DIR *new_dirp; MY_DIR *new_dirp;
strxmov(newpath, org_path, "/", "arc", NullS); strxmov(newpath, org_path, "/", "arc", NullS);
...@@ -1061,9 +1065,13 @@ static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error) ...@@ -1061,9 +1065,13 @@ static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error)
RETURN RETURN
> 0 number of removed files > 0 number of removed files
-1 error -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, long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path)
const char *org_path)
{ {
long deleted= 0; long deleted= 0;
ulong found_other_files= 0; ulong found_other_files= 0;
...@@ -1105,6 +1113,7 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, ...@@ -1105,6 +1113,7 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
{ {
goto err; goto err;
} }
deleted++;
} }
if (thd->killed) if (thd->killed)
goto err; goto err;
......
...@@ -1858,7 +1858,7 @@ mysql_rename_view(THD *thd, ...@@ -1858,7 +1858,7 @@ mysql_rename_view(THD *thd,
goto err; goto err;
/* rename view and it's backups */ /* 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)) view_def.revision - 1, num_view_backups))
goto err; goto err;
...@@ -1877,7 +1877,7 @@ mysql_rename_view(THD *thd, ...@@ -1877,7 +1877,7 @@ mysql_rename_view(THD *thd,
num_view_backups)) num_view_backups))
{ {
/* restore renamed view in case of error */ /* 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); view_def.revision - 1, num_view_backups);
goto err; goto err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment