Manual merge from mysql-5.1-bugteam for bug#54486.
This commit is contained in:
commit
54fb1f5918
@ -794,14 +794,9 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
thd->push_internal_handler(&err_handler);
|
|
||||||
|
|
||||||
if (find_db_tables_and_rm_known_files(thd, dirp, db, path, &tables,
|
if (find_db_tables_and_rm_known_files(thd, dirp, db, path, &tables,
|
||||||
&found_other_files))
|
&found_other_files))
|
||||||
{
|
|
||||||
thd->pop_internal_handler();
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Disable drop of enabled log tables, must be done before name locking.
|
Disable drop of enabled log tables, must be done before name locking.
|
||||||
@ -815,7 +810,6 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
|
|||||||
table->table_name_length, table->table_name, true))
|
table->table_name_length, table->table_name, true))
|
||||||
{
|
{
|
||||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
|
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
|
||||||
thd->pop_internal_handler();
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -825,10 +819,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
|
|||||||
if (lock_table_names(thd, tables, NULL, thd->variables.lock_wait_timeout,
|
if (lock_table_names(thd, tables, NULL, thd->variables.lock_wait_timeout,
|
||||||
MYSQL_OPEN_SKIP_TEMPORARY) ||
|
MYSQL_OPEN_SKIP_TEMPORARY) ||
|
||||||
lock_db_routines(thd, db))
|
lock_db_routines(thd, db))
|
||||||
{
|
|
||||||
thd->pop_internal_handler();
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
|
||||||
|
|
||||||
/* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */
|
/* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */
|
||||||
if (tables)
|
if (tables)
|
||||||
@ -841,6 +832,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
|
|||||||
deleted_tables++;
|
deleted_tables++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thd->push_internal_handler(&err_handler);
|
||||||
if (thd->killed ||
|
if (thd->killed ||
|
||||||
(tables && mysql_rm_table_no_locks(thd, tables, true, false, true, true)))
|
(tables && mysql_rm_table_no_locks(thd, tables, true, false, true, true)))
|
||||||
{
|
{
|
||||||
@ -1094,8 +1086,16 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
strxmov(filePath, path, "/", file->name, NullS);
|
strxmov(filePath, path, "/", file->name, NullS);
|
||||||
if (mysql_file_delete_with_symlink(key_file_misc, filePath, MYF(MY_WME)))
|
/*
|
||||||
DBUG_RETURN(true);
|
We ignore ENOENT error in order to skip files that was deleted
|
||||||
|
by concurrently running statement like REAPIR TABLE ...
|
||||||
|
*/
|
||||||
|
if (my_delete_with_symlink(filePath, MYF(0)) &&
|
||||||
|
my_errno != ENOENT)
|
||||||
|
{
|
||||||
|
my_error(EE_DELETE, MYF(0), filePath, my_errno);
|
||||||
|
DBUG_RETURN(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*tables= tot_list;
|
*tables= tot_list;
|
||||||
|
@ -1748,6 +1748,8 @@ err:
|
|||||||
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
|
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
|
||||||
mi_open_datafile(info,share,name,-1))
|
mi_open_datafile(info,share,name,-1))
|
||||||
got_error=1;
|
got_error=1;
|
||||||
|
|
||||||
|
param->retry_repair= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (got_error)
|
if (got_error)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user