Bug #17109 Records put in wrong partition (range)
Submitted: 3 Feb 2006 22:19 Modified: 6 Feb 2006 16:38
Reporter: Andy Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S2 (Serious)
Version:5.1.6-alpha OS:Linux (Linux)
Assigned to: CPU Architecture:Any

[3 Feb 2006 22:19] Andy
Description:
Records go into the wrong partition when using range partitions. This was partially fixed in a recent patch, but there are still problems with it.  I'm including two test cases to show the slightly different behaviour between the two.  This is NOT the same bug as bug #16684 or bug #15393.  Those bugs are already fixed in this version of mysql. 

How to repeat:
Test 1 :

CREATE TABLE partition_test2 (
  a int default NULL    
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
PARTITION BY RANGE(a)
(
PARTITION p1 VALUES LESS THAN (2),
PARTITION p2 VALUES LESS THAN (3),
PARTITION p3 VALUES LESS THAN (4),
PARTITION p4 VALUES LESS THAN (5),
PARTITION p5 VALUES LESS THAN (6),
PARTITION p6 VALUES LESS THAN (7),
PARTITION p7 VALUES LESS THAN (8),
PARTITION p8 VALUES LESS THAN (9),
PARTITION p9 VALUES LESS THAN (10),
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION p12 VALUES LESS THAN (13),
PARTITION p13 VALUES LESS THAN (14),
PARTITION p14 VALUES LESS THAN MAXVALUE
);

INSERT INTO partition_test2 VALUES (5);

The record will go into partition 7 instead.  This happens every 4th number. 
5 into p7
9 into p14
13 into p14
the rest are fine

Second test (just more partitions, but slightly different behaviour)

CREATE TABLE partition_test3 (
  a int default NULL    
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
PARTITION BY RANGE(a)
(
PARTITION p1 VALUES LESS THAN (2),
PARTITION p2 VALUES LESS THAN (3),
PARTITION p3 VALUES LESS THAN (4),
PARTITION p4 VALUES LESS THAN (5),
PARTITION p5 VALUES LESS THAN (6),
PARTITION p6 VALUES LESS THAN (7),
PARTITION p7 VALUES LESS THAN (8),
PARTITION p8 VALUES LESS THAN (9),
PARTITION p9 VALUES LESS THAN (10),
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION p12 VALUES LESS THAN (13),
PARTITION p13 VALUES LESS THAN (14),
PARTITION p14 VALUES LESS THAN (15),
PARTITION p15 VALUES LESS THAN (16),
PARTITION p16 VALUES LESS THAN (17),
PARTITION p17 VALUES LESS THAN (18),
PARTITION p18 VALUES LESS THAN (19),
PARTITION p19 VALUES LESS THAN (20),
PARTITION p20 VALUES LESS THAN (21),
PARTITION p21 VALUES LESS THAN (22),
PARTITION p22 VALUES LESS THAN (23),
PARTITION p23 VALUES LESS THAN (24),
PARTITION p24 VALUES LESS THAN (25),
PARTITION p25 VALUES LESS THAN (26),
PARTITION p26 VALUES LESS THAN (27),
PARTITION p27 VALUES LESS THAN (28),
PARTITION p28 VALUES LESS THAN (29),
PARTITION p29 VALUES LESS THAN (30),
PARTITION p30 VALUES LESS THAN (31),
PARTITION p31 VALUES LESS THAN (32),
PARTITION p32 VALUES LESS THAN (33),
PARTITION p33 VALUES LESS THAN (34),
PARTITION p34 VALUES LESS THAN (35),
PARTITION p35 VALUES LESS THAN (36),
PARTITION p36 VALUES LESS THAN (37),
PARTITION p37 VALUES LESS THAN (38),
PARTITION p38 VALUES LESS THAN (39),
PARTITION p39 VALUES LESS THAN MAXVALUE
);

INSERT INTO test_partition3 VALUES (6);

Will go into p9 instead of p6.

In this case the interval is 5 instead of 4
6->p9
11->p19
16->p19
21->p39
26->p29
31->p29
36->p39

Suggested fix:
Records should be going into the proper partition.
[5 Feb 2006 11:43] Valeriy Kravchuk
Thank you for a problem report. Please, explain, how you checked that the row was put in partition p7? I've tested with 5.1.7-beta, and the row goes to p5, as it should be.
[6 Feb 2006 16:38] Andy
This bug was due to an old patch for bug #15393 which was still in the sql_partition.cc file.  I downloaded a new source tree to make sure my source was clean and the problem no longer  exists in the code (5.1.7-beta).