mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge tag 'mariadb-10.0.20' into 10.1
This commit is contained in:
@ -1672,6 +1672,7 @@ void execute_ddl_log_recovery()
|
||||
(void) mysql_file_delete(key_file_global_ddl_log, file_name, MYF(0));
|
||||
global_ddl_log.recovery_phase= FALSE;
|
||||
mysql_mutex_unlock(&LOCK_gdl);
|
||||
thd->reset_query();
|
||||
delete thd;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -2177,15 +2178,13 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
char path[FN_REFLEN + 1], wrong_tables_buff[160], *alias= NULL;
|
||||
String wrong_tables(wrong_tables_buff, sizeof(wrong_tables_buff)-1,
|
||||
system_charset_info);
|
||||
uint path_length= 0;
|
||||
uint path_length= 0, errors= 0;
|
||||
int error= 0;
|
||||
int non_temp_tables_count= 0;
|
||||
bool foreign_key_error=0;
|
||||
bool non_tmp_error= 0;
|
||||
bool trans_tmp_table_deleted= 0, non_trans_tmp_table_deleted= 0;
|
||||
bool non_tmp_table_deleted= 0;
|
||||
bool is_drop_tmp_if_exists_added= 0;
|
||||
bool one_table= tables->next_local == 0;
|
||||
bool was_view= 0;
|
||||
String built_query;
|
||||
String built_trans_tmp_query, built_non_trans_tmp_query;
|
||||
@ -2471,12 +2470,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
error= ha_delete_table(thd, table_type, path, db, table->table_name,
|
||||
!dont_log_query);
|
||||
|
||||
if (error == HA_ERR_ROW_IS_REFERENCED)
|
||||
{
|
||||
/* the table is referenced by a foreign key constraint */
|
||||
foreign_key_error= 1;
|
||||
}
|
||||
if (!error || error == ENOENT || error == HA_ERR_NO_SUCH_TABLE)
|
||||
if (!error)
|
||||
{
|
||||
int frm_delete_error, trigger_drop_error= 0;
|
||||
/* Delete the table definition file */
|
||||
@ -2494,11 +2488,8 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
if (trigger_drop_error ||
|
||||
(frm_delete_error && frm_delete_error != ENOENT))
|
||||
error= 1;
|
||||
else if (!frm_delete_error || !error || if_exists)
|
||||
{
|
||||
error= 0;
|
||||
else if (frm_delete_error && if_exists)
|
||||
thd->clear_error();
|
||||
}
|
||||
}
|
||||
non_tmp_error= error ? TRUE : non_tmp_error;
|
||||
}
|
||||
@ -2509,6 +2500,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
wrong_tables.append(db);
|
||||
wrong_tables.append('.');
|
||||
wrong_tables.append(table->table_name);
|
||||
errors++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2532,14 +2524,13 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
err:
|
||||
if (wrong_tables.length())
|
||||
{
|
||||
if (one_table && was_view)
|
||||
DBUG_ASSERT(errors);
|
||||
if (errors == 1 && was_view)
|
||||
my_printf_error(ER_IT_IS_A_VIEW, ER(ER_IT_IS_A_VIEW), MYF(0),
|
||||
wrong_tables.c_ptr_safe());
|
||||
else if (!foreign_key_error)
|
||||
else if (errors > 1 || !thd->is_error())
|
||||
my_printf_error(ER_BAD_TABLE_ERROR, ER(ER_BAD_TABLE_ERROR), MYF(0),
|
||||
wrong_tables.c_ptr_safe());
|
||||
else
|
||||
my_message(ER_ROW_IS_REFERENCED, ER(ER_ROW_IS_REFERENCED), MYF(0));
|
||||
error= 1;
|
||||
}
|
||||
|
||||
@ -2590,8 +2581,8 @@ err:
|
||||
/* Chop of the last comma */
|
||||
built_query.chop();
|
||||
built_query.append(" /* generated by server */");
|
||||
int error_code = (non_tmp_error ?
|
||||
(foreign_key_error ? ER_ROW_IS_REFERENCED : ER_BAD_TABLE_ERROR) : 0);
|
||||
int error_code = non_tmp_error ? thd->get_stmt_da()->sql_errno()
|
||||
: 0;
|
||||
error |= thd->binlog_query(THD::STMT_QUERY_TYPE,
|
||||
built_query.ptr(),
|
||||
built_query.length(),
|
||||
@ -5119,6 +5110,7 @@ mysql_rename_table(handlerton *base, const char *old_db,
|
||||
ulonglong save_bits= thd->variables.option_bits;
|
||||
int length;
|
||||
DBUG_ENTER("mysql_rename_table");
|
||||
DBUG_ASSERT(base);
|
||||
DBUG_PRINT("enter", ("old: '%s'.'%s' new: '%s'.'%s'",
|
||||
old_db, old_name, new_db, new_name));
|
||||
|
||||
@ -5126,8 +5118,7 @@ mysql_rename_table(handlerton *base, const char *old_db,
|
||||
if (flags & NO_FK_CHECKS)
|
||||
thd->variables.option_bits|= OPTION_NO_FOREIGN_KEY_CHECKS;
|
||||
|
||||
file= (base == NULL ? 0 :
|
||||
get_new_handler((TABLE_SHARE*) 0, thd->mem_root, base));
|
||||
file= get_new_handler((TABLE_SHARE*) 0, thd->mem_root, base);
|
||||
|
||||
build_table_filename(from, sizeof(from) - 1, old_db, old_name, "",
|
||||
flags & FN_FROM_IS_TMP);
|
||||
@ -5454,8 +5445,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
||||
if (!table->view)
|
||||
{
|
||||
int result __attribute__((unused))=
|
||||
show_create_table(thd, table, &query,
|
||||
create_info, WITHOUT_DB_NAME);
|
||||
show_create_table(thd, table, &query, create_info, WITH_DB_NAME);
|
||||
|
||||
DBUG_ASSERT(result == 0); // show_create_table() always return 0
|
||||
do_logging= FALSE;
|
||||
@ -5837,12 +5827,17 @@ drop_create_field:
|
||||
/* let us check the name of the first key part. */
|
||||
if ((keyname= key->name.str) == NULL)
|
||||
{
|
||||
List_iterator<Key_part_spec> part_it(key->columns);
|
||||
Key_part_spec *kp;
|
||||
if ((kp= part_it++))
|
||||
keyname= kp->field_name.str;
|
||||
if (keyname == NULL)
|
||||
continue;
|
||||
if (key->type == Key::PRIMARY)
|
||||
keyname= primary_key_name;
|
||||
else
|
||||
{
|
||||
List_iterator<Key_part_spec> part_it(key->columns);
|
||||
Key_part_spec *kp;
|
||||
if ((kp= part_it++))
|
||||
keyname= kp->field_name.str;
|
||||
if (keyname == NULL)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (key->type != Key::FOREIGN_KEY)
|
||||
{
|
||||
|
Reference in New Issue
Block a user