mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Manual merge from mysql-5.1-bugteam for bug#54486.
This commit is contained in:
@ -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,
|
||||
&found_other_files))
|
||||
{
|
||||
thd->pop_internal_handler();
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/*
|
||||
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))
|
||||
{
|
||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
|
||||
thd->pop_internal_handler();
|
||||
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,
|
||||
MYSQL_OPEN_SKIP_TEMPORARY) ||
|
||||
lock_db_routines(thd, db))
|
||||
{
|
||||
thd->pop_internal_handler();
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */
|
||||
if (tables)
|
||||
@ -841,6 +832,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
|
||||
deleted_tables++;
|
||||
}
|
||||
|
||||
thd->push_internal_handler(&err_handler);
|
||||
if (thd->killed ||
|
||||
(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
|
||||
{
|
||||
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;
|
||||
|
Reference in New Issue
Block a user