summaryrefslogtreecommitdiff
path: root/sql/ha_partition.cc
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-01-22 15:29:36 +0100
committerSergei Golubchik <sergii@pisem.net>2014-01-22 15:29:36 +0100
commit37d240ecf9213a29d6a0a236ebeb1e72c0b43ce6 (patch)
tree6bd2508d867303d8830aab0f246cd61a7ec5a835 /sql/ha_partition.cc
parente8f6f402922295ec36aab42976f3e494455407d4 (diff)
parent5caddbfd5b4a7ec377f3d40a5830436e0e6e993b (diff)
downloadmariadb-git-37d240ecf9213a29d6a0a236ebeb1e72c0b43ce6.tar.gz
MySQL-5.5.35 merge
Diffstat (limited to 'sql/ha_partition.cc')
-rw-r--r--sql/ha_partition.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index feda3460c9f..cdb8690ba62 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -1345,7 +1345,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");
@@ -1371,6 +1372,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()
@@ -1381,6 +1383,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();
@@ -1658,6 +1663,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();
@@ -1692,11 +1705,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);
}
@@ -1709,11 +1724,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];
}
}