mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-20348: DROP TABLE IF EXISTS killed on master but was replicated
Merge branch '10.2' into 10.3
This commit is contained in:
@ -2403,35 +2403,6 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
/* remove .frm file and engine files */
|
||||
path_length= build_table_filename(path, sizeof(path) - 1, db.str, alias.str,
|
||||
reg_ext, 0);
|
||||
|
||||
/*
|
||||
This handles the case where a "DROP" was executed and a regular
|
||||
table "may be" dropped as drop_temporary is FALSE and error is
|
||||
TRUE. If the error was FALSE a temporary table was dropped and
|
||||
regardless of the status of drop_temporary a "DROP TEMPORARY"
|
||||
must be used.
|
||||
*/
|
||||
if (!dont_log_query)
|
||||
{
|
||||
/*
|
||||
Note that unless if_exists is TRUE or a temporary table was deleted,
|
||||
there is no means to know if the statement should be written to the
|
||||
binary log. See further information on this variable in what follows.
|
||||
*/
|
||||
non_tmp_table_deleted= (if_exists ? TRUE : non_tmp_table_deleted);
|
||||
/*
|
||||
Don't write the database name if it is the current one (or if
|
||||
thd->db is NULL).
|
||||
*/
|
||||
if (thd->db.str == NULL || cmp(&db, &thd->db) != 0)
|
||||
{
|
||||
append_identifier(thd, &built_query, &db);
|
||||
built_query.append(".");
|
||||
}
|
||||
|
||||
append_identifier(thd, &built_query, &table->table_name);
|
||||
built_query.append(",");
|
||||
}
|
||||
}
|
||||
DEBUG_SYNC(thd, "rm_table_no_locks_before_delete_table");
|
||||
error= 0;
|
||||
@ -2511,9 +2482,16 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
// Remove extension for delete
|
||||
*(end= path + path_length - reg_ext_length)= '\0';
|
||||
|
||||
error= ha_delete_table(thd, table_type, path, &db, &table->table_name,
|
||||
!dont_log_query);
|
||||
if (!error)
|
||||
if ((error= ha_delete_table(thd, table_type, path, &db, &table->table_name,
|
||||
!dont_log_query)))
|
||||
{
|
||||
if (thd->is_killed())
|
||||
{
|
||||
error= -1;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Delete the table definition file */
|
||||
strmov(end,reg_ext);
|
||||
@ -2557,7 +2535,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
if (error)
|
||||
{
|
||||
if (wrong_tables.length())
|
||||
wrong_tables.append(',');
|
||||
wrong_tables.append(',');
|
||||
wrong_tables.append(&db);
|
||||
wrong_tables.append('.');
|
||||
wrong_tables.append(&table->table_name);
|
||||
@ -2570,6 +2548,22 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
mysql_audit_drop_table(thd, table);
|
||||
}
|
||||
|
||||
if (!dont_log_query && !drop_temporary)
|
||||
{
|
||||
non_tmp_table_deleted= (if_exists ? TRUE : non_tmp_table_deleted);
|
||||
/*
|
||||
Don't write the database name if it is the current one (or if
|
||||
thd->db is NULL).
|
||||
*/
|
||||
if (thd->db.str == NULL || cmp(&db, &thd->db) != 0)
|
||||
{
|
||||
append_identifier(thd, &built_query, &db);
|
||||
built_query.append(".");
|
||||
}
|
||||
|
||||
append_identifier(thd, &built_query, &table->table_name);
|
||||
built_query.append(",");
|
||||
}
|
||||
DBUG_PRINT("table", ("table: %p s: %p", table->table,
|
||||
table->table ? table->table->s : NULL));
|
||||
}
|
||||
|
Reference in New Issue
Block a user