mirror of
https://github.com/MariaDB/server.git
synced 2026-04-30 12:15:32 +02: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.
mysql-test/r/partition.result:
Fix for bug#42944: partition not pruned correctly
- test result.
mysql-test/t/partition.test:
Fix for bug#42944: partition not pruned correctly
- test case.
sql/sql_partition.cc:
Fix for bug#42944: partition not pruned correctly
- prune partition if given value is equal to a LESS THAN value
and it's not a "PARTITION ... LESS THAN MAXVALUE" one.
This commit is contained in:
parent
ab958ee0bd
commit
968069d845
3 changed files with 28 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue