Commit b9ecec86 authored by unknown's avatar unknown

Merge witty.:/Users/mattiasj/clones/mysql-5.1-bug30822

into  witty.:/Users/mattiasj/clones/51to_push


sql/ha_partition.cc:
  Auto merged
sql/sql_partition.cc:
  Auto merged
parents c8969f71 4c31c41f
drop table if exists t1; drop table if exists t1;
CREATE TABLE t1 (c1 INT)
PARTITION BY HASH (c1)
PARTITIONS 15;
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
ALTER TABLE t1 COALESCE PARTITION 13;
DROP TABLE t1;
CREATE TABLE t1 (c1 INT)
PARTITION BY LINEAR HASH (c1)
PARTITIONS 5;
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
ALTER TABLE t1 COALESCE PARTITION 3;
DROP TABLE t1;
create table t1 (a int unsigned) create table t1 (a int unsigned)
partition by hash(a div 2) partition by hash(a div 2)
partitions 4; partitions 4;
......
...@@ -9,6 +9,22 @@ ...@@ -9,6 +9,22 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
#
# Bug#30822: crash when COALESCE
#
CREATE TABLE t1 (c1 INT)
PARTITION BY HASH (c1)
PARTITIONS 15;
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
ALTER TABLE t1 COALESCE PARTITION 13;
DROP TABLE t1;
CREATE TABLE t1 (c1 INT)
PARTITION BY LINEAR HASH (c1)
PARTITIONS 5;
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
ALTER TABLE t1 COALESCE PARTITION 3;
DROP TABLE t1;
# #
# More partition pruning tests, especially on interval walking # More partition pruning tests, especially on interval walking
# #
......
...@@ -1531,6 +1531,14 @@ int ha_partition::copy_partitions(ulonglong *copied, ulonglong *deleted) ...@@ -1531,6 +1531,14 @@ int ha_partition::copy_partitions(ulonglong *copied, ulonglong *deleted)
longlong func_value; longlong func_value;
DBUG_ENTER("ha_partition::copy_partitions"); DBUG_ENTER("ha_partition::copy_partitions");
if (m_part_info->linear_hash_ind)
{
if (m_part_info->part_type == HASH_PARTITION)
set_linear_hash_mask(m_part_info, m_part_info->no_parts);
else
set_linear_hash_mask(m_part_info, m_part_info->no_subparts);
}
while (reorg_part < m_reorged_parts) while (reorg_part < m_reorged_parts)
{ {
handler *file= m_reorged_file[reorg_part]; handler *file= m_reorged_file[reorg_part];
......
...@@ -1402,7 +1402,7 @@ static void set_up_partition_func_pointers(partition_info *part_info) ...@@ -1402,7 +1402,7 @@ static void set_up_partition_func_pointers(partition_info *part_info)
NONE NONE
*/ */
static void set_linear_hash_mask(partition_info *part_info, uint no_parts) void set_linear_hash_mask(partition_info *part_info, uint no_parts)
{ {
uint mask; uint mask;
......
...@@ -65,6 +65,7 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0, ...@@ -65,6 +65,7 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0,
void prune_partition_set(const TABLE *table, part_id_range *part_spec); void prune_partition_set(const TABLE *table, part_id_range *part_spec);
bool check_partition_info(partition_info *part_info,handlerton **eng_type, bool check_partition_info(partition_info *part_info,handlerton **eng_type,
TABLE *table, handler *file, HA_CREATE_INFO *info); TABLE *table, handler *file, HA_CREATE_INFO *info);
void set_linear_hash_mask(partition_info *part_info, uint no_parts);
bool fix_partition_func(THD *thd, TABLE *table, bool create_table_ind); bool fix_partition_func(THD *thd, TABLE *table, bool create_table_ind);
char *generate_partition_syntax(partition_info *part_info, char *generate_partition_syntax(partition_info *part_info,
uint *buf_length, bool use_sql_alloc, uint *buf_length, bool use_sql_alloc,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment