Commit aa796cab authored by unknown's avatar unknown
Browse files

Fix for bug#16907 Partitions: crash, SELECT goes into last partition, UNIQUE INDEX

  In presense of subpartitioning use get_part_partition_id() to calculate part_id

parent 76374fe5
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -289,3 +289,14 @@ select * from t1 where f1 = 2;
f1	f2	f3
2	2	2
drop table t1;
create table t1 (f1 integer,f2 integer, unique index(f1))
partition by range(f1 div 2)
subpartition by hash(f1) subpartitions 2
(partition partb values less than (2),
partition parte values less than (4),
partition partf values less than (10000));
insert into t1 values(10,1);
select * from t1 where f1 = 10;
f1	f2
10	1
drop table t1;
+12 −0
Original line number Diff line number Diff line
@@ -368,3 +368,15 @@ insert into t1 values(2,2,'2');
select * from t1 where f1 = 2;
drop table t1;

#
# Bug #16907 Partitions: crash, SELECT goes into last partition, UNIQUE INDEX
#
create table t1 (f1 integer,f2 integer, unique index(f1))
partition by range(f1 div 2)
subpartition by hash(f1) subpartitions 2
(partition partb values less than (2),
partition parte values less than (4),
partition partf values less than (10000));
insert into t1 values(10,1);
select * from t1 where f1 = 10;
drop table t1;
+4 −1
Original line number Diff line number Diff line
@@ -6009,7 +6009,10 @@ static uint32 get_next_partition_via_walking(PARTITION_ITERATOR *part_iter)
    field->store(part_iter->field_vals.start, FALSE);
    part_iter->field_vals.start++;
    longlong dummy;
    if (!part_iter->part_info->get_partition_id(part_iter->part_info, 
    if (is_sub_partitioned(part_iter->part_info) &&
        !part_iter->part_info->get_part_partition_id(part_iter->part_info,
                                                     &part_id, &dummy) ||
        !part_iter->part_info->get_partition_id(part_iter->part_info,
                                                &part_id, &dummy))
      return part_id;
  }