1
0
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:
Ramil Kalimullin
2009-04-01 10:34:59 +05:00
parent cf208ac55a
commit a26f8d91aa
3 changed files with 28 additions and 1 deletions

View File

@@ -1911,5 +1911,18 @@ select count(*) from t1;
count(*) count(*)
288 288
drop table t1; 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 End of 5.1 tests
SET @@global.general_log= @old_general_log; SET @@global.general_log= @old_general_log;

View File

@@ -1922,6 +1922,19 @@ insert into t1 select s1 from t1 where s1=3;
select count(*) from t1; select count(*) from t1;
drop table 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 --echo End of 5.1 tests

View File

@@ -2937,7 +2937,8 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info,
the maximum value is in the current partition. the maximum value is in the current partition.
*/ */
if (part_func_value > bound || 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++; loc_part_id++;
} }
else else