List:Commits« Previous MessageNext Message »
From:mleich Date:August 15 2006 4:37pm
Subject:bk commit into 5.1 tree (mleich:1.2276)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of mleich. When mleich 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@stripped, 2006-08-15 16:37:38+02:00, mleich@stripped +8 -0
  Merge three.local.lan:/home/matthias/Arbeit/mysql-5.1-engines/src-clean
  into  three.local.lan:/home/matthias/Arbeit/mysql-5.1-engines/src-5
  MERGE: 1.2181.1.98

  BitKeeper/deleted/.del-index_merge_ror.result@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Auto merged
    MERGE: 1.8.1.1

  BitKeeper/deleted/.del-index_merge_ror.result@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Merge rename: mysql-test/r/index_merge_ror.result ->
BitKeeper/deleted/.del-index_merge_ror.result

  mysql-test/include/index_merge_ror.inc@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Auto merged
    MERGE: 1.8.1.2

  mysql-test/include/index_merge_ror.inc@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Merge rename: mysql-test/t/index_merge_ror.test ->
mysql-test/include/index_merge_ror.inc

  mysql-test/include/index_merge_ror_cpk.inc@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Auto merged
    MERGE: 1.7.1.2

  mysql-test/include/index_merge_ror_cpk.inc@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Merge rename: mysql-test/t/index_merge_ror_cpk.test ->
mysql-test/include/index_merge_ror_cpk.inc

  mysql-test/include/mix1.inc@stripped, 2006-08-15 16:29:22+02:00, mleich@stripped +0 -0
    Auto merged
    MERGE: 1.5.1.2

  mysql-test/include/mix1.inc@stripped, 2006-08-15 16:29:22+02:00, mleich@stripped +0 -0
    Merge rename: mysql-test/t/innodb_mysql.test -> mysql-test/include/mix1.inc

  mysql-test/r/index_merge_innodb.result@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Auto merged
    MERGE: 1.17.1.1

  mysql-test/r/index_merge_myisam.result@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Auto merged
    MERGE: 1.19.1.2

  mysql-test/r/index_merge_myisam.result@stripped, 2006-08-15 16:29:22+02:00,
mleich@stripped +0 -0
    Merge rename: mysql-test/r/index_merge.result ->
mysql-test/r/index_merge_myisam.result

  mysql-test/r/innodb_mysql.result@stripped, 2006-08-15 16:29:22+02:00, mleich@stripped
+0 -0
    Auto merged
    MERGE: 1.5.1.1

  mysql-test/t/disabled.def@stripped, 2006-08-15 16:29:23+02:00, mleich@stripped +0 -0
    Auto merged
    MERGE: 1.178.1.1

# 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:	mleich
# Host:	three.local.lan
# Root:	/home/matthias/Arbeit/mysql-5.1-engines/src-5/RESYNC

--- 1.7/mysql-test/r/innodb_mysql.result	2006-08-15 16:37:50 +02:00
+++ 1.8/mysql-test/r/innodb_mysql.result	2006-08-15 16:37:50 +02:00
@@ -1,5 +1,6 @@
+SET SESSION STORAGE_ENGINE = InnoDB;
 drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
-create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb 
+create table t1(f1 varchar(800) binary not null, key(f1))
 character set utf8 collate utf8_general_ci;
 Warnings:
 Warning	1071	Specified key was too long; max key length is 765 bytes
@@ -10,7 +11,7 @@ c_id int(11) not null default '0',
 org_id int(11) default null,
 unique key contacts$c_id (c_id),
 key contacts$org_id (org_id)
-) engine=innodb;
+);
 insert into t1 values 
 (2,null),(120,null),(141,null),(218,7), (128,1),
 (151,2),(234,2),(236,2),(243,2),(255,2),(259,2),(232,3),(235,3),(238,3),
@@ -33,7 +34,7 @@ sla_set int(11) default null,
 unique key t2$slai_id (slai_id),
 key t2$owner_id (owner_id),
 key t2$sla_id (sla_id)
-) engine=innodb;
+);
 insert into t2(slai_id, owner_tbl, owner_id, sla_id) values
 (1,3,1,1), (3,3,10,2), (4,3,3,6), (5,3,2,5), (6,3,8,3), (7,3,9,7),
 (8,3,6,8), (9,3,4,9), (10,3,5,10), (11,3,11,11), (12,3,7,12);
@@ -90,9 +91,9 @@ b	a
 3	3
 DROP TABLE t1, t2, t3;
 create table t1m (a int) engine=myisam;
-create table t1i (a int) engine=innodb;
+create table t1i (a int);
 create table t2m (a int) engine=myisam;
-create table t2i (a int) engine=innodb;
+create table t2i (a int);
 insert into t2m values (5);
 insert into t2i values (5);
 select min(a) from t1m;
@@ -229,7 +230,7 @@ count(*)	min(7)	max(7)
 drop table t1m, t1i, t2m, t2i;
 create table t1 (
 a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64)
default ' '
-);
+) ENGINE = MyISAM;
 insert into t1 (a1, a2, b, c, d) values
 ('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
 ('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
@@ -265,7 +266,7 @@ insert into t1 (a1, a2, b, c, d) values
 ('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4');
 create table t4 (
 pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16)
not null, d char(16), dummy char(64) default ' '
-) engine=innodb;
+);
 insert into t4 (a1, a2, b, c, d, dummy) select * from t1;
 create index idx12672_0 on t4 (a1);
 create index idx12672_1 on t4 (a1,a2,b,c);
@@ -282,18 +283,18 @@ d
 drop table t1,t4;
 create table t1 (
 a varchar(30), b varchar(30), primary key(a), key(b)
-) engine=innodb;
+);
 select distinct a from t1;
 a
 drop table t1;
-create table t1(a int, key(a)) engine=innodb;
+create table t1(a int, key(a));
 insert into t1 values(1);
 select a, count(a) from t1 group by a with rollup;
 a	count(a)
 1	1
 NULL	1
 drop table t1;
-create table t1 (f1 int, f2 char(1), primary key(f1,f2)) engine=innodb;
+create table t1 (f1 int, f2 char(1), primary key(f1,f2));
 insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d");
 alter table t1 drop primary key, add primary key (f2, f1);
 explain select distinct f1 a, f1 b from t1;
@@ -303,7 +304,7 @@ explain select distinct f1, f2 from t1;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	range	NULL	PRIMARY	5	NULL	3	Using index for group-by; Using temporary
 drop table t1;
-set storage_engine=innodb;
+set storage_engine = InnoDB;
 CREATE TABLE t1 (a int, b int);
 insert into t1 values (1,1),(1,2);
 CREATE TABLE t2 (primary key (a)) select * from t1;

--- 1.7/mysql-test/t/innodb_mysql.test	2006-08-15 16:37:50 +02:00
+++ 1.9/mysql-test/include/mix1.inc	2006-08-15 16:37:50 +02:00
@@ -1,4 +1,10 @@
--- source include/have_innodb.inc
+# include/mix1.inc 
+#
+# Note: The comments/expectations refer to InnoDB.
+#       They might be not valid for other storage engines.
+#
+
+eval SET SESSION STORAGE_ENGINE = $engine_type;
 
 --disable_warnings
 drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
@@ -7,7 +13,7 @@ drop table if exists t1,t2,t1m,t1i,t2m,t
 #
 # Bug#17530: Incorrect key truncation on table creation caused server crash.
 #
-create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb 
+create table t1(f1 varchar(800) binary not null, key(f1))
   character set utf8 collate utf8_general_ci;
 insert into t1 values('aaa');
 drop table t1;
@@ -19,7 +25,7 @@ create table t1 (
   org_id int(11) default null,
   unique key contacts$c_id (c_id),
   key contacts$org_id (org_id)
-) engine=innodb;
+);
 insert into t1 values 
   (2,null),(120,null),(141,null),(218,7), (128,1),
   (151,2),(234,2),(236,2),(243,2),(255,2),(259,2),(232,3),(235,3),(238,3),
@@ -43,7 +49,7 @@ create table t2 (
   unique key t2$slai_id (slai_id),
   key t2$owner_id (owner_id),
   key t2$sla_id (sla_id)
-) engine=innodb;
+);
 insert into t2(slai_id, owner_tbl, owner_id, sla_id) values
   (1,3,1,1), (3,3,10,2), (4,3,3,6), (5,3,2,5), (6,3,8,3), (7,3,9,7),
   (8,3,6,8), (9,3,4,9), (10,3,5,10), (11,3,11,11), (12,3,7,12);
@@ -104,9 +110,9 @@ DROP TABLE t1, t2, t3;
 
 --disable_warnings
 create table t1m (a int) engine=myisam;
-create table t1i (a int) engine=innodb;
+create table t1i (a int);
 create table t2m (a int) engine=myisam;
-create table t2i (a int) engine=innodb;
+create table t2i (a int);
 --enable_warnings
 insert into t2m values (5);
 insert into t2i values (5);
@@ -176,7 +182,7 @@ drop table t1m, t1i, t2m, t2i;
 
 create table t1 (
   a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64)
default ' '
-);
+) ENGINE = MyISAM;
 
 insert into t1 (a1, a2, b, c, d) values
 ('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
@@ -214,7 +220,7 @@ insert into t1 (a1, a2, b, c, d) values
 --disable_warnings
 create table t4 (
   pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16)
not null, d char(16), dummy char(64) default ' '
-) engine=innodb;
+);
 --enable_warnings
 insert into t4 (a1, a2, b, c, d, dummy) select * from t1;
 
@@ -235,7 +241,7 @@ drop table t1,t4;
 --disable_warnings
 create table t1 (
   a varchar(30), b varchar(30), primary key(a), key(b)
-) engine=innodb;
+);
 --enable_warnings
 select distinct a from t1;
 drop table t1;
@@ -246,7 +252,7 @@ drop table t1;
 #
 
 --disable_warnings
-create table t1(a int, key(a)) engine=innodb;
+create table t1(a int, key(a));
 --enable_warnings
 insert into t1 values(1);
 select a, count(a) from t1 group by a with rollup;
@@ -256,7 +262,7 @@ drop table t1;
 # Bug #13293 Wrongly used index results in endless loop.  
 # (was part of group_min_max.test)
 #
-create table t1 (f1 int, f2 char(1), primary key(f1,f2)) engine=innodb;
+create table t1 (f1 int, f2 char(1), primary key(f1,f2));
 insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d");
 alter table t1 drop primary key, add primary key (f2, f1);
 explain select distinct f1 a, f1 b from t1;
@@ -268,7 +274,7 @@ drop table t1;
 # Test of behaviour with CREATE ... SELECT
 #
 
-set storage_engine=innodb;
+eval set storage_engine = $engine_type;
 CREATE TABLE t1 (a int, b int);
 insert into t1 values (1,1),(1,2);
 --error 1062

--- 1.184/mysql-test/t/disabled.def	2006-08-15 16:37:50 +02:00
+++ 1.185/mysql-test/t/disabled.def	2006-08-15 16:37:50 +02:00
@@ -16,6 +16,7 @@
 #im_instance_conf          : Bug#20294 2006-06-06 monty   Instance manager test
im_instance_conf fails randomly
 im_options                : Bug#20294 2006-07-24 stewart   Instance manager test
im_instance_conf fails randomly
 #im_life_cycle             : Bug#20368 2006-06-10 alik    im_life_cycle test fails
+concurrent_innodb        : BUG#21579 2006-08-11 mleich innodb_concurrent random failures
with varying differences
 ndb_autodiscover         : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
 ndb_autodiscover2        : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
 ndb_binlog_ignore_db     : BUG#21279 2006-07-25 ingo    Randomly throws a warning

--- 1.20/mysql-test/r/index_merge.result	2006-08-15 16:37:50 +02:00
+++ 1.22/mysql-test/r/index_merge_myisam.result	2006-08-15 16:37:50 +02:00
@@ -1,7 +1,9 @@
+#---------------- Index merge test 1 -------------------------------------------
+SET SESSION STORAGE_ENGINE = MyISAM;
 drop table if exists t0, t1, t2, t3, t4;
 create table t0
 (
-key1 int not null, 
+key1 int not null,
 INDEX i1(key1)
 );
 alter table t0 add key2 int not null, add index i2(key2);
@@ -18,7 +20,7 @@ test.t0	analyze	status	OK
 explain select * from t0 where key1 < 3 or key1 > 1020;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	range	i1	i1	4	NULL	78	Using where
-explain 
+explain
 select * from t0 where key1 < 3 or key2 > 1020;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2	i1,i2	4,4	NULL	45	Using sort_union(i1,i2); Using where
@@ -63,8 +65,8 @@ id	select_type	table	type	possible_keys	
 explain select * from t0 force index (i1,i2) where (key1 > 1 or key2  > 2);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2	i1,i2	4,4	NULL	1024	Using sort_union(i1,i2); Using where
-explain 
-select * from t0 where key1<3 or key2<3 or (key1>5 and key1<8) or 
+explain
+select * from t0 where key1<3 or key2<3 or (key1>5 and key1<8) or
 (key1>10 and key1<12) or (key2>100 and key2<110);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2	i1,i2	4,4	NULL	17	Using sort_union(i1,i2); Using where
@@ -83,15 +85,15 @@ id	select_type	table	type	possible_keys	
 explain select * from t0 where key2=10 or key3=3 or key4 is null;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i2,i3	i2,i3	4,4	NULL	2	Using union(i2,i3); Using where
-explain select key1 from t0 where (key1 <=> null) or (key2 < 5) or 
+explain select key1 from t0 where (key1 <=> null) or (key2 < 5) or
 (key3=10) or (key4 <=> null);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2,i3,i4	i2,i3	4,4	NULL	6	Using sort_union(i2,i3); Using where
-explain select key1 from t0 where (key1 <=> null) or (key1 < 5) or 
+explain select key1 from t0 where (key1 <=> null) or (key1 < 5) or
 (key3=10) or (key4 <=> null);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i3,i4	i1,i3	4,4	NULL	6	Using sort_union(i1,i3); Using where
-explain select * from t0 where 
+explain select * from t0 where
 (key1 < 3 or key2 < 3) and (key3 < 4 or key4 < 4) and (key5 < 5 or key6
< 5);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2,i3,i4,i5,i6	i1,i2	4,4	NULL	6	Using sort_union(i1,i2); Using
where
@@ -106,11 +108,11 @@ key1	key2	key3	key4	key5	key6	key7	key8
 3	3	3	3	3	3	3	1021
 4	4	4	4	4	4	4	1020
 5	5	5	5	5	5	5	1019
-explain select * from t0 where 
+explain select * from t0 where
 (key1 < 3 or key2 < 3) and (key3 < 4 or key4 < 4) and (key5 < 2 or key6
< 2);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2,i3,i4,i5,i6	i1,i2	4,4	NULL	6	Using sort_union(i1,i2); Using
where
-explain select * from t0 where 
+explain select * from t0 where
 (key1 < 3 or key2 < 3) and (key3 < 100);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	range	i1,i2,i3	i3	4	NULL	95	Using where
@@ -118,9 +120,9 @@ explain select * from t0 where
 (key1 < 3 or key2 < 3) and (key3 < 1000);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	ALL	i1,i2,i3	NULL	NULL	NULL	1024	Using where
-explain select * from t0 where 
-((key1 < 4 or key2 < 4) and (key2 <5 or key3 < 4)) 
-or 
+explain select * from t0 where
+((key1 < 4 or key2 < 4) and (key2 <5 or key3 < 4))
+or
 key2 > 5;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	ALL	i1,i2,i3	NULL	NULL	NULL	1024	Using where
@@ -141,9 +143,9 @@ key1	key2	key3	key4	key5	key6	key7	key8
 4	4	4	4	4	4	4	1020
 5	5	5	5	5	5	5	1019
 6	6	6	6	6	6	6	1018
-explain select * from t0 where 
-((key1 < 4 or key2 < 4) and (key3 <5 or key5 < 4)) 
-or 
+explain select * from t0 where
+((key1 < 4 or key2 < 4) and (key3 <5 or key5 < 4))
+or
 ((key5 < 5 or key6 < 6) and (key7 <7 or key8 < 4));
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2,i3,i5,i6,i7,i8	i1,i2,i5,i6	4,4,4,4	NULL	19	Using
sort_union(i1,i2,i5,i6); Using where
@@ -238,7 +240,7 @@ id	select_type	table	type	possible_keys	
 1	SIMPLE	t4	ALL	NULL	NULL	NULL	NULL	1024	Using where
 create table t1 like t0;
 insert into t1 select * from t0;
-explain select * from t0 left join t1 on (t0.key1=t1.key1) 
+explain select * from t0 left join t1 on (t0.key1=t1.key1)
 where t0.key1=3 or t0.key2=4;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2	i1,i2	4,4	NULL	2	Using union(i1,i2); Using where
@@ -248,24 +250,24 @@ where t0.key1=3 or t0.key2=4;
 key1	key2	key3	key4	key5	key6	key7	key8	key1	key2	key3	key4	key5	key6	key7	key8
 3	3	3	3	3	3	3	1021	3	3	3	3	3	3	3	1021
 4	4	4	4	4	4	4	1020	4	4	4	4	4	4	4	1020
-explain 
+explain
 select * from t0,t1 where (t0.key1=t1.key1) and ( t0.key1=3 or t0.key2=4);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	index_merge	i1,i2	i1,i2	4,4	NULL	2	Using union(i1,i2); Using where
 1	SIMPLE	t1	ref	i1	i1	4	test.t0.key1	1	
-explain 
-select * from t0,t1 where (t0.key1=t1.key1) and 
+explain
+select * from t0,t1 where (t0.key1=t1.key1) and
 (t0.key1=3 or t0.key2=4) and t1.key1<200;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	ALL	i1,i2	NULL	NULL	NULL	1024	Using where
 1	SIMPLE	t1	ref	i1	i1	4	test.t0.key1	1	
-explain 
-select * from t0,t1 where (t0.key1=t1.key1) and 
+explain
+select * from t0,t1 where (t0.key1=t1.key1) and
 (t0.key1=3 or t0.key2<4) and t1.key1=2;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	ref	i1,i2	i1	4	const	1	Using where
 1	SIMPLE	t1	ref	i1	i1	4	const	1	
-explain select * from t0,t1 where t0.key1 = 5 and 
+explain select * from t0,t1 where t0.key1 = 5 and
 (t1.key1 = t0.key1 or t1.key8 = t0.key1);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	ref	i1	i1	4	const	1	
@@ -275,7 +277,7 @@ explain select * from t0,t1 where t0.key
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t0	range	i1	i1	4	NULL	3	Using where
 1	SIMPLE	t1	ALL	i1,i8	NULL	NULL	NULL	1024	Range checked for each record (index map: 0x81)
-explain select * from t1 where key1=3 or key2=4 
+explain select * from t1 where key1=3 or key2=4
 union select * from t1 where key1<4 or key3=5;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	PRIMARY	t1	index_merge	i1,i2	i1,i2	4,4	NULL	2	Using union(i1,i2); Using where
@@ -292,7 +294,7 @@ alter table t3 add keyA int not null, ad
 alter table t3 add keyB int not null, add index iB(keyB);
 alter table t3 add keyC int not null, add index iC(keyC);
 update t3 set key9=key1,keyA=key1,keyB=key1,keyC=key1;
-explain select * from t3 where 
+explain select * from t3 where
 key1=1 or key2=2 or key3=3 or key4=4 or
 key5=5 or key6=6 or key7=7 or key8=8 or
 key9=9 or keyA=10 or keyB=11 or keyC=12;
@@ -340,44 +342,44 @@ create table t4 (a int);
 insert into t4 values (1),(4),(3);
 set @save_join_buffer_size=@@join_buffer_size;
 set join_buffer_size= 4000;
-explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5) 
-from t0 as A force index(i1,i2), t0 as B force index (i1,i2) 
+explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5)
+from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 where (A.key1 < 500000 or A.key2 < 3)
 and   (B.key1 < 500000 or B.key2 < 3);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	A	index_merge	i1,i2	i1,i2	4,4	NULL	1013	Using sort_union(i1,i2); Using where
 1	SIMPLE	B	index_merge	i1,i2	i1,i2	4,4	NULL	1013	Using sort_union(i1,i2); Using where
-select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5) 
-from t0 as A force index(i1,i2), t0 as B force index (i1,i2) 
+select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5)
+from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 where (A.key1 < 500000 or A.key2 < 3)
 and   (B.key1 < 500000 or B.key2 < 3);
 max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 +
B.key5)
 10240
 update t0 set key1=1;
-explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5) 
-from t0 as A force index(i1,i2), t0 as B force index (i1,i2) 
+explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5)
+from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 where (A.key1 = 1 or A.key2 = 1)
 and   (B.key1 = 1 or B.key2 = 1);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	A	index_merge	i1,i2	i1,i2	4,4	NULL	1020	Using union(i1,i2); Using where
 1	SIMPLE	B	index_merge	i1,i2	i1,i2	4,4	NULL	1020	Using union(i1,i2); Using where
-select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5) 
-from t0 as A force index(i1,i2), t0 as B force index (i1,i2) 
+select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5)
+from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 where (A.key1 = 1 or A.key2 = 1)
 and   (B.key1 = 1 or B.key2 = 1);
 max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 +
B.key5)
 8194
 alter table t0 add filler1 char(200), add filler2 char(200), add filler3 char(200);
 update t0 set key2=1, key3=1, key4=1, key5=1,key6=1,key7=1 where key7 < 500;
-explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5) 
-from t0 as A, t0 as B 
+explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4
+ A.key5 + B.key5)
+from t0 as A, t0 as B
 where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1
and A.key7 = 1 or A.key8=1)
 and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and
B.key7 = 1 or B.key8=1);
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	A	index_merge	i1,i2,i3,i4,i5,i6,i7?,i8	i2,i3,i4,i5,i6,i7?,i8	X	NULL	#	Using
union(intersect(i2,i3,i4,i5,i6,i7?),i8); Using where
 1	SIMPLE	B	index_merge	i1,i2,i3,i4,i5,i6,i7?,i8	i2,i3,i4,i5,i6,i7?,i8	X	NULL	#	Using
union(intersect(i2,i3,i4,i5,i6,i7?),i8); Using where
-select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5) 
-from t0 as A, t0 as B 
+select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5
+ B.key5)
+from t0 as A, t0 as B
 where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1
and A.key7 = 1 or A.key8=1)
 and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and
B.key7 = 1 or B.key8=1);
 max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 +
B.key5)
@@ -405,14 +407,14 @@ drop table t1;
 create table t0 (a int);
 insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 create table t1 (
-a int, b int, 
+a int, b int,
 filler1 char(200), filler2 char(200),
 key(a),key(b)
 );
 insert into t1 select @v:= A.a, @v, 't1', 'filler2' from t0 A, t0 B, t0 C;
 create table t2 like t1;
 create table t3 (
-a int, b int, 
+a int, b int,
 filler1 char(200), filler2 char(200),
 key(a),key(b)
 ) engine=merge union=(t1,t2);
@@ -424,3 +426,785 @@ id	select_type	table	type	possible_keys	
 1	SIMPLE	t3	index_merge	a,b	a,b	5,5	NULL	#	Using intersect(a,b); Using where
 drop table t3;
 drop table t0, t1, t2;
+#---------------- ROR-index_merge tests -----------------------
+SET SESSION STORAGE_ENGINE = MyISAM;
+drop table if exists  t0,t1,t2;
+create table t1
+(
+/* Field names reflect value(rowid) distribution, st=STairs, swt= SaWTooth */
+st_a int not null default 0,
+swt1a int not null default 0,
+swt2a int not null default 0,
+st_b int not null default 0,
+swt1b int not null default 0,
+swt2b int not null default 0,
+/* fields/keys for row retrieval tests */
+key1 int,
+key2 int,
+key3 int,
+key4 int,
+/* make rows much bigger then keys */
+filler1 char (200),
+filler2 char (200),
+filler3 char (200),
+filler4 char (200),
+filler5 char (200),
+filler6 char (200),
+/* order of keys is important */
+key sta_swt12a(st_a,swt1a,swt2a),
+key sta_swt1a(st_a,swt1a),
+key sta_swt2a(st_a,swt2a),
+key sta_swt21a(st_a,swt2a,swt1a),
+key st_a(st_a),
+key stb_swt1a_2b(st_b,swt1b,swt2a),
+key stb_swt1b(st_b,swt1b),
+key st_b(st_b),
+key(key1),
+key(key2),
+key(key3),
+key(key4)
+) ;
+create table t0 as select * from t1;
+# Printing of many insert into t0 values (....) disabled.
+alter table t1 disable keys;
+# Printing of many insert into t1 select .... from t0 disabled.
+# Printing of many insert into t1 (...) values (....) disabled.
+alter table t1 enable keys;
+select count(*) from t1;
+count(*)
+64801
+explain select key1,key2 from t1 where key1=100 and key2=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,5	NULL	58	Using intersect(key1,key2); Using
where; Using index
+select key1,key2 from t1 where key1=100 and key2=100;
+key1	key2
+100	100
+explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=100 and key4=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key1,key2,key3,key4	5,5,5,5	NULL	154	Using
union(intersect(key1,key2),intersect(key3,key4)); Using where
+select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
+key1	key2	key3	key4	filler1
+100	100	100	100	key1-key2-key3-key4
+insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, -1, -1, 'key1-key2');
+insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 100, 100, 'key4-key3');
+explain select key1,key2,filler1 from t1 where key1=100 and key2=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,5	NULL	58	Using intersect(key1,key2); Using
where
+select key1,key2,filler1 from t1 where key1=100 and key2=100;
+key1	key2	filler1
+100	100	key1-key2-key3-key4
+100	100	key1-key2
+explain select key1,key2 from t1 where key1=100 and key2=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,5	NULL	58	Using intersect(key1,key2); Using
where; Using index
+select key1,key2 from t1 where key1=100 and key2=100;
+key1	key2
+100	100
+100	100
+explain select key1,key2,key3,key4 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key1,key2,key3,key4	5,5,5,5	NULL	154	Using
union(intersect(key1,key2),intersect(key3,key4)); Using where
+select key1,key2,key3,key4 from t1 where key1=100 and key2=100 or key3=100 and key4=100;
+key1	key2	key3	key4
+100	100	100	100
+100	100	-1	-1
+-1	-1	100	100
+explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=100 and key4=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key1,key2,key3,key4	5,5,5,5	NULL	154	Using
union(intersect(key1,key2),intersect(key3,key4)); Using where
+select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
+key1	key2	key3	key4	filler1
+100	100	100	100	key1-key2-key3-key4
+100	100	-1	-1	key1-key2
+-1	-1	100	100	key4-key3
+explain select key1,key2,key3 from t1 where key1=100 and key2=100 and key3=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3	key1,key2,key3	5,5,5	NULL	2	Using
intersect(key1,key2,key3); Using where; Using index
+select key1,key2,key3 from t1 where key1=100 and key2=100 and key3=100;
+key1	key2	key3
+100	100	100
+insert into t1 (key1,key2,key3,key4,filler1) values (101,101,101,101, 'key1234-101');
+explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=101;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3	key1,key2,key3	5,5,5	NULL	83	Using
union(intersect(key1,key2),key3); Using where
+select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=101;
+key1	key2	key3	key4	filler1
+100	100	100	100	key1-key2-key3-key4
+100	100	-1	-1	key1-key2
+101	101	101	101	key1234-101
+select key1,key2, filler1 from t1 where key1=100 and key2=100;
+key1	key2	filler1
+100	100	key1-key2-key3-key4
+100	100	key1-key2
+update t1 set filler1='to be deleted' where key1=100 and key2=100;
+update t1 set key1=200,key2=200 where key1=100 and key2=100;
+delete from t1 where key1=200 and key2=200;
+select key1,key2,filler1 from t1 where key2=100 and key2=200;
+key1	key2	filler1
+explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=100 and key4=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key1,key2,key3,key4	5,5,5,5	NULL	152	Using
union(intersect(key1,key2),intersect(key3,key4)); Using where
+select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
+key1	key2	key3	key4	filler1
+-1	-1	100	100	key4-key3
+delete from t1 where key3=100 and key4=100;
+explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=100 and key4=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key1,key2,key3,key4	5,5,5,5	NULL	152	Using
union(intersect(key1,key2),intersect(key3,key4)); Using where
+select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
+key1	key2	key3	key4	filler1
+explain select key1,key2 from t1 where key1=100 and key2=100;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,5	NULL	57	Using intersect(key1,key2); Using
where; Using index
+select key1,key2 from t1 where key1=100 and key2=100;
+key1	key2
+insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-1');
+insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-2');
+insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-3');
+explain select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and
key2=100) or key4=200;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key3,key1,key2,key4	5,5,5,5	NULL	136	Using
union(key3,intersect(key1,key2),key4); Using where
+select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and key2=100) or
key4=200;
+key1	key2	key3	key4	filler1
+100	100	200	200	key1-key2-key3-key4-3
+100	100	200	200	key1-key2-key3-key4-2
+100	100	200	200	key1-key2-key3-key4-1
+insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, -1, 200,'key4');
+explain select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and
key2=100) or key4=200;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key3,key1,key2,key4	5,5,5,5	NULL	146	Using
union(key3,intersect(key1,key2),key4); Using where
+select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and key2=100) or
key4=200;
+key1	key2	key3	key4	filler1
+100	100	200	200	key1-key2-key3-key4-3
+100	100	200	200	key1-key2-key3-key4-2
+100	100	200	200	key1-key2-key3-key4-1
+-1	-1	-1	200	key4
+insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 200, -1,'key3');
+explain select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and
key2=100) or key4=200;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2,key3,key4	key3,key1,key2,key4	5,5,5,5	NULL	156	Using
union(key3,intersect(key1,key2),key4); Using where
+select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and key2=100) or
key4=200;
+key1	key2	key3	key4	filler1
+100	100	200	200	key1-key2-key3-key4-3
+100	100	200	200	key1-key2-key3-key4-2
+100	100	200	200	key1-key2-key3-key4-1
+-1	-1	-1	200	key4
+-1	-1	200	-1	key3
+explain select * from t1 where st_a=1 and st_b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	st_a,st_b	4,4	NULL	2637	Using
intersect(st_a,st_b); Using where
+explain select st_a,st_b from t1 where st_a=1 and st_b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	st_a,st_b	4,4	NULL	2637	Using
intersect(st_a,st_b); Using where; Using index
+explain select st_a from t1 ignore index (st_a) where st_a=1 and st_b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,stb_swt1a_2b,stb_swt1b,st_b	st_b	4	const	15093	Using
where
+explain select * from t1 where st_a=1 and swt1a=1 and swt2a=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a	sta_swt21a	12	const,const,const	971	
+explain select * from t1 where st_b=1 and swt1b=1 and swt2b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	stb_swt1a_2b,stb_swt1b,st_b	stb_swt1a_2b	8	const,const	3879	Using where
+explain select * from t1 where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and
swt2b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	sta_swt12a,stb_swt1a_2b	12,12	NULL	44	Using
intersect(sta_swt12a,stb_swt1a_2b); Using where
+explain select * from t1 ignore index (sta_swt21a, stb_swt1a_2b)
+where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,st_a,stb_swt1b,st_b	sta_swt12a,stb_swt1b	12,8	NULL	44	Using
intersect(sta_swt12a,stb_swt1b); Using where
+explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b)
+where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt1a,sta_swt2a,st_a,stb_swt1b,st_b	sta_swt1a,sta_swt2a,stb_swt1b	8,8,8	NULL	43	Using
intersect(sta_swt1a,sta_swt2a,stb_swt1b); Using where
+explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b, stb_swt1b)
+where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt1a,sta_swt2a,st_a,st_b	sta_swt1a,sta_swt2a,st_b	8,8,4	NULL	168	Using
intersect(sta_swt1a,sta_swt2a,st_b); Using where
+explain select * from t1
+where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	sta_swt12a,stb_swt1a_2b	12,12	NULL	44	Using
intersect(sta_swt12a,stb_swt1a_2b); Using where
+explain select * from t1
+where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	sta_swt1a,stb_swt1b	8,8	NULL	174	Using
intersect(sta_swt1a,stb_swt1b); Using where
+explain select st_a from t1
+where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	sta_swt1a,stb_swt1b	8,8	NULL	174	Using
intersect(sta_swt1a,stb_swt1b); Using where; Using index
+explain select st_a from t1
+where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	sta_swt12a,sta_swt1a,sta_swt2a,sta_swt21a,st_a,stb_swt1a_2b,stb_swt1b,st_b	sta_swt1a,stb_swt1b	8,8	NULL	174	Using
intersect(sta_swt1a,stb_swt1b); Using where; Using index
+drop table t0,t1;
+create table t2 (
+a char(10),
+b char(10),
+filler1 char(255),
+filler2 char(255),
+key(a(5)),
+key(b(5))
+);
+select count(a) from t2 where a='BBBBBBBB';
+count(a)
+4
+select count(a) from t2 where b='BBBBBBBB';
+count(a)
+4
+expla_or_bin select count(a_or_b) from t2 where a_or_b='AAAAAAAA' a_or_bnd
a_or_b='AAAAAAAA';
+id	select_type	ta_or_ba_or_ble	type	possia_or_ble_keys	key	key_len	ref	rows	Extra_or_b
+1	SIMPLE	t2	ref	a_or_b,a_or_b	a_or_b	6	const	4	Using where
+select count(a) from t2 where a='AAAAAAAA' and b='AAAAAAAA';
+count(a)
+4
+select count(a) from t2 ignore index(a,b) where a='AAAAAAAA' and b='AAAAAAAA';
+count(a)
+4
+insert into t2 values ('ab', 'ab', 'uh', 'oh');
+explain select a from t2 where a='ab';
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t2	ref	a	a	6	const	1	Using where
+drop table t2;
+#---------------- Index merge test 2 -------------------------------------------
+SET SESSION STORAGE_ENGINE = MyISAM;
+drop table if exists t1,t2;
+create table t1
+(
+key1 int not null,
+key2 int not null,
+INDEX i1(key1),
+INDEX i2(key2)
+);
+explain select * from t1 where key1 < 5 or key2 > 197;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	10	Using sort_union(i1,i2); Using where
+select * from t1 where key1 < 5 or key2 > 197;
+key1	key2
+0	200
+1	199
+2	198
+3	197
+4	196
+explain select * from t1 where key1 < 3 or key2 > 195;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	10	Using sort_union(i1,i2); Using where
+select * from t1 where key1 < 3 or key2 > 195;
+key1	key2
+0	200
+1	199
+2	198
+3	197
+4	196
+alter table t1 add str1 char (255) not null,
+add zeroval int not null default 0,
+add str2 char (255) not null,
+add str3 char (255) not null;
+update t1 set str1='aaa', str2='bbb', str3=concat(key2, '-', key1 div 2, '_' ,if(key1 mod
2 = 0, 'a', 'A'));
+alter table t1 add primary key (str1, zeroval, str2, str3);
+explain select * from t1 where key1 < 5 or key2 > 197;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	10	Using sort_union(i1,i2); Using where
+select * from t1 where key1 < 5 or key2 > 197;
+key1	key2	str1	zeroval	str2	str3
+0	200	aaa	0	bbb	200-0_a
+1	199	aaa	0	bbb	199-0_A
+2	198	aaa	0	bbb	198-1_a
+3	197	aaa	0	bbb	197-1_A
+4	196	aaa	0	bbb	196-2_a
+explain select * from t1 where key1 < 3 or key2 > 195;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	10	Using sort_union(i1,i2); Using where
+select * from t1 where key1 < 3 or key2 > 195;
+key1	key2	str1	zeroval	str2	str3
+0	200	aaa	0	bbb	200-0_a
+1	199	aaa	0	bbb	199-0_A
+2	198	aaa	0	bbb	198-1_a
+3	197	aaa	0	bbb	197-1_A
+4	196	aaa	0	bbb	196-2_a
+drop table t1;
+create table t1 (
+pk    integer not null auto_increment primary key,
+key1  integer,
+key2  integer not null,
+filler char  (200),
+index (key1),
+index (key2)
+);
+show warnings;
+Level	Code	Message
+explain select pk from t1 where key1 = 1 and key2 = 1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,key2	key1	5	const	4	Using where
+select pk from t1 where key2 = 1 and key1 = 1;
+pk
+26
+27
+select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
+pk
+26
+27
+drop table t1;
+create table t1 (
+pk int primary key auto_increment,
+key1a  int,
+key2a  int,
+key1b  int,
+key2b  int,
+dummy1 int,
+dummy2 int,
+dummy3 int,
+dummy4 int,
+key3a  int,
+key3b  int,
+filler1 char (200),
+index i1(key1a, key1b),
+index i2(key2a, key2b),
+index i3(key3a, key3b)
+);
+create table t2 (a int);
+insert into t2 values (0),(1),(2),(3),(4),(NULL);
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
+select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
+select key1a, key1b, key2a, key2b, key3a, key3b from t1;
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
+select key1a, key1b, key2a, key2b, key3a, key3b from t1;
+analyze table t1;
+Table	Op	Msg_type	Msg_text
+test.t1	analyze	status	OK
+select count(*) from t1;
+count(*)
+5184
+explain select count(*) from t1 where
+key1a = 2 and key1b is null and  key2a = 2 and key2b is null;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i2	i1,i2	10,10	NULL	2	Using intersect(i1,i2); Using where;
Using index
+select count(*) from t1 where
+key1a = 2 and key1b is null and key2a = 2 and key2b is null;
+count(*)
+4
+explain select count(*) from t1 where
+key1a = 2 and key1b is null and key3a = 2 and key3b is null;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	i1,i3	i1,i3	10,10	NULL	2	Using intersect(i1,i3); Using where;
Using index
+select count(*) from t1 where
+key1a = 2 and key1b is null and key3a = 2 and key3b is null;
+count(*)
+4
+drop table t1,t2;
+create table t1 (
+id1 int,
+id2 date ,
+index idx2 (id1,id2),
+index idx1 (id2)
+);
+insert into t1 values(1,'20040101'), (2,'20040102');
+select * from t1  where id1 = 1  and id2= '20040101';
+id1	id2
+1	2004-01-01
+drop table t1;
+drop view if exists v1;
+CREATE TABLE t1 (
+`oid` int(11) unsigned NOT NULL auto_increment,
+`fk_bbk_niederlassung` int(11) unsigned NOT NULL,
+`fk_wochentag` int(11) unsigned NOT NULL,
+`uhrzeit_von` time NOT NULL COMMENT 'HH:MM',
+`uhrzeit_bis` time NOT NULL COMMENT 'HH:MM',
+`geloescht` tinyint(4) NOT NULL,
+`version` int(5) NOT NULL,
+PRIMARY KEY  (`oid`),
+KEY `fk_bbk_niederlassung` (`fk_bbk_niederlassung`),
+KEY `fk_wochentag` (`fk_wochentag`),
+KEY `ix_version` (`version`)
+) DEFAULT CHARSET=latin1;
+insert  into t1 values
+(1, 38, 1, '08:00:00', '13:00:00', 0, 1),
+(2, 38, 2, '08:00:00', '13:00:00', 0, 1),
+(3, 38, 3, '08:00:00', '13:00:00', 0, 1),
+(4, 38, 4, '08:00:00', '13:00:00', 0, 1),
+(5, 38, 5, '08:00:00', '13:00:00', 0, 1),
+(6, 38, 5, '08:00:00', '13:00:00', 1, 2),
+(7, 38, 3, '08:00:00', '13:00:00', 1, 2),
+(8, 38, 1, '08:00:00', '13:00:00', 1, 2),
+(9, 38, 2, '08:00:00', '13:00:00', 1, 2),
+(10, 38, 4, '08:00:00', '13:00:00', 1, 2),
+(11, 38, 1, '08:00:00', '13:00:00', 0, 3),
+(12, 38, 2, '08:00:00', '13:00:00', 0, 3),
+(13, 38, 3, '08:00:00', '13:00:00', 0, 3),
+(14, 38, 4, '08:00:00', '13:00:00', 0, 3),
+(15, 38, 5, '08:00:00', '13:00:00', 0, 3),
+(16, 38, 4, '08:00:00', '13:00:00', 0, 4),
+(17, 38, 5, '08:00:00', '13:00:00', 0, 4),
+(18, 38, 1, '08:00:00', '13:00:00', 0, 4),
+(19, 38, 2, '08:00:00', '13:00:00', 0, 4),
+(20, 38, 3, '08:00:00', '13:00:00', 0, 4),
+(21, 7, 1, '08:00:00', '13:00:00', 0, 1),
+(22, 7, 2, '08:00:00', '13:00:00', 0, 1),
+(23, 7, 3, '08:00:00', '13:00:00', 0, 1),
+(24, 7, 4, '08:00:00', '13:00:00', 0, 1),
+(25, 7, 5, '08:00:00', '13:00:00', 0, 1);
+create view v1 as
+select
+zeit1.oid AS oid,
+zeit1.fk_bbk_niederlassung AS fk_bbk_niederlassung,
+zeit1.fk_wochentag AS fk_wochentag,
+zeit1.uhrzeit_von AS uhrzeit_von,
+zeit1.uhrzeit_bis AS uhrzeit_bis,
+zeit1.geloescht AS geloescht,
+zeit1.version AS version
+from
+t1 zeit1
+where
+(zeit1.version =
+(select max(zeit2.version) AS `max(version)`
+   from t1 zeit2
+where
+((zeit1.fk_bbk_niederlassung = zeit2.fk_bbk_niederlassung) and
+(zeit1.fk_wochentag = zeit2.fk_wochentag) and
+(zeit1.uhrzeit_von = zeit2.uhrzeit_von) and
+(zeit1.uhrzeit_bis = zeit2.uhrzeit_bis)
+)
+)
+)
+and (zeit1.geloescht = 0);
+select * from v1 where oid = 21;
+oid	fk_bbk_niederlassung	fk_wochentag	uhrzeit_von	uhrzeit_bis	geloescht	version
+21	7	1	08:00:00	13:00:00	0	1
+drop view v1;
+drop table t1;
+CREATE TABLE t1(
+t_cpac varchar(2) NOT NULL,
+t_vers varchar(4) NOT NULL,
+t_rele varchar(2) NOT NULL,
+t_cust varchar(4) NOT NULL,
+filler1 char(250) default NULL,
+filler2 char(250) default NULL,
+PRIMARY KEY (t_cpac,t_vers,t_rele,t_cust),
+UNIQUE KEY IX_4 (t_cust,t_cpac,t_vers,t_rele),
+KEY IX_5 (t_vers,t_rele,t_cust)
+);
+insert into t1 values
+('tm','2.5 ','a ','    ','',''), ('tm','2.5U','a ','stnd','',''),
+('da','3.3 ','b ','    ','',''), ('da','3.3U','b ','stnd','',''),
+('tl','7.6 ','a ','    ','',''), ('tt','7.6 ','a ','    ','',''),
+('bc','B61 ','a ','    ','',''), ('bp','B61 ','a ','    ','',''),
+('ca','B61 ','a ','    ','',''), ('ci','B61 ','a ','    ','',''),
+('cp','B61 ','a ','    ','',''), ('dm','B61 ','a ','    ','',''),
+('ec','B61 ','a ','    ','',''), ('ed','B61 ','a ','    ','',''),
+('fm','B61 ','a ','    ','',''), ('nt','B61 ','a ','    ','',''),
+('qm','B61 ','a ','    ','',''), ('tc','B61 ','a ','    ','',''),
+('td','B61 ','a ','    ','',''), ('tf','B61 ','a ','    ','',''),
+('tg','B61 ','a ','    ','',''), ('ti','B61 ','a ','    ','',''),
+('tp','B61 ','a ','    ','',''), ('ts','B61 ','a ','    ','',''),
+('wh','B61 ','a ','    ','',''), ('bc','B61U','a ','stnd','',''),
+('bp','B61U','a ','stnd','',''), ('ca','B61U','a ','stnd','',''),
+('ci','B61U','a ','stnd','',''), ('cp','B61U','a ','stnd','',''),
+('dm','B61U','a ','stnd','',''), ('ec','B61U','a ','stnd','',''),
+('fm','B61U','a ','stnd','',''), ('nt','B61U','a ','stnd','',''),
+('qm','B61U','a ','stnd','',''), ('tc','B61U','a ','stnd','',''),
+('td','B61U','a ','stnd','',''), ('tf','B61U','a ','stnd','',''),
+('tg','B61U','a ','stnd','',''), ('ti','B61U','a ','stnd','',''),
+('tp','B61U','a ','stnd','',''), ('ts','B61U','a ','stnd','',''),
+('wh','B61U','a ','stnd','','');
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `t_cpac` varchar(2) NOT NULL,
+  `t_vers` varchar(4) NOT NULL,
+  `t_rele` varchar(2) NOT NULL,
+  `t_cust` varchar(4) NOT NULL,
+  `filler1` char(250) DEFAULT NULL,
+  `filler2` char(250) DEFAULT NULL,
+  PRIMARY KEY (`t_cpac`,`t_vers`,`t_rele`,`t_cust`),
+  UNIQUE KEY `IX_4` (`t_cust`,`t_cpac`,`t_vers`,`t_rele`),
+  KEY `IX_5` (`t_vers`,`t_rele`,`t_cust`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+select t_vers,t_rele,t_cust,filler1 from t1 where t_vers = '7.6';
+t_vers	t_rele	t_cust	filler1
+7.6 	a 	    	
+7.6 	a 	    	
+select t_vers,t_rele,t_cust,filler1 from t1 where t_vers = '7.6'
+  and t_rele='a' and t_cust = ' ';
+t_vers	t_rele	t_cust	filler1
+7.6 	a 	    	
+7.6 	a 	    	
+drop table t1;
+create table t1 (
+pk int(11) not null auto_increment,
+a int(11) not null default '0',
+b int(11) not null default '0',
+c int(11) not null default '0',
+filler1 datetime, filler2 varchar(15),
+filler3 longtext,
+kp1 varchar(4), kp2 varchar(7),
+kp3 varchar(2), kp4 varchar(4),
+kp5 varchar(7),
+filler4 char(1),
+primary key (pk),
+key idx1(a,b,c),
+key idx2(c),
+key idx3(kp1,kp2,kp3,kp4,kp5)
+) default charset=latin1;
+set @fill=NULL;
+SELECT COUNT(*) FROM t1 WHERE b = 0 AND a = 0 AND c = 13286427 AND
+kp1='279' AND kp2='ELM0678' AND kp3='6' AND kp4='10' AND  kp5 = 'R        ';
+COUNT(*)
+1
+drop table t1;
+#---------------- 2-sweeps read Index merge test 2 -------------------------------
+SET SESSION STORAGE_ENGINE = MyISAM;
+drop table if exists t1;
+create table t1 (
+pk int primary key,
+key1 int,
+key2 int,
+filler char(200),
+filler2 char(200),
+index(key1),
+index(key2)
+);
+select * from t1 where (key1 >= 2 and key1 <= 10) or (pk >= 4 and pk <=8 );
+pk	key1	key2	filler	filler2
+10	10	10	filler-data	filler-data-2
+9	9	9	filler-data	filler-data-2
+8	8	8	filler-data	filler-data-2
+7	7	7	filler-data	filler-data-2
+6	6	6	filler-data	filler-data-2
+5	5	5	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+set @maxv=1000;
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or key1=18 or key1=60;
+pk	key1	key2	filler	filler2
+1000	1000	1000	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+60	60	60	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+18	18	18	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or key1 < 3 or key1 > @maxv-11;
+pk	key1	key2	filler	filler2
+1000	1000	1000	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+990	990	990	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or
+(key1 < 5) or (key1 > 10 and key1 < 15) or (key1 >= 50 and key1 < 55 ) or
(key1 > @maxv-10);
+pk	key1	key2	filler	filler2
+1000	1000	1000	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+select * from t1 where
+(pk > 10 and pk < 15) or (pk >= 50 and pk < 55 )
+or
+(key1 < 5) or (key1 > @maxv-10);
+pk	key1	key2	filler	filler2
+1000	1000	1000	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+drop table t1;
+#---------------- Clustered PK ROR-index_merge tests -----------------------------
+SET SESSION STORAGE_ENGINE = MyISAM;
+drop table if exists  t1;
+create table t1
+(
+pk1 int not null,
+pk2 int not null,
+key1 int not null,
+key2 int not null,
+pktail1ok  int not null,
+pktail2ok  int not null,
+pktail3bad int not null,
+pktail4bad int not null,
+pktail5bad int not null,
+pk2copy int not null,
+badkey  int not null,
+filler1 char (200),
+filler2 char (200),
+key (key1),
+key (key2),
+/* keys with tails from CPK members */
+key (pktail1ok, pk1),
+key (pktail2ok, pk1, pk2),
+key (pktail3bad, pk2, pk1),
+key (pktail4bad, pk1, pk2copy),
+key (pktail5bad, pk1, pk2, pk2copy),
+primary key (pk1, pk2)
+);
+explain select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	PRIMARY,key1	PRIMARY	8	NULL	6	Using where
+select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
+pk1	pk2	key1	key2	pktail1ok	pktail2ok	pktail3bad	pktail4bad	pktail5bad	pk2copy	badkey	filler1	filler2
+1	10	0	0	0	0	0	0	0	10	0	filler-data-10	filler2
+1	11	0	0	0	0	0	0	0	11	0	filler-data-11	filler2
+1	12	0	0	0	0	0	0	0	12	0	filler-data-12	filler2
+1	13	0	0	0	0	0	0	0	13	0	filler-data-13	filler2
+1	14	0	0	0	0	0	0	0	14	0	filler-data-14	filler2
+1	15	0	0	0	0	0	0	0	15	0	filler-data-15	filler2
+1	16	0	0	0	0	0	0	0	16	0	filler-data-16	filler2
+1	17	0	0	0	0	0	0	0	17	0	filler-data-17	filler2
+1	18	0	0	0	0	0	0	0	18	0	filler-data-18	filler2
+1	19	0	0	0	0	0	0	0	19	0	filler-data-19	filler2
+explain select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using
where
+select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
+pk1	pk2
+95	59
+95	58
+95	57
+95	56
+95	55
+95	54
+95	53
+95	52
+95	51
+95	50
+explain select * from t1 where badkey=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1	key1	4	const	91	Using where
+explain select * from t1 where pk1 < 7500 and key1 = 10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	PRIMARY,key1	key1	4	const	91	Using where
+explain select * from t1 where pktail1ok=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail1ok	pktail1ok	4	const	76	Using where
+explain select * from t1 where pktail2ok=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail2ok	pktail2ok	4	const	82	Using where
+explain select * from t1 where (pktail2ok=1 and pk1< 50000) or key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,key1,pktail2ok	pktail2ok,key1	8,4	NULL	173	Using
sort_union(pktail2ok,key1); Using where
+explain select * from t1 where pktail3bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail3bad	pktail3bad	4	const	73	Using where
+explain select * from t1 where pktail4bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail4bad	pktail4bad	4	const	82	Using where
+explain select * from t1 where pktail5bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail5bad	pktail5bad	4	const	70	Using where
+explain select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using
where
+select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
+pk1	pk2	key1	key2
+104	49	10	10
+104	48	10	10
+104	47	10	10
+104	46	10	10
+104	45	10	10
+104	44	10	10
+104	43	10	10
+104	42	10	10
+104	41	10	10
+104	40	10	10
+drop table t1;
+create table t1
+(
+RUNID varchar(22),
+SUBMITNR varchar(5),
+ORDERNR char(1),
+PROGRAMM varchar(8),
+TESTID varchar(4),
+UCCHECK char(1),
+ETEXT varchar(80),
+ETEXT_TYPE char(1),
+INFO char(1),
+SEVERITY tinyint(3),
+TADIRFLAG char(1),
+PRIMARY KEY  (RUNID,SUBMITNR,ORDERNR,PROGRAMM,TESTID,UCCHECK),
+KEY `TVERM~KEY`  (PROGRAMM,TESTID,UCCHECK)
+) DEFAULT CHARSET=latin1;
+update t1 set `ETEXT` = '', `ETEXT_TYPE`='', `INFO`='', `SEVERITY`='', `TADIRFLAG`=''
+WHERE
+`RUNID`= '' AND `SUBMITNR`= '' AND `ORDERNR`='' AND `PROGRAMM`='' AND
+`TESTID`='' AND `UCCHECK`='';
+drop table t1;

--- 1.18/mysql-test/r/index_merge_innodb.result	2006-08-15 16:37:50 +02:00
+++ 1.19/mysql-test/r/index_merge_innodb.result	2006-08-15 16:37:50 +02:00
@@ -1,11 +1,13 @@
+#---------------- Index merge test 2 -------------------------------------------
+SET SESSION STORAGE_ENGINE = InnoDB;
 drop table if exists t1,t2;
 create table t1
 (
-key1 int not null, 
-key2 int not null, 
+key1 int not null,
+key2 int not null,
 INDEX i1(key1),
 INDEX i2(key2)
-) engine=innodb;
+);
 explain select * from t1 where key1 < 5 or key2 > 197;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	8	Using sort_union(i1,i2); Using where
@@ -26,7 +28,7 @@ key1	key2
 2	198
 3	197
 4	196
-alter table t1 add str1 char (255) not null, 
+alter table t1 add str1 char (255) not null,
 add zeroval int not null default 0,
 add str2 char (255) not null,
 add str3 char (255) not null;
@@ -60,7 +62,7 @@ key2  integer not null,
 filler char  (200),
 index (key1),
 index (key2)
-) engine=innodb;
+);
 show warnings;
 Level	Code	Message
 explain select pk from t1 where key1 = 1 and key2 = 1;
@@ -91,14 +93,14 @@ filler1 char (200),
 index i1(key1a, key1b),
 index i2(key2a, key2b),
 index i3(key3a, key3b)
-) engine=innodb;
+);
 create table t2 (a int);
 insert into t2 values (0),(1),(2),(3),(4),(NULL);
-insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
-insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 select key1a, key1b, key2a, key2b, key3a, key3b from t1;
-insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
+insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 select key1a, key1b, key2a, key2b, key3a, key3b from t1;
 analyze table t1;
 Table	Op	Msg_type	Msg_text
@@ -106,19 +108,19 @@ test.t1	analyze	status	OK
 select count(*) from t1;
 count(*)
 5184
-explain select count(*) from t1 where 
+explain select count(*) from t1 where
 key1a = 2 and key1b is null and  key2a = 2 and key2b is null;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	index_merge	i1,i2	i1,i2	10,10	NULL	4	Using intersect(i1,i2); Using where;
Using index
-select count(*) from t1 where 
+select count(*) from t1 where
 key1a = 2 and key1b is null and key2a = 2 and key2b is null;
 count(*)
 4
-explain select count(*) from t1 where 
+explain select count(*) from t1 where
 key1a = 2 and key1b is null and key3a = 2 and key3b is null;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	index_merge	i1,i3	i1,i3	10,10	NULL	4	Using intersect(i1,i3); Using where;
Using index
-select count(*) from t1 where 
+select count(*) from t1 where
 key1a = 2 and key1b is null and key3a = 2 and key3b is null;
 count(*)
 4
@@ -127,8 +129,8 @@ create table t1 (
 id1 int,
 id2 date ,
 index idx2 (id1,id2),
-index idx1 (id2)  
-) engine = innodb;
+index idx1 (id2)
+);
 insert into t1 values(1,'20040101'), (2,'20040102');
 select * from t1  where id1 = 1  and id2= '20040101';
 id1	id2
@@ -147,8 +149,8 @@ PRIMARY KEY  (`oid`),
 KEY `fk_bbk_niederlassung` (`fk_bbk_niederlassung`),
 KEY `fk_wochentag` (`fk_wochentag`),
 KEY `ix_version` (`version`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-insert  into t1 values 
+) DEFAULT CHARSET=latin1;
+insert  into t1 values
 (1, 38, 1, '08:00:00', '13:00:00', 0, 1),
 (2, 38, 2, '08:00:00', '13:00:00', 0, 1),
 (3, 38, 3, '08:00:00', '13:00:00', 0, 1),
@@ -174,25 +176,25 @@ insert  into t1 values 
 (23, 7, 3, '08:00:00', '13:00:00', 0, 1),
 (24, 7, 4, '08:00:00', '13:00:00', 0, 1),
 (25, 7, 5, '08:00:00', '13:00:00', 0, 1);
-create view v1 as 
-select 
-zeit1.oid AS oid, 
+create view v1 as
+select
+zeit1.oid AS oid,
 zeit1.fk_bbk_niederlassung AS fk_bbk_niederlassung,
 zeit1.fk_wochentag AS fk_wochentag,
-zeit1.uhrzeit_von AS uhrzeit_von, 
-zeit1.uhrzeit_bis AS uhrzeit_bis, 
+zeit1.uhrzeit_von AS uhrzeit_von,
+zeit1.uhrzeit_bis AS uhrzeit_bis,
 zeit1.geloescht AS geloescht,
 zeit1.version AS version
-from 
+from
 t1 zeit1
-where 
-(zeit1.version = 
+where
+(zeit1.version =
 (select max(zeit2.version) AS `max(version)`
-   from t1 zeit2 
-where 
-((zeit1.fk_bbk_niederlassung = zeit2.fk_bbk_niederlassung) and 
-(zeit1.fk_wochentag = zeit2.fk_wochentag) and 
-(zeit1.uhrzeit_von = zeit2.uhrzeit_von) and 
+   from t1 zeit2
+where
+((zeit1.fk_bbk_niederlassung = zeit2.fk_bbk_niederlassung) and
+(zeit1.fk_wochentag = zeit2.fk_wochentag) and
+(zeit1.uhrzeit_von = zeit2.uhrzeit_von) and
 (zeit1.uhrzeit_bis = zeit2.uhrzeit_bis)
 )
 )
@@ -213,7 +215,7 @@ filler2 char(250) default NULL,
 PRIMARY KEY (t_cpac,t_vers,t_rele,t_cust),
 UNIQUE KEY IX_4 (t_cust,t_cpac,t_vers,t_rele),
 KEY IX_5 (t_vers,t_rele,t_cust)
-) ENGINE=InnoDB;
+);
 insert into t1 values
 ('tm','2.5 ','a ','    ','',''), ('tm','2.5U','a ','stnd','',''),
 ('da','3.3 ','b ','    ','',''), ('da','3.3U','b ','stnd','',''),
@@ -275,10 +277,267 @@ primary key (pk),
 key idx1(a,b,c),
 key idx2(c),
 key idx3(kp1,kp2,kp3,kp4,kp5)
-) engine=innodb default charset=latin1;
+) default charset=latin1;
 set @fill=NULL;
-SELECT COUNT(*) FROM t1 WHERE b = 0 AND a = 0 AND c = 13286427 AND 
+SELECT COUNT(*) FROM t1 WHERE b = 0 AND a = 0 AND c = 13286427 AND
 kp1='279' AND kp2='ELM0678' AND kp3='6' AND kp4='10' AND  kp5 = 'R        ';
 COUNT(*)
 1
+drop table t1;
+#---------------- 2-sweeps read Index merge test 2 -------------------------------
+SET SESSION STORAGE_ENGINE = InnoDB;
+drop table if exists t1;
+create table t1 (
+pk int primary key,
+key1 int,
+key2 int,
+filler char(200),
+filler2 char(200),
+index(key1),
+index(key2)
+);
+select * from t1 where (key1 >= 2 and key1 <= 10) or (pk >= 4 and pk <=8 );
+pk	key1	key2	filler	filler2
+2	2	2	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+9	9	9	filler-data	filler-data-2
+10	10	10	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+5	5	5	filler-data	filler-data-2
+6	6	6	filler-data	filler-data-2
+7	7	7	filler-data	filler-data-2
+8	8	8	filler-data	filler-data-2
+set @maxv=1000;
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or key1=18 or key1=60;
+pk	key1	key2	filler	filler2
+18	18	18	filler-data	filler-data-2
+60	60	60	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+1000	1000	1000	filler-data	filler-data-2
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or key1 < 3 or key1 > @maxv-11;
+pk	key1	key2	filler	filler2
+990	990	990	filler-data	filler-data-2
+1	1	1	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+1000	1000	1000	filler-data	filler-data-2
+select * from t1 where
+(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk >
@maxv-10)
+or
+(key1 < 5) or (key1 > 10 and key1 < 15) or (key1 >= 50 and key1 < 55 ) or
(key1 > @maxv-10);
+pk	key1	key2	filler	filler2
+1	1	1	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+1000	1000	1000	filler-data	filler-data-2
+select * from t1 where
+(pk > 10 and pk < 15) or (pk >= 50 and pk < 55 )
+or
+(key1 < 5) or (key1 > @maxv-10);
+pk	key1	key2	filler	filler2
+1	1	1	filler-data	filler-data-2
+2	2	2	filler-data	filler-data-2
+3	3	3	filler-data	filler-data-2
+4	4	4	filler-data	filler-data-2
+991	991	991	filler-data	filler-data-2
+992	992	992	filler-data	filler-data-2
+993	993	993	filler-data	filler-data-2
+994	994	994	filler-data	filler-data-2
+995	995	995	filler-data	filler-data-2
+996	996	996	filler-data	filler-data-2
+997	997	997	filler-data	filler-data-2
+998	998	998	filler-data	filler-data-2
+999	999	999	filler-data	filler-data-2
+1000	1000	1000	filler-data	filler-data-2
+11	11	11	filler-data	filler-data-2
+12	12	12	filler-data	filler-data-2
+13	13	13	filler-data	filler-data-2
+14	14	14	filler-data	filler-data-2
+50	50	50	filler-data	filler-data-2
+51	51	51	filler-data	filler-data-2
+52	52	52	filler-data	filler-data-2
+53	53	53	filler-data	filler-data-2
+54	54	54	filler-data	filler-data-2
+drop table t1;
+#---------------- Clustered PK ROR-index_merge tests -----------------------------
+SET SESSION STORAGE_ENGINE = InnoDB;
+drop table if exists  t1;
+create table t1
+(
+pk1 int not null,
+pk2 int not null,
+key1 int not null,
+key2 int not null,
+pktail1ok  int not null,
+pktail2ok  int not null,
+pktail3bad int not null,
+pktail4bad int not null,
+pktail5bad int not null,
+pk2copy int not null,
+badkey  int not null,
+filler1 char (200),
+filler2 char (200),
+key (key1),
+key (key2),
+/* keys with tails from CPK members */
+key (pktail1ok, pk1),
+key (pktail2ok, pk1, pk2),
+key (pktail3bad, pk2, pk1),
+key (pktail4bad, pk1, pk2copy),
+key (pktail5bad, pk1, pk2, pk2copy),
+primary key (pk1, pk2)
+);
+explain select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	PRIMARY,key1	PRIMARY	8	NULL	9	Using where
+select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
+pk1	pk2	key1	key2	pktail1ok	pktail2ok	pktail3bad	pktail4bad	pktail5bad	pk2copy	badkey	filler1	filler2
+1	10	0	0	0	0	0	0	0	10	0	filler-data-10	filler2
+1	11	0	0	0	0	0	0	0	11	0	filler-data-11	filler2
+1	12	0	0	0	0	0	0	0	12	0	filler-data-12	filler2
+1	13	0	0	0	0	0	0	0	13	0	filler-data-13	filler2
+1	14	0	0	0	0	0	0	0	14	0	filler-data-14	filler2
+1	15	0	0	0	0	0	0	0	15	0	filler-data-15	filler2
+1	16	0	0	0	0	0	0	0	16	0	filler-data-16	filler2
+1	17	0	0	0	0	0	0	0	17	0	filler-data-17	filler2
+1	18	0	0	0	0	0	0	0	18	0	filler-data-18	filler2
+1	19	0	0	0	0	0	0	0	19	0	filler-data-19	filler2
+explain select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using
where; Using index
+select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
+pk1	pk2
+95	50
+95	51
+95	52
+95	53
+95	54
+95	55
+95	56
+95	57
+95	58
+95	59
+explain select * from t1 where badkey=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1	key1	4	const	100	Using where
+explain select * from t1 where pk1 < 7500 and key1 = 10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,key1	key1,PRIMARY	4,4	NULL	ROWS	Using
intersect(key1,PRIMARY); Using where
+explain select * from t1 where pktail1ok=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,pktail1ok	key1,pktail1ok	4,4	NULL	1	Using
intersect(key1,pktail1ok); Using where
+explain select * from t1 where pktail2ok=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,pktail2ok	key1,pktail2ok	4,4	NULL	1	Using
intersect(key1,pktail2ok); Using where
+explain select * from t1 where (pktail2ok=1 and pk1< 50000) or key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	PRIMARY,key1,pktail2ok	pktail2ok,key1	8,4	NULL	199	Using
sort_union(pktail2ok,key1); Using where
+explain select * from t1 where pktail3bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail3bad	key1	4	const	100	Using where
+explain select * from t1 where pktail4bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail4bad	key1	4	const	100	Using where
+explain select * from t1 where pktail5bad=1 and key1=10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ref	key1,pktail5bad	key1	4	const	100	Using where
+explain select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using
where; Using index
+select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
+pk1	pk2	key1	key2
+95	50	10	10
+95	51	10	10
+95	52	10	10
+95	53	10	10
+95	54	10	10
+95	55	10	10
+95	56	10	10
+95	57	10	10
+95	58	10	10
+95	59	10	10
+drop table t1;
+create table t1
+(
+RUNID varchar(22),
+SUBMITNR varchar(5),
+ORDERNR char(1),
+PROGRAMM varchar(8),
+TESTID varchar(4),
+UCCHECK char(1),
+ETEXT varchar(80),
+ETEXT_TYPE char(1),
+INFO char(1),
+SEVERITY tinyint(3),
+TADIRFLAG char(1),
+PRIMARY KEY  (RUNID,SUBMITNR,ORDERNR,PROGRAMM,TESTID,UCCHECK),
+KEY `TVERM~KEY`  (PROGRAMM,TESTID,UCCHECK)
+) DEFAULT CHARSET=latin1;
+update t1 set `ETEXT` = '', `ETEXT_TYPE`='', `INFO`='', `SEVERITY`='', `TADIRFLAG`=''
+WHERE
+`RUNID`= '' AND `SUBMITNR`= '' AND `ORDERNR`='' AND `PROGRAMM`='' AND
+`TESTID`='' AND `UCCHECK`='';
 drop table t1;

--- 1.9/mysql-test/t/index_merge_ror.test	2006-08-15 16:37:50 +02:00
+++ 1.11/mysql-test/include/index_merge_ror.inc	2006-08-15 16:37:50 +02:00
@@ -1,10 +1,19 @@
+# include/index_merge_ror.inc
 #
-#  ROR-index_merge tests. 
+#  ROR-index_merge tests.
 #
+# Note: The comments/expectations refer to MyISAM.
+#       They might be not valid for other storage engines.
+#
+# t/index_merge_ror.test
+
+--echo #---------------- ROR-index_merge tests -----------------------
+
+eval SET SESSION STORAGE_ENGINE = $engine_type;
+
 --disable_warnings
 drop table if exists  t0,t1,t2;
 --enable_warnings
---disable_query_log
 create table t1
 (
   /* Field names reflect value(rowid) distribution, st=STairs, swt= SaWTooth */
@@ -29,7 +38,7 @@ create table t1
   filler4 char (200),
   filler5 char (200),
   filler6 char (200),
-  
+
   /* order of keys is important */
   key sta_swt12a(st_a,swt1a,swt2a),
   key sta_swt1a(st_a,swt1a),
@@ -47,21 +56,26 @@ create table t1
   key(key4)
 ) ;
 
-# Fill table 
+# Fill table
 create table t0 as select * from t1;
+--disable_query_log
+--echo # Printing of many insert into t0 values (....) disabled.
 let $cnt=1000;
 while ($cnt)
 {
   eval insert into t0 values (1, 2, 3, 1, 2, 3, 0, 0, 0, 0, 'data1', 'data2', 'data3',
'data4', 'data5', 'data6');
   dec $cnt;
 }
+--enable_query_log
 
 alter table t1 disable keys;
+--disable_query_log
+--echo # Printing of many insert into t1 select .... from t0 disabled.
 let $1=4;
 while ($1)
 {
   let $2=4;
-  while ($2) 
+  while ($2)
   {
     let $3=4;
     while ($3)
@@ -74,6 +88,7 @@ while ($1)
  dec $1;
 }
 
+--echo # Printing of many insert into t1 (...) values (....) disabled.
 # Row retrieval tests
 # -1 is used for values 'out of any range we are using'
 # insert enough rows for index intersection to be used for (key1,key2)
@@ -90,17 +105,17 @@ while ($cnt)
   eval insert into t1 (key1, key2, key3, key4, filler1) values (-1, 100, -1,
100,'key2-key4');
   dec $cnt;
 }
-alter table t1 enable keys;
 --enable_query_log
+alter table t1 enable keys;
 select count(*) from t1;
 
-# One row results tests for cases where a single row matches all conditions 
+# One row results tests for cases where a single row matches all conditions
 explain select key1,key2 from t1 where key1=100 and key2=100;
 select key1,key2 from t1 where key1=100 and key2=100;
 explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or
key3=100 and key4=100;
 select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and
key4=100;
 
-# Several-rows results 
+# Several-rows results
 insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, -1, -1, 'key1-key2');
 insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 100, 100, 'key4-key3');
 
@@ -150,7 +165,7 @@ explain select key1,key2 from t1 where k
 select key1,key2 from t1 where key1=100 and key2=100;
 
 # ROR-union tests with various cases.
-#  All scans returning duplicate rows: 
+#  All scans returning duplicate rows:
 insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-1');
 insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-2');
 insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200,
200,'key1-key2-key3-key4-3');
@@ -169,7 +184,7 @@ explain select key1,key2,key3,key4,fille
 select key1,key2,key3,key4,filler1 from t1 where key3=200 or (key1=100 and key2=100) or
key4=200;
 
 ##
-## Optimizer tests 
+## Optimizer tests
 ##
 
 # Check that the shortest key is used for ROR-intersection, covering and non-covering.
@@ -179,9 +194,9 @@ explain select st_a,st_b from t1 where s
 # Check if "ingore index" syntax works
 explain select st_a from t1 ignore index (st_a) where st_a=1 and st_b=1;
 
-# Do many tests 
+# Do many tests
 # Check that keys that don't improve selectivity are skipped.
-# 
+#
 
 # Different value on 32 and 64 bit
 --replace_result sta_swt12a sta_swt21a sta_swt12a, sta_swt12a,
@@ -191,25 +206,25 @@ explain select * from t1 where st_b=1 an
 
 explain select * from t1 where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and
swt2b=1;
 
-explain select * from t1 ignore index (sta_swt21a, stb_swt1a_2b) 
+explain select * from t1 ignore index (sta_swt21a, stb_swt1a_2b)
   where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
 
-explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b) 
+explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b)
   where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
 
-explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b, stb_swt1b) 
+explain select * from t1 ignore index (sta_swt21a, sta_swt12a, stb_swt1a_2b, stb_swt1b)
   where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1 and swt2b=1;
 
-explain select * from t1 
+explain select * from t1
   where st_a=1 and swt1a=1 and swt2a=1 and st_b=1 and swt1b=1;
 
-explain select * from t1 
+explain select * from t1
   where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
 
-explain select st_a from t1 
+explain select st_a from t1
   where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
 
-explain select st_a from t1 
+explain select st_a from t1
   where st_a=1 and swt1a=1 and st_b=1 and swt1b=1 and swt1b=1;
 
 drop table t0,t1;
@@ -240,7 +255,7 @@ insert into t2 select * from t2;
 select count(a) from t2 where a='BBBBBBBB';
 select count(a) from t2 where b='BBBBBBBB';
 
-# BUG#1: 
+# BUG#1:
 --replace_result a a_or_b b a_or_b
 explain select count(a) from t2 where a='AAAAAAAA' and b='AAAAAAAA';
 select count(a) from t2 where a='AAAAAAAA' and b='AAAAAAAA';

--- 1.8/mysql-test/t/index_merge_ror_cpk.test	2006-08-15 16:37:50 +02:00
+++ 1.10/mysql-test/include/index_merge_ror_cpk.inc	2006-08-15 16:37:50 +02:00
@@ -1,7 +1,15 @@
+# include/index_merge_ror_cpk.inc
 #
 # Clustered PK ROR-index_merge tests
 #
--- source include/have_innodb.inc
+# Note: The comments/expectations refer to InnoDB.
+#       They might be not valid for other storage engines.
+#
+# t/index_merge_ror_cpk.test
+
+--echo #---------------- Clustered PK ROR-index_merge tests -----------------------------
+
+eval SET SESSION STORAGE_ENGINE = $engine_type;
 
 --disable_warnings
 drop table if exists  t1;
@@ -9,14 +17,14 @@ drop table if exists  t1;
 
 create table t1
 (
-  pk1 int not null, 
+  pk1 int not null,
   pk2 int not null,
- 
+
   key1 int not null,
   key2 int not null,
 
-  pktail1ok  int not null, 
-  pktail2ok  int not null, 
+  pktail1ok  int not null,
+  pktail2ok  int not null,
   pktail3bad int not null,
   pktail4bad int not null,
   pktail5bad int not null,
@@ -37,7 +45,7 @@ create table t1
   key (pktail5bad, pk1, pk2, pk2copy),
 
   primary key (pk1, pk2)
-) engine=innodb;
+);
 
 --disable_query_log
 set autocommit=0;
@@ -50,13 +58,13 @@ while ($1)
 set autocommit=1;
 --enable_query_log
 
-# Verify that range scan on CPK is ROR 
-# (use index_intersection because it is impossible to check that for index union) 
+# Verify that range scan on CPK is ROR
+# (use index_intersection because it is impossible to check that for index union)
 explain select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
 # CPK scan + 1 ROR range scan is a special case
 select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
 
-# Verify that CPK fields are considered to be covered by index scans 
+# Verify that CPK fields are considered to be covered by index scans
 explain select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
 select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
 
@@ -65,12 +73,13 @@ select pk1,pk2 from t1 where key1 = 10 a
 explain select * from t1 where badkey=1 and key1=10;
 --replace_column 9 ROWS
 explain select * from t1 where pk1 < 7500 and key1 = 10;
-  
+
 # Verify that keys with 'tails' of PK members are ok.
 explain select * from t1 where pktail1ok=1 and key1=10;
 explain select * from t1 where pktail2ok=1 and key1=10;
 
-select '  The following is actually a deficiency, it uses sort_union currently:' as
'note:';
+# Note: The following is actually a deficiency, it uses sort_union currently.
+#       This comment refers to InnoDB and is probably not valid for other engines.
 explain select * from t1 where (pktail2ok=1 and pk1< 50000) or key1=10;
 
 # The expected rows differs a bit from platform to platform
@@ -79,33 +88,33 @@ explain select * from t1 where pktail3ba
 explain select * from t1 where pktail4bad=1 and key1=10;
 explain select * from t1 where pktail5bad=1 and key1=10;
 
-# Test for problem with innodb key values prefetch buffer: 
+# Test for problem with innodb key values prefetch buffer:
 explain select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
 select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
 
 drop table t1;
 # Testcase for BUG#4984
 create table t1
-( 
-  RUNID varchar(22), 
-  SUBMITNR varchar(5), 
-  ORDERNR char(1) , 
-  PROGRAMM varchar(8), 
-  TESTID varchar(4), 
-  UCCHECK char(1), 
-  ETEXT varchar(80), 
+(
+  RUNID varchar(22),
+  SUBMITNR varchar(5),
+  ORDERNR char(1),
+  PROGRAMM varchar(8),
+  TESTID varchar(4),
+  UCCHECK char(1),
+  ETEXT varchar(80),
   ETEXT_TYPE char(1),
-  INFO char(1), 
-  SEVERITY tinyint(3), 
-  TADIRFLAG char(1), 
-  PRIMARY KEY  (RUNID,SUBMITNR,ORDERNR,PROGRAMM,TESTID,UCCHECK), 
+  INFO char(1),
+  SEVERITY tinyint(3),
+  TADIRFLAG char(1),
+  PRIMARY KEY  (RUNID,SUBMITNR,ORDERNR,PROGRAMM,TESTID,UCCHECK),
   KEY `TVERM~KEY`  (PROGRAMM,TESTID,UCCHECK)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
- 
-update t1 set `ETEXT` = '', `ETEXT_TYPE`='', `INFO`='', `SEVERITY`='', `TADIRFLAG`='' 
-WHERE 
- `RUNID`= '' AND `SUBMITNR`= '' AND `ORDERNR`='' AND `PROGRAMM`='' AND 
- `TESTID`='' AND `UCCHECK`=''; 
+) DEFAULT CHARSET=latin1;
+
+update t1 set `ETEXT` = '', `ETEXT_TYPE`='', `INFO`='', `SEVERITY`='', `TADIRFLAG`=''
+WHERE
+ `RUNID`= '' AND `SUBMITNR`= '' AND `ORDERNR`='' AND `PROGRAMM`='' AND
+ `TESTID`='' AND `UCCHECK`='';
 
 drop table t1;
 
Thread
bk commit into 5.1 tree (mleich:1.2276)mleich15 Aug