Bug #13154:

Used AND when modulo should have been used to calculate partition id
for PARTITION BY KEY and SUBPARTITION BY KEY
parent 734895c7
...@@ -87,3 +87,13 @@ partition by list (b*a) ...@@ -87,3 +87,13 @@ partition by list (b*a)
partition x2 values in (3, 11, 5, 7) tablespace ts2, partition x2 values in (3, 11, 5, 7) tablespace ts2,
partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3); partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3);
drop table t1; drop table t1;
CREATE TABLE t1 (
a int not null)
partition by key(a);
LOCK TABLES t1 WRITE;
insert into t1 values (1);
insert into t1 values (2);
insert into t1 values (3);
insert into t1 values (4);
UNLOCK TABLES;
drop table t1;
...@@ -134,3 +134,21 @@ partition by list (b*a) ...@@ -134,3 +134,21 @@ partition by list (b*a)
partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3); partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3);
drop table t1; drop table t1;
#
# Bug 13154: Insert crashes due to bad calculation of partition id
# for PARTITION BY KEY and SUBPARTITION BY KEY
#
CREATE TABLE t1 (
a int not null)
partition by key(a);
LOCK TABLES t1 WRITE;
insert into t1 values (1);
insert into t1 values (2);
insert into t1 values (3);
insert into t1 values (4);
UNLOCK TABLES;
drop table t1;
...@@ -2298,7 +2298,7 @@ static uint32 get_part_id_key(Field **field_array, ...@@ -2298,7 +2298,7 @@ static uint32 get_part_id_key(Field **field_array,
uint no_parts) uint no_parts)
{ {
DBUG_ENTER("get_part_id_key"); DBUG_ENTER("get_part_id_key");
DBUG_RETURN(calculate_key_value(field_array) & no_parts); DBUG_RETURN(calculate_key_value(field_array) % no_parts);
} }
......
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