mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
BUG#47838, NULL values in ranges was dropped due to missing else part in store_tuple_to_record
This commit is contained in:
@ -1,4 +1,16 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
create table t1 (a int signed)
|
||||||
|
partition by list column_list(a)
|
||||||
|
( partition p0 values in (column_list(1), column_list(3), column_list(5),
|
||||||
|
column_list(7), column_list(9), column_list(NULL)),
|
||||||
|
partition p1 values in (column_list(2), column_list(4), column_list(6),
|
||||||
|
column_list(8), column_list(0)));
|
||||||
|
insert into t1 values (NULL),(0),(1),(2),(2),(4),(4),(4),(8),(8);
|
||||||
|
select * from t1 where a <= 1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
0
|
||||||
|
drop table t1;
|
||||||
create table t1 (a int, b int)
|
create table t1 (a int, b int)
|
||||||
partition by list column_list(a,b)
|
partition by list column_list(a,b)
|
||||||
( partition p0 values in (column_list(1, NULL), column_list(2, NULL),
|
( partition p0 values in (column_list(1, NULL), column_list(2, NULL),
|
||||||
|
@ -8,6 +8,33 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#47838, List partitioning have problems with <= and >=
|
||||||
|
#
|
||||||
|
create table t1 (a int signed)
|
||||||
|
partition by list (a)
|
||||||
|
( partition p0 values in (1, 3, 5, 7, 9, NULL),
|
||||||
|
partition p1 values in (2, 4, 6, 8, 0));
|
||||||
|
insert into t1 values (NULL),(0),(1),(2),(2),(4),(4),(4),(8),(8);
|
||||||
|
select * from t1 where NULL <= a;
|
||||||
|
select * from t1 where a is null;
|
||||||
|
explain partitions select * from t1 where a is null;
|
||||||
|
select * from t1 where a <= 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
create table t1 (a int signed)
|
||||||
|
partition by list column_list(a)
|
||||||
|
( partition p0 values in (column_list(1), column_list(3), column_list(5),
|
||||||
|
column_list(7), column_list(9), column_list(NULL)),
|
||||||
|
partition p1 values in (column_list(2), column_list(4), column_list(6),
|
||||||
|
column_list(8), column_list(0)));
|
||||||
|
insert into t1 values (NULL),(0),(1),(2),(2),(4),(4),(4),(8),(8);
|
||||||
|
select * from t1 where a <= NULL;
|
||||||
|
select * from t1 where a is null;
|
||||||
|
explain partitions select * from t1 where a is null;
|
||||||
|
select * from t1 where a <= 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
create table t1 (a int, b int)
|
create table t1 (a int, b int)
|
||||||
partition by list column_list(a,b)
|
partition by list column_list(a,b)
|
||||||
( partition p0 values in (column_list(1, NULL), column_list(2, NULL),
|
( partition p0 values in (column_list(1, NULL), column_list(2, NULL),
|
||||||
|
@ -6761,10 +6761,9 @@ uint32 store_tuple_to_record(Field **pfield,
|
|||||||
if ((*pfield)->real_maybe_null())
|
if ((*pfield)->real_maybe_null())
|
||||||
{
|
{
|
||||||
if (*loc_value)
|
if (*loc_value)
|
||||||
{
|
|
||||||
(*pfield)->set_null();
|
(*pfield)->set_null();
|
||||||
}
|
else
|
||||||
(*pfield)->set_notnull();
|
(*pfield)->set_notnull();
|
||||||
loc_value++;
|
loc_value++;
|
||||||
}
|
}
|
||||||
uint len= (*pfield)->pack_length();
|
uint len= (*pfield)->pack_length();
|
||||||
@ -6950,12 +6949,16 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info,
|
|||||||
get_col_endpoint= get_partition_id_cols_range_for_endpoint;
|
get_col_endpoint= get_partition_id_cols_range_for_endpoint;
|
||||||
part_iter->get_next= get_next_partition_id_range;
|
part_iter->get_next= get_next_partition_id_range;
|
||||||
}
|
}
|
||||||
else
|
else if (part_info->part_type == LIST_PARTITION)
|
||||||
{
|
{
|
||||||
get_col_endpoint= get_partition_id_cols_list_for_endpoint;
|
get_col_endpoint= get_partition_id_cols_list_for_endpoint;
|
||||||
part_iter->get_next= get_next_partition_id_list;
|
part_iter->get_next= get_next_partition_id_list;
|
||||||
part_iter->part_info= part_info;
|
part_iter->part_info= part_info;
|
||||||
|
DBUG_ASSERT(part_info->num_list_values);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
assert(0);
|
||||||
|
|
||||||
if (flags & NO_MIN_RANGE)
|
if (flags & NO_MIN_RANGE)
|
||||||
part_iter->part_nums.start= part_iter->part_nums.cur= 0;
|
part_iter->part_nums.start= part_iter->part_nums.cur= 0;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user