mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#13593865 - 64037: CRASH IN HA_PARTITION::CREATE_HANDLERS ON
ALTER TABLE AFTER DROP PARTITION Bug#13608188 - 64038: CRASH IN HANDLER::HA_THD ON ALTER TABLE AFTER REPAIR NON-EXISTING PARTITION Backport of bug#13357766 from -trunk to -5.5. The state of some partitions was not reset on failure, leading to invalid states of partitions in consequent statements. Fixed by reverting back to original state for all partitions if not all partition names was resolved. Also adding extra security by forcing tables to be reopened in case of error in mysql_alter_table. (There is also removal of \r at the end of some lines.)
This commit is contained in:
@ -406,12 +406,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
my_error(ER_PARTITION_MGMT_ON_NONPARTITIONED, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
uint num_parts_found;
|
||||
uint num_parts_opt= alter_info->partition_names.elements;
|
||||
num_parts_found= set_part_state(alter_info, table->table->part_info,
|
||||
PART_ADMIN);
|
||||
if (num_parts_found != num_parts_opt &&
|
||||
(!(alter_info->flags & ALTER_ALL_PARTITION)))
|
||||
if (set_part_state(alter_info, table->table->part_info, PART_ADMIN))
|
||||
{
|
||||
char buff[FN_REFLEN + MYSQL_ERRMSG_SIZE];
|
||||
size_t length;
|
||||
@ -872,6 +867,9 @@ send_result_message:
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
err:
|
||||
/* Make sure this table instance is not reused after the failure. */
|
||||
if (table && table->table)
|
||||
table->table->m_needs_reopen= true;
|
||||
trans_rollback_stmt(thd);
|
||||
trans_rollback(thd);
|
||||
close_thread_tables(thd); // Shouldn't be needed
|
||||
|
Reference in New Issue
Block a user