Browse Source

BUG#47754, used number of parts instead of number of list values as end part for list partitioning in column list partitioning

pull/374/head
Mikael Ronstrom 16 years ago
parent
commit
f1437d6afd
  1. 9
      mysql-test/r/partition_column.result
  2. 5
      mysql-test/t/partition_column.test
  3. 10
      sql/sql_partition.cc

9
mysql-test/r/partition_column.result

@ -20,6 +20,15 @@ select * from t1 where a = 2;
a b
2 NULL
2 2
select * from t1 where a > 8;
a b
select * from t1 where a not between 8 and 8;
a b
2 NULL
2 2
3 NULL
1 NULL
1 1
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (

5
mysql-test/t/partition_column.test

@ -14,6 +14,9 @@ partition by list column_list(a,b)
column_list(NULL, NULL)),
partition p1 values in (column_list(1,1), column_list(2,2)),
partition p2 values in (column_list(3, NULL), column_list(NULL, 1)));
#
# BUG#47754 Crash when selecting using NOT BETWEEN for column list partitioning
#
insert into t1 values (3, NULL);
insert into t1 values (NULL, 1);
insert into t1 values (NULL, NULL);
@ -23,6 +26,8 @@ insert into t1 values (1,1);
insert into t1 values (2,2);
select * from t1 where a = 1;
select * from t1 where a = 2;
select * from t1 where a > 8;
select * from t1 where a not between 8 and 8;
show create table t1;
drop table t1;

10
sql/sql_partition.cc

@ -6962,7 +6962,15 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info,
nparts);
}
if (flags & NO_MAX_RANGE)
part_iter->part_nums.end= part_info->num_parts;
{
if (part_info->part_type == RANGE_PARTITION)
part_iter->part_nums.end= part_info->num_parts;
else /* LIST_PARTITION */
{
DBUG_ASSERT(part_info->part_type == LIST_PARTITION);
part_iter->part_nums.end= part_info->num_list_values;
}
}
else
{
// Copy from max_value to record

Loading…
Cancel
Save