Commit f1437d6a authored by Mikael Ronstrom's avatar Mikael Ronstrom

BUG#47754, used number of parts instead of number of list values as end part...

BUG#47754, used number of parts instead of number of list values as end part for list partitioning in column list partitioning
parent d0627362
...@@ -20,6 +20,15 @@ select * from t1 where a = 2; ...@@ -20,6 +20,15 @@ select * from t1 where a = 2;
a b a b
2 NULL 2 NULL
2 2 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; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
......
...@@ -14,6 +14,9 @@ partition by list column_list(a,b) ...@@ -14,6 +14,9 @@ partition by list column_list(a,b)
column_list(NULL, NULL)), column_list(NULL, NULL)),
partition p1 values in (column_list(1,1), column_list(2,2)), partition p1 values in (column_list(1,1), column_list(2,2)),
partition p2 values in (column_list(3, NULL), column_list(NULL, 1))); 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 (3, NULL);
insert into t1 values (NULL, 1); insert into t1 values (NULL, 1);
insert into t1 values (NULL, NULL); insert into t1 values (NULL, NULL);
...@@ -23,6 +26,8 @@ insert into t1 values (1,1); ...@@ -23,6 +26,8 @@ insert into t1 values (1,1);
insert into t1 values (2,2); insert into t1 values (2,2);
select * from t1 where a = 1; select * from t1 where a = 1;
select * from t1 where a = 2; 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; show create table t1;
drop table t1; drop table t1;
......
...@@ -6962,7 +6962,15 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info, ...@@ -6962,7 +6962,15 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info,
nparts); nparts);
} }
if (flags & NO_MAX_RANGE) 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 else
{ {
// Copy from max_value to record // Copy from max_value to record
......
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