1
0
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:
Sergei Golubchik
2014-02-01 00:54:03 +01:00
304 changed files with 12473 additions and 942 deletions

View File

@@ -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;
}
}