mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
5.5 merge
This commit is contained in:
@@ -1349,7 +1349,8 @@ bool ha_partition::is_crashed() const
|
||||
int ha_partition::prepare_new_partition(TABLE *tbl,
|
||||
HA_CREATE_INFO *create_info,
|
||||
handler *file, const char *part_name,
|
||||
partition_element *p_elem)
|
||||
partition_element *p_elem,
|
||||
uint disable_non_uniq_indexes)
|
||||
{
|
||||
int error;
|
||||
DBUG_ENTER("prepare_new_partition");
|
||||
@@ -1375,6 +1376,7 @@ int ha_partition::prepare_new_partition(TABLE *tbl,
|
||||
if ((error= file->ha_open(tbl, part_name, m_mode, m_open_test_lock)))
|
||||
goto error_open;
|
||||
DBUG_PRINT("info", ("partition %s opened", part_name));
|
||||
|
||||
/*
|
||||
Note: if you plan to add another call that may return failure,
|
||||
better to do it before external_lock() as cleanup_new_partition()
|
||||
@@ -1385,6 +1387,9 @@ int ha_partition::prepare_new_partition(TABLE *tbl,
|
||||
goto error_external_lock;
|
||||
DBUG_PRINT("info", ("partition %s external locked", part_name));
|
||||
|
||||
if (disable_non_uniq_indexes)
|
||||
file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
|
||||
|
||||
DBUG_RETURN(0);
|
||||
error_external_lock:
|
||||
(void) file->ha_close();
|
||||
@@ -1662,6 +1667,14 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
|
||||
on them to prepare them for copy phase and also for later close
|
||||
calls
|
||||
*/
|
||||
|
||||
/*
|
||||
Before creating new partitions check whether indexes are disabled
|
||||
in the partitions.
|
||||
*/
|
||||
|
||||
uint disable_non_uniq_indexes = indexes_are_disabled();
|
||||
|
||||
i= 0;
|
||||
part_count= 0;
|
||||
part_it.rewind();
|
||||
@@ -1696,11 +1709,13 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
|
||||
if ((error= prepare_new_partition(table, create_info,
|
||||
new_file_array[part],
|
||||
(const char *)part_name_buff,
|
||||
sub_elem)))
|
||||
sub_elem,
|
||||
disable_non_uniq_indexes)))
|
||||
{
|
||||
cleanup_new_partition(part_count);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
m_added_file[part_count++]= new_file_array[part];
|
||||
} while (++j < num_subparts);
|
||||
}
|
||||
@@ -1713,11 +1728,13 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
|
||||
if ((error= prepare_new_partition(table, create_info,
|
||||
new_file_array[i],
|
||||
(const char *)part_name_buff,
|
||||
part_elem)))
|
||||
part_elem,
|
||||
disable_non_uniq_indexes)))
|
||||
{
|
||||
cleanup_new_partition(part_count);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
m_added_file[part_count++]= new_file_array[i];
|
||||
}
|
||||
}
|
||||
@@ -7177,7 +7194,7 @@ void ha_partition::print_error(int error, myf errflag)
|
||||
{
|
||||
if (!(thd->lex->alter_info.flags & ALTER_TRUNCATE_PARTITION))
|
||||
{
|
||||
m_part_info->print_no_partition_found(table);
|
||||
m_part_info->print_no_partition_found(table, errflag);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user