Commit a938da53 authored by Gleb Shchepa's avatar Gleb Shchepa
Browse files

manual merge 5.0-bugteam --> 5.1-bugteam

parents 3bf44a86 e20b9de1
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -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 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
/**
  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 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
  @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;
}

+3 −2
Original line number Diff line number Diff line
@@ -82,7 +82,8 @@ 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, 
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);

+13 −4
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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;
    }