List:Commits« Previous MessageNext Message »
From:Patrick Galbraith Date:January 27 2006 2:48am
Subject:bk commit into 5.1 tree (patg:1.2077)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of patg. When patg does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2077 06/01/26 18:48:13 patg@stripped +8 -0
  WL# 2986
  
  More post review fixes/changes

  mysql-test/t/partition_wl2986.test
    1.1 06/01/26 18:48:09 patg@stripped +137 -0
    WL# 2986
    
    New test for WL# 2986 to show use of bitmap

  mysql-test/r/partition_wl2986.result
    1.1 06/01/26 18:48:09 patg@stripped +214 -0
    WL# 2986
    
    Not sure what to name this test - for WL# 2986

  sql/sql_partition.cc
    1.29 06/01/26 18:48:09 patg@stripped +0 -2
    WL# 2986
    
    Removed use_bit_array references per review

  sql/opt_range.cc
    1.199 06/01/26 18:48:09 patg@stripped +2 -2
    WL# 2986
    
    Fixed mistaken merge

  sql/handler.h
    1.182 06/01/26 18:48:09 patg@stripped +0 -1
    WL# 2986
    
    Removed use_bit_array member per review

  sql/ha_partition.h
    1.14 06/01/26 18:48:09 patg@stripped +0 -1
    WL# 2986
    
    Removed m_use_bit_array per review

  sql/ha_partition.cc
    1.31 06/01/26 18:48:09 patg@stripped +13 -5
    WL# 2986
    
    Post review fixes
    
    * Added error handling
    * Formating, style fixes
    * removed any instances of use_bit_array

  mysql-test/t/partition_wl2986.test
    1.0 06/01/26 18:48:09 patg@stripped +0 -0
    BitKeeper file /home/patg/mysql-build/mysql-5.1-wl2986/mysql-test/t/partition_wl2986.test

  mysql-test/r/partition_wl2986.result
    1.0 06/01/26 18:48:09 patg@stripped +0 -0
    BitKeeper file /home/patg/mysql-build/mysql-5.1-wl2986/mysql-test/r/partition_wl2986.result

  mysql-test/r/partition_pruning.result
    1.7 06/01/26 18:48:08 patg@stripped +7 -7
    WL# 2986
    
    New results due to using bitmap in partition storage engine. These results 
    are correct, as verified with Sergey P.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	patg
# Host:	govinda.patg.net
# Root:	/home/patg/mysql-build/mysql-5.1-wl2986

--- 1.181/sql/handler.h	2006-01-24 19:01:48 -08:00
+++ 1.182/sql/handler.h	2006-01-26 18:48:09 -08:00
@@ -618,7 +618,6 @@
 typedef struct {
   uint32 start_part;
   uint32 end_part;
-  bool use_bit_array;
 } part_id_range;
 
 

--- 1.198/sql/opt_range.cc	2006-01-25 22:07:42 -08:00
+++ 1.199/sql/opt_range.cc	2006-01-26 18:48:09 -08:00
@@ -2824,8 +2824,8 @@
         while ((part_id= ppar->part_iter.get_next(&ppar->part_iter)) !=
                 NOT_A_PARTITION_ID)
         {
-          DBUG_PRINT("info", ("2:Mark subpartition %u as used", part_id));
-          bitmap_set_bit(&part_info->used_partitions, part_id);
+          bitmap_set_bit(&part_info->used_partitions,
+                         part_id * part_info->no_subparts + subpart_id);
         }
         res= 1; /* Some partitions were marked as used */
         goto pop_and_go_right;

--- 1.30/sql/ha_partition.cc	2006-01-26 09:57:37 -08:00
+++ 1.31/sql/ha_partition.cc	2006-01-26 18:48:09 -08:00
@@ -2251,7 +2251,8 @@
   }
 
   /* Initialise the bitmap we use to determine what partitions are used */
-  bitmap_init(&(m_part_info->used_partitions), NULL, m_tot_parts, TRUE);
+  if (bitmap_init(&(m_part_info->used_partitions), NULL, m_tot_parts, TRUE))
+    goto err;
   bitmap_set_all(&(m_part_info->used_partitions));
 
   file= m_file;
@@ -2297,6 +2298,7 @@
 err_handler:
   while (file-- != m_file)
     (*file)->close();
+err:
   DBUG_RETURN(error);
 }
 
@@ -3048,7 +3050,9 @@
       DBUG_RETURN(0);
     }
 
-    /* if we get here, then the current partition rnd_next returned failure */    
+    /*
+      if we get here, then the current partition rnd_next returned failure
+    */
     if (result == HA_ERR_RECORD_DELETED)
       continue;                               // Probably MyISAM
 
@@ -3071,8 +3075,7 @@
       break;
     }
     file= m_file[part_id];
-    DBUG_PRINT("info", ("rnd_init on partition %d",
-               part_id));
+    DBUG_PRINT("info", ("rnd_init on partition %d", part_id));
     if ((result= file->ha_rnd_init(1)))
       break;
     late_extra_cache(part_id);
@@ -4978,7 +4981,12 @@
   do
   {
     if (bitmap_is_set(&(m_part_info->used_partitions), (file - m_file)))
-      in_range+= (*file)->records_in_range(inx, min_key, max_key);
+    {
+      ha_rows tmp_in_range= (*file)->records_in_range(inx, min_key, max_key);
+      if (tmp_in_range == HA_POS_ERROR || tmp_in_range == HA_OFFSET_ERROR)
+        DBUG_RETURN(tmp_in_range);
+      in_range+= tmp_in_range;
+    }
   } while (*(++file));
   DBUG_RETURN(in_range);
 }

--- 1.13/sql/ha_partition.h	2006-01-25 22:08:29 -08:00
+++ 1.14/sql/ha_partition.h	2006-01-26 18:48:09 -08:00
@@ -100,7 +100,6 @@
   bool m_create_handler;                 // Handler used to create table
   bool m_is_sub_partitioned;             // Is subpartitioned
   bool m_ordered_scan_ongoing;
-  bool m_use_bit_array;
 
   /*
     We keep track if all underlying handlers are MyISAM since MyISAM has a

--- 1.28/sql/sql_partition.cc	2006-01-25 22:08:29 -08:00
+++ 1.29/sql/sql_partition.cc	2006-01-26 18:48:09 -08:00
@@ -3639,7 +3639,6 @@
   bool found_part_field= FALSE;
   DBUG_ENTER("get_partition_set");
 
-  part_spec->use_bit_array= FALSE;
   part_spec->start_part= 0;
   part_spec->end_part= no_parts - 1;
   if ((index < MAX_KEY) && 
@@ -3757,7 +3756,6 @@
     else
     {
       DBUG_ASSERT(sub_part != no_parts);
-      part_spec->use_bit_array= TRUE;
       part_spec->start_part= sub_part;
       part_spec->end_part=sub_part+
                            (part_info->no_subparts*(part_info->no_parts-1));
--- New file ---
+++ mysql-test/r/partition_wl2986.result	06/01/26 18:48:09
DROP TABLE IF EXISTS `t1`;
Warnings:
Note	1051	Unknown table 't1'
CREATE TABLE `t1` (
`a` int(11) default NULL
)
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));
INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
DROP TABLE IF EXISTS `t2`;
Warnings:
Note	1051	Unknown table 't2'
CREATE TABLE `t2` (
`a` int(11) default NULL,
KEY `a` (`a`)
) ;
insert into t2 select A.a + 10*(B.a + 10* C.a) from t1 A, t1 B, t1 C ;
insert into t1 select a from t2;
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
`a` int(11) default NULL,
`b` int(11) default NULL
) 
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));
insert into t2 select a,1 from t1 where a < 200;
insert into t2 select a,2 from t1 where a >= 200 and a < 400;
insert into t2 select a,3 from t1 where a >= 400 and a < 600;
insert into t2 select a,4 from t1 where a >= 600 and a < 800;
insert into t2 select a,5 from t1 where a >= 800 and a < 1001;
explain partitions select * from t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	NULL	NULL	NULL	NULL	1010	
explain partitions select * from t2 where a < 801 and a > 200;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p1,p2,p3,p4	ALL	NULL	NULL	NULL	NULL	800	Using where
explain partitions select * from t2 where a < 801 and a > 800;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p4	ALL	NULL	NULL	NULL	NULL	200	Using where
explain partitions select * from t2 where a > 600;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p3,p4	ALL	NULL	NULL	NULL	NULL	400	Using where
explain partitions select * from t2 where a > 600 and b = 1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p3,p4	ALL	NULL	NULL	NULL	NULL	400	Using where
explain partitions select * from t2 where a > 600 and b = 4;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p3,p4	ALL	NULL	NULL	NULL	NULL	400	Using where
explain partitions select * from t2 where a > 600 and b = 5;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p3,p4	ALL	NULL	NULL	NULL	NULL	400	Using where
explain partitions select * from t2 where b = 5;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	NULL	NULL	NULL	NULL	1010	Using where
flush status;
update t2 set b = 100 where b = 6;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1015
flush status;
update t2 set a = 1002 where a = 1001;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1015
flush status;
update t2 set b = 6 where a = 600;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1015
flush status;
update t2 set b = 6 where a > 600 and a < 800;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1015
flush status;
delete from t2 where a > 600;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1015
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
`a` int(11) default NULL,
`b` int(11) default NULL,
index (b)
) 
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));
insert into t2 select a,1 from t1 where a < 100;
insert into t2 select a,2 from t1 where a >= 200 and a < 300;
insert into t2 select a,3 from t1 where a >= 300 and a < 400;
insert into t2 select a,4 from t1 where a >= 400 and a < 500;
insert into t2 select a,5 from t1 where a >= 500 and a < 600;
insert into t2 select a,6 from t1 where a >= 600 and a < 700;
insert into t2 select a,7 from t1 where a >= 700 and a < 800;
insert into t2 select a,8 from t1 where a >= 800 and a < 900;
insert into t2 select a,9 from t1 where a >= 900 and a < 1001;
explain partitions select * from t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	NULL	NULL	NULL	NULL	910	
explain partitions select * from t2 where a = 101;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0	ALL	NULL	NULL	NULL	NULL	110	Using where
explain partitions select * from t2 where a = 550;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p2	ALL	NULL	NULL	NULL	NULL	200	Using where
explain partitions select * from t2 where a = 833;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p4	ALL	NULL	NULL	NULL	NULL	200	Using where
explain partitions select * from t2 where (a = 100 OR a = 900);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p4	ALL	NULL	NULL	NULL	NULL	310	Using where
explain partitions select * from t2 where (a > 100 AND a < 600);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3	ALL	NULL	NULL	NULL	NULL	710	Using where
explain partitions select * from t2 where b = 4;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ref	b	b	5	const	76	Using where
explain partitions select * from t2 where b = 6;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ref	b	b	5	const	76	Using where
explain partitions select * from t2 where b in (1,3,5);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
explain partitions select * from t2 where b in (2,4,6);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
explain partitions select * from t2 where b in (7,8,9);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
explain partitions select * from t2 where b > 5;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
explain partitions select * from t2 where b > 5 and b < 8;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
explain partitions select * from t2 where b > 5 and b < 7;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	range	b	b	5	NULL	76	Using where
explain partitions select * from t2 where b > 0 and b < 5;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	p0,p1,p2,p3,p4	ALL	b	NULL	NULL	NULL	910	Using where
flush status;
update t2 set a = 111 where b = 10;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	0
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	5
flush status;
update t2 set a = 111 where b in (5,6);
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	915
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	0
flush status;
update t2 set a = 222 where b = 7;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	0
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	5
flush status;
delete from t2 where b = 7;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	0
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	5
flush status;
delete from t2 where b > 5;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1215
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	0
show status like 'Handler_read_prev';
Variable_name	Value
Handler_read_prev	0
show status like 'Handler_read_next';
Variable_name	Value
Handler_read_next	0
flush status;
delete from t2 where b < 5 or b > 3;
show status like 'Handler_read_rnd_next';
Variable_name	Value
Handler_read_rnd_next	1215
show status like 'Handler_read_key';
Variable_name	Value
Handler_read_key	0
show status like 'Handler_read_prev';
Variable_name	Value
Handler_read_prev	0
show status like 'Handler_read_next';
Variable_name	Value
Handler_read_next	0
drop table t1, t2;

--- New file ---
+++ mysql-test/t/partition_wl2986.test	06/01/26 18:48:09
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `a` int(11) default NULL
)
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));

INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `a` int(11) default NULL,
  KEY `a` (`a`)
) ;

insert into t2 select A.a + 10*(B.a + 10* C.a) from t1 A, t1 B, t1 C ;

insert into t1 select a from t2;

DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `a` int(11) default NULL,
  `b` int(11) default NULL
) 
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));

insert into t2 select a,1 from t1 where a < 200;
insert into t2 select a,2 from t1 where a >= 200 and a < 400;
insert into t2 select a,3 from t1 where a >= 400 and a < 600;
insert into t2 select a,4 from t1 where a >= 600 and a < 800;
insert into t2 select a,5 from t1 where a >= 800 and a < 1001;

explain partitions select * from t2;
explain partitions select * from t2 where a < 801 and a > 200;
explain partitions select * from t2 where a < 801 and a > 800;
explain partitions select * from t2 where a > 600;
explain partitions select * from t2 where a > 600 and b = 1;
explain partitions select * from t2 where a > 600 and b = 4;
explain partitions select * from t2 where a > 600 and b = 5;
explain partitions select * from t2 where b = 5;

flush status;
update t2 set b = 100 where b = 6;
show status like 'Handler_read_rnd_next';
flush status;
update t2 set a = 1002 where a = 1001;
show status like 'Handler_read_rnd_next';
flush status;
update t2 set b = 6 where a = 600;
show status like 'Handler_read_rnd_next';
flush status;
update t2 set b = 6 where a > 600 and a < 800;
show status like 'Handler_read_rnd_next';
flush status;
delete from t2 where a > 600;
show status like 'Handler_read_rnd_next';


DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `a` int(11) default NULL,
  `b` int(11) default NULL,
  index (b)
) 
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (200),
PARTITION p1 VALUES LESS THAN (400),
PARTITION p2 VALUES LESS THAN (600),
PARTITION p3 VALUES LESS THAN (800),
PARTITION p4 VALUES LESS THAN (1001));

insert into t2 select a,1 from t1 where a < 100;
insert into t2 select a,2 from t1 where a >= 200 and a < 300;
insert into t2 select a,3 from t1 where a >= 300 and a < 400;
insert into t2 select a,4 from t1 where a >= 400 and a < 500;
insert into t2 select a,5 from t1 where a >= 500 and a < 600;
insert into t2 select a,6 from t1 where a >= 600 and a < 700;
insert into t2 select a,7 from t1 where a >= 700 and a < 800;
insert into t2 select a,8 from t1 where a >= 800 and a < 900;
insert into t2 select a,9 from t1 where a >= 900 and a < 1001;

explain partitions select * from t2;
# not using indexes
explain partitions select * from t2 where a = 101;
explain partitions select * from t2 where a = 550;
explain partitions select * from t2 where a = 833;
explain partitions select * from t2 where (a = 100 OR a = 900);
explain partitions select * from t2 where (a > 100 AND a < 600);
explain partitions select * from t2 where b = 4;
explain partitions select * from t2 where b = 6;
explain partitions select * from t2 where b in (1,3,5);
explain partitions select * from t2 where b in (2,4,6);
explain partitions select * from t2 where b in (7,8,9);
explain partitions select * from t2 where b > 5;
explain partitions select * from t2 where b > 5 and b < 8;
explain partitions select * from t2 where b > 5 and b < 7;
explain partitions select * from t2 where b > 0 and b < 5;

flush status;
update t2 set a = 111 where b = 10;
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
flush status;
update t2 set a = 111 where b in (5,6);
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
flush status;
update t2 set a = 222 where b = 7;
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
flush status;
delete from t2 where b = 7;
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
flush status;
delete from t2 where b > 5;
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
show status like 'Handler_read_prev';
show status like 'Handler_read_next';
flush status;
delete from t2 where b < 5 or b > 3;
show status like 'Handler_read_rnd_next';
show status like 'Handler_read_key';
show status like 'Handler_read_prev';
show status like 'Handler_read_next';

drop table t1, t2;


--- 1.6/mysql-test/r/partition_pruning.result	2006-01-25 11:54:39 -08:00
+++ 1.7/mysql-test/r/partition_pruning.result	2006-01-26 18:48:08 -08:00
@@ -266,25 +266,25 @@
 select * from t1 X, t1 Y 
 where X.b = Y.b and (X.a=1 or X.a=2) and (Y.a=2 or Y.a=3);
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	X	p1,p2	ALL	a,b	NULL	NULL	NULL	4	Using where
+1	SIMPLE	X	p1,p2	ALL	a,b	NULL	NULL	NULL	2	Using where
 1	SIMPLE	Y	p2,p3	ref	a,b	b	4	test.X.b	2	Using where
 explain partitions
 select * from t1 X, t1 Y where X.a = Y.a and (X.a=1 or X.a=2);
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	X	p1,p2	ALL	a	NULL	NULL	NULL	4	Using where
+1	SIMPLE	X	p1,p2	ALL	a	NULL	NULL	NULL	2	Using where
 1	SIMPLE	Y	p1,p2	ref	a	a	4	test.X.a	2	
 drop table t1;
 create table t1 (a int) partition by hash(a) partitions 20;
 insert into t1 values (1),(2),(3);
 explain partitions select * from t1 where a >  1 and a < 3;
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t1	p2	ALL	NULL	NULL	NULL	NULL	3	Using where
+1	SIMPLE	t1	p2	system	NULL	NULL	NULL	NULL	1	
 explain partitions select * from t1 where a >= 1 and a < 3;
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t1	p1,p2	ALL	NULL	NULL	NULL	NULL	3	Using where
+1	SIMPLE	t1	p1,p2	ALL	NULL	NULL	NULL	NULL	2	Using where
 explain partitions select * from t1 where a >  1 and a <= 3;
 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
+1	SIMPLE	t1	p2,p3	ALL	NULL	NULL	NULL	NULL	2	Using where
 explain partitions select * from t1 where a >= 1 and a <= 3;
 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
@@ -300,7 +300,7 @@
 insert into t1 values (1,1),(2,2),(3,3);
 explain partitions select * from t1 where b >  1 and b < 3;
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t1	p0_sp2,p1_sp2,p2_sp2,p3_sp2	ALL	NULL	NULL	NULL	NULL	3	Using where
+1	SIMPLE	t1	p0_sp2,p1_sp2,p2_sp2,p3_sp2	system	NULL	NULL	NULL	NULL	1	
 explain partitions select * from t1 where b >  1 and b < 3 and (a =1 or a =2);
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t1	p1_sp2,p2_sp2	ALL	NULL	NULL	NULL	NULL	3	Using where
+1	SIMPLE	t1	p1_sp2,p2_sp2	system	NULL	NULL	NULL	NULL	1	
Thread
bk commit into 5.1 tree (patg:1.2077)Patrick Galbraith27 Jan