summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <mikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se>2006-05-27 16:34:13 -0400
committerunknown <mikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se>2006-05-27 16:34:13 -0400
commitb121c75e061d984323969fc2b4e9f63248a8ab2e (patch)
tree0dc4c2db95b761c74e592867b764adf520e91e1f /sql
parent19b401247e15d54c18c472e00127f43d5a092898 (diff)
downloadmariadb-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.cc6
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/sql_partition.cc11
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") ||