mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fix for bug#42944: partition not pruned correctly
Problem: we don't prune a LESS THAN partition if MAXVALUE is given and given value is equal to a LESS THAN value. Fix: prune partitions in such cases.
This commit is contained in:
@@ -1911,5 +1911,18 @@ select count(*) from t1;
|
||||
count(*)
|
||||
288
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#42944: partition not pruned correctly
|
||||
#
|
||||
CREATE TABLE t1 (a int) PARTITION BY RANGE (a)
|
||||
(PARTITION p0 VALUES LESS THAN (100),
|
||||
PARTITION p1 VALUES LESS THAN (200),
|
||||
PARTITION p2 VALUES LESS THAN (300),
|
||||
PARTITION p3 VALUES LESS THAN MAXVALUE);
|
||||
INSERT INTO t1 VALUES (10), (100), (200), (300), (400);
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a>=200;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 3 Using where
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
SET @@global.general_log= @old_general_log;
|
||||
|
@@ -1922,6 +1922,19 @@ insert into t1 select s1 from t1 where s1=3;
|
||||
select count(*) from t1;
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#42944: partition not pruned correctly
|
||||
--echo #
|
||||
CREATE TABLE t1 (a int) PARTITION BY RANGE (a)
|
||||
(PARTITION p0 VALUES LESS THAN (100),
|
||||
PARTITION p1 VALUES LESS THAN (200),
|
||||
PARTITION p2 VALUES LESS THAN (300),
|
||||
PARTITION p3 VALUES LESS THAN MAXVALUE);
|
||||
INSERT INTO t1 VALUES (10), (100), (200), (300), (400);
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a>=200;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
|
@@ -2937,7 +2937,8 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info,
|
||||
the maximum value is in the current partition.
|
||||
*/
|
||||
if (part_func_value > bound ||
|
||||
(part_func_value == bound && !part_info->defined_max_value))
|
||||
(part_func_value == bound &&
|
||||
(!part_info->defined_max_value || loc_part_id < max_partition)))
|
||||
loc_part_id++;
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user