mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-10765: Wrong result - query does not retrieve values from default partition on a table partitioned by list columns
Partial matches should be treat as not exact one.
This commit is contained in:
@ -1149,3 +1149,58 @@ t1 CREATE TABLE `t1` (
|
|||||||
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)) ENGINE = MyISAM,
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN ((1,1),(0,0)) ENGINE = MyISAM) */
|
PARTITION p1 VALUES IN ((1,1),(0,0)) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10765: Wrong result - query does not retrieve values from
|
||||||
|
# default partition on a table partitioned by list columns
|
||||||
|
#
|
||||||
|
create table t1 (i int, j int) partition by list columns(i,j) (partition p1 values in ((10,10)), partition p2 default);
|
||||||
|
insert into t1 values (10,1);
|
||||||
|
select * from t1 where i = 10;
|
||||||
|
i j
|
||||||
|
10 1
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10;
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p1,p2 system NULL NULL NULL NULL 1
|
||||||
|
select * from t1 where i = 10 and j=1;
|
||||||
|
i j
|
||||||
|
10 1
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10 and j=1;
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2 system NULL NULL NULL NULL 1
|
||||||
|
insert into t1 values (10,10);
|
||||||
|
select * from t1 where i = 10 and j=10;
|
||||||
|
i j
|
||||||
|
10 10
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10 and j=10;
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p1 system NULL NULL NULL NULL 1
|
||||||
|
drop table t1;
|
||||||
|
create table t1
|
||||||
|
(
|
||||||
|
a int not null,
|
||||||
|
b int not null,
|
||||||
|
c int
|
||||||
|
)
|
||||||
|
partition by list columns(a,b)
|
||||||
|
(
|
||||||
|
partition p1 values in ((10,10)),
|
||||||
|
partition p2 values in ((10,20)),
|
||||||
|
partition p3 values in ((10,30)),
|
||||||
|
partition p4 values in ((10,40)),
|
||||||
|
partition p5 values in ((10,50))
|
||||||
|
);
|
||||||
|
insert into t1 values
|
||||||
|
(10,10,1234),
|
||||||
|
(10,20,1234),
|
||||||
|
(10,30,1234),
|
||||||
|
(10,40,1234),
|
||||||
|
(10,50,1234);
|
||||||
|
explain partitions
|
||||||
|
select * from t1
|
||||||
|
where a>=10 and (a <=10 and b <=30);
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p1,p2,p3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
drop table t1;
|
||||||
|
@ -453,3 +453,50 @@ create table t1 (a int, b int)
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10765: Wrong result - query does not retrieve values from
|
||||||
|
--echo # default partition on a table partitioned by list columns
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (i int, j int) partition by list columns(i,j) (partition p1 values in ((10,10)), partition p2 default);
|
||||||
|
insert into t1 values (10,1);
|
||||||
|
select * from t1 where i = 10;
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10;
|
||||||
|
select * from t1 where i = 10 and j=1;
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10 and j=1;
|
||||||
|
insert into t1 values (10,10);
|
||||||
|
select * from t1 where i = 10 and j=10;
|
||||||
|
explain partitions
|
||||||
|
select * from t1 where i = 10 and j=10;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
create table t1
|
||||||
|
(
|
||||||
|
a int not null,
|
||||||
|
b int not null,
|
||||||
|
c int
|
||||||
|
)
|
||||||
|
partition by list columns(a,b)
|
||||||
|
(
|
||||||
|
partition p1 values in ((10,10)),
|
||||||
|
partition p2 values in ((10,20)),
|
||||||
|
partition p3 values in ((10,30)),
|
||||||
|
partition p4 values in ((10,40)),
|
||||||
|
partition p5 values in ((10,50))
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into t1 values
|
||||||
|
(10,10,1234),
|
||||||
|
(10,20,1234),
|
||||||
|
(10,30,1234),
|
||||||
|
(10,40,1234),
|
||||||
|
(10,50,1234);
|
||||||
|
|
||||||
|
explain partitions
|
||||||
|
select * from t1
|
||||||
|
where a>=10 and (a <=10 and b <=30);
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
@ -7723,6 +7723,7 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info,
|
|||||||
bool can_match_multiple_values;
|
bool can_match_multiple_values;
|
||||||
uint32 nparts;
|
uint32 nparts;
|
||||||
get_col_endpoint_func UNINIT_VAR(get_col_endpoint);
|
get_col_endpoint_func UNINIT_VAR(get_col_endpoint);
|
||||||
|
uint full_length= 0;
|
||||||
DBUG_ENTER("get_part_iter_for_interval_cols_via_map");
|
DBUG_ENTER("get_part_iter_for_interval_cols_via_map");
|
||||||
|
|
||||||
if (part_info->part_type == RANGE_PARTITION)
|
if (part_info->part_type == RANGE_PARTITION)
|
||||||
@ -7740,9 +7741,14 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info,
|
|||||||
else
|
else
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
||||||
|
for (uint32 i= 0; i < part_info->num_columns; i++)
|
||||||
|
full_length+= store_length_array[i];
|
||||||
|
|
||||||
can_match_multiple_values= ((flags &
|
can_match_multiple_values= ((flags &
|
||||||
(NO_MIN_RANGE | NO_MAX_RANGE | NEAR_MIN |
|
(NO_MIN_RANGE | NO_MAX_RANGE | NEAR_MIN |
|
||||||
NEAR_MAX)) ||
|
NEAR_MAX)) ||
|
||||||
|
(min_len != max_len) ||
|
||||||
|
(min_len != full_length) ||
|
||||||
memcmp(min_value, max_value, min_len));
|
memcmp(min_value, max_value, min_len));
|
||||||
DBUG_ASSERT(can_match_multiple_values || (flags & EQ_RANGE) || flags == 0);
|
DBUG_ASSERT(can_match_multiple_values || (flags & EQ_RANGE) || flags == 0);
|
||||||
if (can_match_multiple_values && part_info->has_default_partititon())
|
if (can_match_multiple_values && part_info->has_default_partititon())
|
||||||
|
Reference in New Issue
Block a user