diff options
author | unknown <mikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se> | 2006-05-27 16:34:13 -0400 |
---|---|---|
committer | unknown <mikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se> | 2006-05-27 16:34:13 -0400 |
commit | b121c75e061d984323969fc2b4e9f63248a8ab2e (patch) | |
tree | 0dc4c2db95b761c74e592867b764adf520e91e1f /sql | |
parent | 19b401247e15d54c18c472e00127f43d5a092898 (diff) | |
download | mariadb-git-b121c75e061d984323969fc2b4e9f63248a8ab2e.tar.gz |
BUG#19305: COALESCE partition left partition files undropped
sql/ha_partition.cc:
Added deactivate entry also when deleting partitions
sql/mysql_priv.h:
Added alter_info to parameter list
sql/sql_partition.cc:
Set log_entry on partition_element for deleting partitions
Diffstat (limited to 'sql')
-rw-r--r-- | sql/ha_partition.cc | 6 | ||||
-rw-r--r-- | sql/mysql_priv.h | 1 | ||||
-rw-r--r-- | sql/sql_partition.cc | 11 |
3 files changed, 13 insertions, 5 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index b1a5a447b6f..c0a5647b697 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -634,6 +634,8 @@ int ha_partition::drop_partitions(const char *path) DBUG_PRINT("info", ("Drop subpartition %s", part_name_buff)); if ((ret_error= file->delete_table((const char *) part_name_buff))) error= ret_error; + if (deactivate_ddl_log_entry(sub_elem->log_entry->entry_pos)) + error= 1; } while (++j < no_subparts); } else @@ -645,6 +647,8 @@ int ha_partition::drop_partitions(const char *path) DBUG_PRINT("info", ("Drop partition %s", part_name_buff)); if ((ret_error= file->delete_table((const char *) part_name_buff))) error= ret_error; + if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) + error= 1; } if (part_elem->part_state == PART_IS_CHANGED) part_elem->part_state= PART_NORMAL; @@ -652,6 +656,7 @@ int ha_partition::drop_partitions(const char *path) part_elem->part_state= PART_IS_DROPPED; } } while (++i < no_parts); + VOID(sync_ddl_log()); DBUG_RETURN(error); } @@ -768,6 +773,7 @@ int ha_partition::rename_partitions(const char *path) */ part_elem= part_it++; if (part_elem->part_state == PART_IS_CHANGED || + part_elem->part_state == PART_TO_BE_DROPPED || (part_elem->part_state == PART_IS_ADDED && temp_partitions)) { if (m_is_sub_partitioned) diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 127aa6c5acd..b473abd87c7 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -1203,6 +1203,7 @@ typedef struct st_lock_param_type ulonglong deleted; THD *thd; HA_CREATE_INFO *create_info; + ALTER_INFO *alter_info; List<create_field> *create_list; List<create_field> new_create_list; List<Key> *key_list; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 71b8e9b1d95..5f594bbfd87 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -4968,8 +4968,7 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt, DBUG_RETURN(TRUE); } *next_entry= log_entry->entry_pos; - if (temp_list) - sub_elem->log_entry= log_entry; + sub_elem->log_entry= log_entry; insert_part_info_log_entry_list(part_info, log_entry); } while (++j < no_subparts); } @@ -4987,8 +4986,7 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt, DBUG_RETURN(TRUE); } *next_entry= log_entry->entry_pos; - if (temp_list) - part_elem->log_entry= log_entry; + part_elem->log_entry= log_entry; insert_part_info_log_entry_list(part_info, log_entry); } } @@ -5262,7 +5260,7 @@ static bool write_log_final_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt) lpt->table_name, "#"); pthread_mutex_lock(&LOCK_gdl); if (write_log_dropped_partitions(lpt, &next_entry, (const char*)path, - TRUE)) + lpt->alter_info->flags & ALTER_REORGANIZE_PARTITION)) goto error; if (write_log_changed_partitions(lpt, &next_entry, (const char*)path)) goto error; @@ -5516,6 +5514,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table, lpt->thd= thd; lpt->part_info= part_info; + lpt->alter_info= alter_info; lpt->create_info= create_info; lpt->create_list= create_list; lpt->key_list= key_list; @@ -5818,6 +5817,8 @@ uint fast_alter_partition_table(THD *thd, TABLE *table, ERROR_INJECT_CRASH("crash_change_partition_5") || (table->file->extra(HA_EXTRA_PREPARE_FOR_DELETE), FALSE) || ERROR_INJECT_CRASH("crash_change_partition_6") || + mysql_drop_partitions(lpt) || + ERROR_INJECT_CRASH("crash_change_partition_61") || mysql_rename_partitions(lpt) || ((frm_install= TRUE), FALSE) || ERROR_INJECT_CRASH("crash_change_partition_7") || |