List:Commits« Previous MessageNext Message »
From:Marc Alff Date:January 12 2009 7:56pm
Subject:bzr push into mysql-6.0-perf branch (marc.alff:2765 to 2766)
View as plain text  
 2766 Marc Alff	2009-01-12 [merge]
      Merge mysql-6.0 --> mysql-6.0-perf
modified:
  .bzr-mysql/default.conf
  mysql-test/r/innodb_mrr.result
  mysql-test/r/join_cache.result
  mysql-test/r/subselect3.result
  mysql-test/r/subselect3_jcl6.result
  mysql-test/t/innodb_mrr.test
  mysql-test/t/join_cache.test
  mysql-test/t/subselect3.test
  sql/ha_ndbcluster.cc
  sql/ha_partition.h
  sql/handler.h
  sql/sql_join_cache.cc
  sql/sql_select.cc
  sql/sql_select.h
  storage/innobase/handler/ha_innodb.cc
  storage/myisam/ha_myisam.cc
  storage/myisam/ha_myisam.h

 2765 Marc Alff	2009-01-12
      Added missing files
added:
  storage/perfschema/pse_misc.cc
  storage/perfschema/pse_misc.h

=== modified file '.bzr-mysql/default.conf'
--- a/.bzr-mysql/default.conf	2009-01-06 18:36:34 +0000
+++ b/.bzr-mysql/default.conf	2009-01-12 18:55:11 +0000
@@ -1,5 +1,5 @@
 [MYSQL]
 tree_location = bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0-perf
-post_commit_to = commits@stripped
-post_push_to = commits@stripped
-tree_name = mysql-6.0-perf
+post_commit_to = "commits@stripped"
+post_push_to = "commits@stripped"
+tree_name = "mysql-6.0-perf"

=== modified file 'mysql-test/r/innodb_mrr.result'
--- a/mysql-test/r/innodb_mrr.result	2008-09-05 14:36:37 +0000
+++ b/mysql-test/r/innodb_mrr.result	2008-12-29 03:42:30 +0000
@@ -351,3 +351,32 @@ pk
 1
 5
 drop table t1;
+#
+# BUG#39447: Error with NOT NULL condition and LIMIT 1
+#
+CREATE TABLE t1 (                 
+id int(11) NOT NULL,                
+parent_id int(11) DEFAULT NULL,     
+name varchar(10) DEFAULT NULL,      
+PRIMARY KEY (id),                   
+KEY ind_parent_id (parent_id)     
+) ENGINE=InnoDB;
+insert into t1 (id, parent_id, name) values
+(10,NULL,'A'),
+(20,10,'B'),
+(30,10,'C'),
+(40,NULL,'D'),
+(50,40,'E'),
+(60,40,'F'),
+(70,NULL,'J');
+SELECT id FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+id
+60
+This must show type=index, extra=Using where
+explain SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index	ind_parent_id	PRIMARY	4	NULL	2	Using where
+SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+id	parent_id	name
+60	40	F
+drop table t1;

=== modified file 'mysql-test/r/join_cache.result'
--- a/mysql-test/r/join_cache.result	2008-12-07 20:44:24 +0000
+++ b/mysql-test/r/join_cache.result	2009-01-08 05:47:10 +0000
@@ -3576,3 +3576,46 @@ AVG(c)
 set join_buffer_size=default;
 set join_cache_level=default;
 DROP TABLE t1, t2;
+#
+# Bug #41894: big join buffer of level 7 used to join records
+#              with null values in place of varchar strings
+#
+CREATE TABLE t1 (a int NOT NULL AUTO_INCREMENT PRIMARY KEY,
+b varchar(127) DEFAULT NULL);
+INSERT INTO t1(a) VALUES (1);
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+CREATE TABLE t2 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
+INSERT INTO t2 SELECT * FROM t1;
+CREATE TABLE t3 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
+INSERT INTO t3 SELECT * FROM t1;
+set join_cache_level=7;
+set join_buffer_size=1024*1024;
+EXPLAIN
+SELECT COUNT(*) FROM t1,t2,t3
+WHERE t1.a=t2.a AND t2.a=t3.a AND
+t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	PRIMARY	NULL	NULL	NULL	16384	Using where
+1	SIMPLE	t2	eq_ref	PRIMARY	PRIMARY	4	test.t1.a	1	Using where; Using join buffer
+1	SIMPLE	t3	eq_ref	PRIMARY	PRIMARY	4	test.t1.a	1	Using where; Using join buffer
+SELECT COUNT(*) FROM t1,t2,t3
+WHERE t1.a=t2.a AND t2.a=t3.a AND
+t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;
+COUNT(*)
+16384
+set join_buffer_size=default;
+set join_cache_level=default;
+DROP TABLE t1,t2,t3;

=== modified file 'mysql-test/r/subselect3.result'
--- a/mysql-test/r/subselect3.result	2008-12-23 04:05:29 +0000
+++ b/mysql-test/r/subselect3.result	2008-12-28 15:00:21 +0000
@@ -1190,3 +1190,36 @@ a
 9
 set join_cache_level=@save_join_cache_level;
 drop table t0, t1;
+# 
+# BUG#32665 Query with dependent subquery is too slow
+#
+create table t1 (
+idIndividual int primary key
+);
+insert into t1 values (1),(2);
+create table t2 (
+idContact int primary key,
+contactType int,
+idObj int
+);
+insert into t2 values (1,1,1),(2,2,2),(3,3,3);
+create table t3 (
+idAddress int primary key,
+idContact int,
+postalStripped varchar(100)
+);
+insert into t3 values (1,1, 'foo'), (2,2,'bar');
+The following must be converted to a semi-join:
+explain extended SELECT a.idIndividual FROM t1 a 
+WHERE a.idIndividual IN 
+(	SELECT c.idObj FROM t3 cona 
+INNER JOIN t2 c ON c.idContact=cona.idContact 
+WHERE cona.postalStripped='T2H3B2'
+	);
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
+1	PRIMARY	cona	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where; Start materialize; Scan
+1	PRIMARY	c	eq_ref	PRIMARY	PRIMARY	4	test.cona.idContact	1	100.00	End materialize
+1	PRIMARY	a	index	PRIMARY	PRIMARY	4	NULL	2	100.00	Using where; Using index; Using join
buffer
+Warnings:
+Note	1003	select `test`.`a`.`idIndividual` AS `idIndividual` from `test`.`t1` `a` semi
join (`test`.`t3` `cona` join `test`.`t2` `c`) where ((`test`.`c`.`idContact` =
`test`.`cona`.`idContact`) and (`test`.`a`.`idIndividual` = `test`.`c`.`idObj`) and
(`test`.`cona`.`postalStripped` = 'T2H3B2'))
+drop table t1,t2,t3;

=== modified file 'mysql-test/r/subselect3_jcl6.result'
--- a/mysql-test/r/subselect3_jcl6.result	2008-12-23 04:05:29 +0000
+++ b/mysql-test/r/subselect3_jcl6.result	2008-12-28 15:00:21 +0000
@@ -1195,6 +1195,39 @@ a
 9
 set join_cache_level=@save_join_cache_level;
 drop table t0, t1;
+# 
+# BUG#32665 Query with dependent subquery is too slow
+#
+create table t1 (
+idIndividual int primary key
+);
+insert into t1 values (1),(2);
+create table t2 (
+idContact int primary key,
+contactType int,
+idObj int
+);
+insert into t2 values (1,1,1),(2,2,2),(3,3,3);
+create table t3 (
+idAddress int primary key,
+idContact int,
+postalStripped varchar(100)
+);
+insert into t3 values (1,1, 'foo'), (2,2,'bar');
+The following must be converted to a semi-join:
+explain extended SELECT a.idIndividual FROM t1 a 
+WHERE a.idIndividual IN 
+(	SELECT c.idObj FROM t3 cona 
+INNER JOIN t2 c ON c.idContact=cona.idContact 
+WHERE cona.postalStripped='T2H3B2'
+	);
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
+1	PRIMARY	cona	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where; Start materialize; Scan
+1	PRIMARY	c	eq_ref	PRIMARY	PRIMARY	4	test.cona.idContact	1	100.00	End materialize; Using
join buffer
+1	PRIMARY	a	index	PRIMARY	PRIMARY	4	NULL	2	100.00	Using where; Using index; Using join
buffer
+Warnings:
+Note	1003	select `test`.`a`.`idIndividual` AS `idIndividual` from `test`.`t1` `a` semi
join (`test`.`t3` `cona` join `test`.`t2` `c`) where ((`test`.`c`.`idContact` =
`test`.`cona`.`idContact`) and (`test`.`a`.`idIndividual` = `test`.`c`.`idObj`) and
(`test`.`cona`.`postalStripped` = 'T2H3B2'))
+drop table t1,t2,t3;
 set join_cache_level=default;
 show variables like 'join_cache_level';
 Variable_name	Value

=== modified file 'mysql-test/t/innodb_mrr.test'
--- a/mysql-test/t/innodb_mrr.test	2008-09-05 14:36:37 +0000
+++ b/mysql-test/t/innodb_mrr.test	2008-12-29 03:42:30 +0000
@@ -99,3 +99,28 @@ select pk from t1 WHERE `varchar_key` >
 select pk from t1 WHERE `int_nokey` IS NULL OR  `varchar_key` > 'kr' group by pk;
 drop table t1;
 
+--echo #
+--echo # BUG#39447: Error with NOT NULL condition and LIMIT 1
+--echo #
+CREATE TABLE t1 (                 
+   id int(11) NOT NULL,                
+   parent_id int(11) DEFAULT NULL,     
+   name varchar(10) DEFAULT NULL,      
+   PRIMARY KEY (id),                   
+   KEY ind_parent_id (parent_id)     
+) ENGINE=InnoDB;
+
+insert into t1 (id, parent_id, name) values
+(10,NULL,'A'),
+(20,10,'B'),
+(30,10,'C'),
+(40,NULL,'D'),
+(50,40,'E'),
+(60,40,'F'),
+(70,NULL,'J');
+
+SELECT id FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+--echo This must show type=index, extra=Using where
+explain SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1;
+drop table t1;

=== modified file 'mysql-test/t/join_cache.test'
--- a/mysql-test/t/join_cache.test	2008-12-07 20:44:24 +0000
+++ b/mysql-test/t/join_cache.test	2009-01-08 05:47:10 +0000
@@ -976,3 +976,50 @@ set join_buffer_size=default;
 set join_cache_level=default;
 
 DROP TABLE t1, t2;
+
+--echo #
+--echo # Bug #41894: big join buffer of level 7 used to join records
+--echo #              with null values in place of varchar strings
+--echo #
+
+CREATE TABLE t1 (a int NOT NULL AUTO_INCREMENT PRIMARY KEY,
+                 b varchar(127) DEFAULT NULL);
+
+INSERT INTO t1(a) VALUES (1);
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+INSERT INTO t1(b) SELECT b FROM t1;
+
+CREATE TABLE t2 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
+INSERT INTO t2 SELECT * FROM t1;
+
+CREATE TABLE t3 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
+INSERT INTO t3 SELECT * FROM t1;
+
+set join_cache_level=7;
+set join_buffer_size=1024*1024;
+
+EXPLAIN
+SELECT COUNT(*) FROM t1,t2,t3
+  WHERE t1.a=t2.a AND t2.a=t3.a AND
+        t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;
+
+SELECT COUNT(*) FROM t1,t2,t3
+  WHERE t1.a=t2.a AND t2.a=t3.a AND
+        t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;
+
+set join_buffer_size=default;
+set join_cache_level=default;
+
+DROP TABLE t1,t2,t3;

=== modified file 'mysql-test/t/subselect3.test'
--- a/mysql-test/t/subselect3.test	2008-12-22 20:10:35 +0000
+++ b/mysql-test/t/subselect3.test	2008-12-28 15:00:21 +0000
@@ -976,3 +976,35 @@ set join_cache_level=6;
 select * from t0 where t0.a in (select t1.a from t1 where t1.b=0); 
 set join_cache_level=@save_join_cache_level;
 drop table t0, t1;
+
+--echo # 
+--echo # BUG#32665 Query with dependent subquery is too slow
+--echo #
+create table t1 (
+  idIndividual int primary key
+);
+insert into t1 values (1),(2);
+
+create table t2 (
+  idContact int primary key,
+  contactType int,
+  idObj int
+);
+insert into t2 values (1,1,1),(2,2,2),(3,3,3);
+
+create table t3 (
+  idAddress int primary key,
+  idContact int,
+  postalStripped varchar(100)
+);
+
+insert into t3 values (1,1, 'foo'), (2,2,'bar');
+
+--echo The following must be converted to a semi-join:
+explain extended SELECT a.idIndividual FROM t1 a 
+WHERE a.idIndividual IN 
+	(	SELECT c.idObj FROM t3 cona 
+		INNER JOIN t2 c ON c.idContact=cona.idContact 
+		WHERE cona.postalStripped='T2H3B2'
+	);
+drop table t1,t2,t3;

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	2008-12-24 11:48:48 +0000
+++ b/sql/ha_ndbcluster.cc	2009-01-12 18:55:11 +0000
@@ -6603,7 +6603,6 @@ void ha_ndbcluster::get_auto_increment(u
                 HA_NULL_IN_KEY | \
                 HA_AUTO_PART_KEY | \
                 HA_NO_PREFIX_CHAR_KEYS | \
-                HA_NEED_READ_RANGE_BUFFER | \
                 HA_CAN_GEOMETRY | \
                 HA_CAN_BIT_FIELD | \
                 HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | \

=== modified file 'sql/ha_partition.h'
--- a/sql/ha_partition.h	2009-01-06 18:36:34 +0000
+++ b/sql/ha_partition.h	2009-01-12 18:55:11 +0000
@@ -728,18 +728,6 @@ public:
     Is the storage engine capable of handling bit fields?
     (MyISAM, NDB)
 
-    HA_NEED_READ_RANGE_BUFFER:
-    Is Read Multi-Range supported => need multi read range buffer
-    This parameter specifies whether a buffer for read multi range
-    is needed by the handler. Whether the handler supports this
-    feature or not is dependent of whether the handler implements
-    read_multi_range* calls or not. The only handler currently
-    supporting this feature is NDB so the partition handler need
-    not handle this call. There are methods in handler.cc that will
-    transfer those calls into index_read and other calls in the
-    index scan module.
-    (NDB)
-
     HA_PRIMARY_KEY_REQUIRED_FOR_POSITION:
     Does the storage engine need a PK for position?
     Used with hidden primary key in InnoDB.

=== modified file 'sql/handler.h'
--- a/sql/handler.h	2009-01-06 18:36:34 +0000
+++ b/sql/handler.h	2009-01-12 18:55:11 +0000
@@ -167,14 +167,11 @@ typedef Bitmap<HA_MAX_ALTER_FLAGS> HA_AL
 #define HA_FILE_BASED	       (1 << 26)
 #define HA_NO_VARCHAR	       (1 << 27)
 #define HA_CAN_BIT_FIELD       (1 << 28) /* supports bit fields */
-#define HA_NEED_READ_RANGE_BUFFER (1 << 29) /* for read_multi_range */
 #define HA_ANY_INDEX_MAY_BE_UNIQUE (1 << 30)
 #define HA_NO_COPY_ON_ALTER    (LL(1) << 31)
 #define HA_HAS_RECORDS	       (LL(1) << 32) /* records() gives exact count*/
 /* Has it's own method of binlog logging */
 #define HA_HAS_OWN_BINLOGGING  (LL(1) << 33)
-#define HA_MRR_CANT_SORT       (LL(1) << 34)
-
 /*
   Engine is capable of row-format and statement-format logging,
   respectively

=== modified file 'sql/sql_join_cache.cc'
--- a/sql/sql_join_cache.cc	2008-12-22 19:03:25 +0000
+++ b/sql/sql_join_cache.cc	2009-01-08 05:47:10 +0000
@@ -2446,9 +2446,16 @@ int JOIN_CACHE_BKA_UNIQUE::init()
 
     uint n= buff_size / (pack_length+key_entry_length+size_of_key_ofs);
 
+    /*
+      TODO: Make a better estimate for this upper bound of
+            the number of records in in the join buffer.
+    */
+    uint max_n= buff_size / (pack_length-length+
+                             key_entry_length+size_of_key_ofs);
+
     hash_entries= (uint) (n / 0.7);
     
-    if (offset_size(n*key_entry_length) <=
+    if (offset_size(max_n*key_entry_length) <=
         size_of_key_ofs)
       break;
   }

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2008-12-31 13:49:36 +0000
+++ b/sql/sql_select.cc	2009-01-10 10:56:50 +0000
@@ -18734,9 +18734,9 @@ test_if_skip_sort_order(JOIN_TAB *tab,OR
           }
           if (tab->pre_idx_push_select_cond)
           {
+            tab->select_cond= tab->pre_idx_push_select_cond;
             if (tab->select)
               tab->select->cond= tab->select_cond;
-            tab->select_cond= tab->pre_idx_push_select_cond;
           }
           table->file->ha_index_or_rnd_end();
           if (join->select_options & SELECT_DESCRIBE)

=== modified file 'sql/sql_select.h'
--- a/sql/sql_select.h	2008-12-27 19:17:35 +0000
+++ b/sql/sql_select.h	2009-01-08 05:47:10 +0000
@@ -397,12 +397,6 @@ private:
   /* Size of the offset of a field within a record in the cache */   
   uint size_of_fld_ofs;
 
-  /* 
-    The total maximal length of the fields stored for a record in the cache.
-    For blob fields only the sizes of the blob lengths are taken into account. 
-  */
-  uint length;
-
 protected:
        
   /* 3 functions below actually do not use the hidden parameter 'this' */ 
@@ -433,6 +427,12 @@ protected:
   }
   
   /* 
+    The total maximal length of the fields stored for a record in the cache.
+    For blob fields only the sizes of the blob lengths are taken into account. 
+  */
+  uint length;
+
+  /* 
     Representation of the executed multi-way join through which all needed
     context can be accessed.  
   */   
@@ -891,7 +891,7 @@ public:
   attached to the corresponding key entry in the hash table, or without any
   association link. When the next record is returned by a call to the MRR 
   function multi_range_read_next without any association (because if was not
-  passed  with together with the key) then the key value is extracted from the
+  passed  together with the key) then the key value is extracted from the
   returned record and searched for it in the hash table. If there is any records
   with such key the chain of them will be yielded as the result of this search.
 
@@ -923,22 +923,23 @@ public:
   |                   V |   |                       |            |             |
   |             |key_1|[*]|[*]|         |   | ... |[*]|   ...  |[*]|  ...  |   |
   +----------------------------------------------------------------------------+
-                                        ^
-                                        |
+                                        ^           ^            ^
+                                        |           i-th entry   j-th entry
                                         hash table
 
   i-th hash entry:
-    circular record chain for key_3:
-      record_2_1
-      record_2_2 (points to record_2_1)
-
-  j-th hash entry:
     circular record chain for key_1:
       record_1_1
       record_1_2
       record_1_3 (points to record_1_1)
     circular record chain for key_3:
       record_3_1 (points to itself)
+
+  j-th hash entry:
+    circular record chain for key_2:
+      record_2_1
+      record_2_2 (points to record_2_1)
+
 */
 
 class JOIN_CACHE_BKA_UNIQUE :public JOIN_CACHE_BKA

=== modified file 'storage/innobase/handler/ha_innodb.cc'
--- a/storage/innobase/handler/ha_innodb.cc	2008-12-24 11:48:48 +0000
+++ b/storage/innobase/handler/ha_innodb.cc	2009-01-12 18:55:11 +0000
@@ -999,8 +999,7 @@ ha_innobase::ha_innobase(handlerton *hto
 		  HA_PRIMARY_KEY_IN_READ_INDEX |
 		  HA_BINLOG_ROW_CAPABLE |
 		  HA_CAN_GEOMETRY | HA_PARTIAL_COLUMN_READ |
-		  HA_TABLE_SCAN_ON_INDEX | HA_NEED_READ_RANGE_BUFFER |
-                  HA_MRR_CANT_SORT),
+		  HA_TABLE_SCAN_ON_INDEX),
   primary_key(0), /* needs initialization because index_flags() may be called 
                      before this is set to the real value. It's ok to have any 
                      value here because it doesn't matter if we return the

=== modified file 'storage/myisam/ha_myisam.cc'
--- a/storage/myisam/ha_myisam.cc	2008-12-24 11:48:48 +0000
+++ b/storage/myisam/ha_myisam.cc	2009-01-12 18:55:11 +0000
@@ -550,8 +550,7 @@ ha_myisam::ha_myisam(handlerton *hton, T
                   HA_DUPLICATE_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY |
                   HA_FILE_BASED | HA_CAN_GEOMETRY | HA_NO_TRANSACTIONS |
                   HA_CAN_INSERT_DELAYED | HA_CAN_BIT_FIELD | HA_CAN_RTREEKEYS |
-                  HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT |
-                  HA_NEED_READ_RANGE_BUFFER | HA_MRR_CANT_SORT),
+                  HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT),
    can_enable_indexes(1)
 {}
 
@@ -1602,23 +1601,6 @@ int ha_myisam::index_next_same(uchar *bu
   return error;
 }
 
-int ha_myisam::read_range_first(const key_range *start_key,
-		 	        const key_range *end_key,
-			        bool eq_range_arg,
-                                bool sorted /* ignored */)
-{
-  int res;
-  res= handler::read_range_first(start_key, end_key, eq_range_arg, sorted);
-  return res;
-}
-
-
-int ha_myisam::read_range_next()
-{
-  int res= handler::read_range_next();
-  return res;
-}
-
 
 int ha_myisam::rnd_init(bool scan)
 {
@@ -1683,7 +1665,6 @@ int ha_myisam::info(uint flag)
     stats.max_data_file_length=  misam_info.max_data_file_length;
     stats.max_index_file_length= misam_info.max_index_file_length;
     stats.create_time= misam_info.create_time;
-    stats.mrr_length_per_rec= misam_info.reflength + 8; // 8 = max(sizeof(void *))
     /* 
       We want the value of stats.mrr_length_per_rec to be platform independent.
       The size of the chunk at the end of the join buffer used for MRR needs

=== modified file 'storage/myisam/ha_myisam.h'
--- a/storage/myisam/ha_myisam.h	2008-08-26 20:38:29 +0000
+++ b/storage/myisam/ha_myisam.h	2009-01-09 16:38:52 +0000
@@ -150,9 +150,6 @@ class ha_myisam: public handler
   {
     return file;
   }
-  int read_range_first(const key_range *start_key, const key_range *end_key,
-                       bool eq_range_arg, bool sorted);
-  int read_range_next();
 public:
   /**
    * Multi Range Read interface

Thread
bzr push into mysql-6.0-perf branch (marc.alff:2765 to 2766) Marc Alff12 Jan 2009