189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # t/index_merge_myisam.test
 | |
| #
 | |
| # Index merge tests
 | |
| #
 | |
| # Last update:
 | |
| # 2006-08-07 ML test refactored (MySQL 5.1)
 | |
| #               Main code of several index_merge tests
 | |
| #                            -> include/index_merge*.inc
 | |
| #               wrapper t/index_merge_innodb.test sources now several 
 | |
| #               include/index_merge*.inc files
 | |
| #
 | |
| 
 | |
| let $engine_type= MyISAM;
 | |
| # MyISAM supports Merge tables
 | |
| let $merge_table_support= 1;
 | |
| 
 | |
| --source include/index_merge1.inc
 | |
| --source include/index_merge_ror.inc
 | |
| --source include/index_merge2.inc
 | |
| --source include/index_merge_2sweeps.inc
 | |
| --source include/index_merge_ror_cpk.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Generic @@optimizer_switch tests (move those into a separate file if
 | |
| --echo #  we get another @@optimizer_switch user)
 | |
| --echo #
 | |
| 
 | |
| select @@optimizer_switch;
 | |
| 
 | |
| set optimizer_switch='index_merge=off,index_merge_union=off';
 | |
| select @@optimizer_switch;
 | |
| 
 | |
| set optimizer_switch='index_merge_union=on';
 | |
| select @@optimizer_switch;
 | |
| 
 | |
| set optimizer_switch='default,index_merge_sort_union=off';
 | |
| select @@optimizer_switch;
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch=4;
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch=NULL;
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='default,index_merge';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge=index_merge';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge=on,but...';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge=';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='on';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge=on,index_merge=off';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='index_merge_union=on,index_merge_union=default';
 | |
| 
 | |
| --error ER_WRONG_VALUE_FOR_VAR
 | |
| set optimizer_switch='default,index_merge=on,index_merge=off,default';
 | |
| 
 | |
| set optimizer_switch=default;
 | |
| set optimizer_switch='index_merge=off,index_merge_union=off,default';
 | |
| select @@optimizer_switch;
 | |
| set optimizer_switch=default;
 | |
| 
 | |
| # Check setting defaults for global vars
 | |
| select @@global.optimizer_switch;
 | |
| set @@global.optimizer_switch=default;
 | |
| select @@global.optimizer_switch;
 | |
| 
 | |
| --echo #
 | |
| --echo # Check index_merge's @@optimizer_switch flags
 | |
| --echo #
 | |
| select @@optimizer_switch;
 | |
| 
 | |
| 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, c int, filler char(100), 
 | |
|                  key(a), key(b), key(c));
 | |
| insert into t1 select 
 | |
|   A.a * B.a*10 + C.a*100, 
 | |
|   A.a * B.a*10 + C.a*100,
 | |
|   A.a, 
 | |
|   'filler'
 | |
| from t0 A, t0 B, t0 C; 
 | |
| 
 | |
| --echo This should use union:
 | |
| explain select * from t1 where a=1 or b=1;
 | |
| 
 | |
| --echo This should use ALL:
 | |
| set optimizer_switch='default,index_merge=off';
 | |
| explain select * from t1 where a=1 or b=1;
 | |
| 
 | |
| --echo This should use sort-union:
 | |
| set optimizer_switch='default,index_merge_union=off';
 | |
| explain select * from t1 where a=1 or b=1;
 | |
| 
 | |
| --echo This will use sort-union:
 | |
| set optimizer_switch=default;
 | |
| explain select * from t1 where a<1 or b <1;
 | |
| 
 | |
| --echo This should use ALL:
 | |
| set optimizer_switch='default,index_merge_sort_union=off';
 | |
| explain select * from t1 where a<1 or b <1;
 | |
| 
 | |
| 
 | |
| --echo This should use ALL:
 | |
| set optimizer_switch='default,index_merge=off';
 | |
| explain select * from t1 where a<1 or b <1;
 | |
| 
 | |
| --echo This will use sort-union:
 | |
| set optimizer_switch='default,index_merge_union=off';
 | |
| explain select * from t1 where a<1 or b <1;
 | |
| 
 | |
| alter table t1 add d int, add key(d);
 | |
| update t1 set d=a;
 | |
| 
 | |
| --echo This will use sort_union:
 | |
| set optimizer_switch=default;
 | |
| explain select * from t1 where (a=3 or b in (1,2)) and (c=3 or d=4);
 | |
| 
 | |
| --echo And if we disable sort_union, union:
 | |
| set optimizer_switch='default,index_merge_sort_union=off';
 | |
| explain select * from t1 where (a=3 or b in (1,2)) and (c=3 or d=4);
 | |
| 
 | |
| drop table t1;
 | |
| 
 | |
| # Now test that intersection can be disabled
 | |
| create table t1 (
 | |
|   a int, b int, c int,
 | |
|   filler1 char(200), filler2 char(200), 
 | |
|   key(a),key(b),key(c)
 | |
| ); 
 | |
| 
 | |
| insert into t1 
 | |
| select A.a+10*B.a, A.a+10*B.a, A.a+10*B.a+100*C.a, 'foo', 'bar' 
 | |
| from t0 A, t0 B, t0 C, t0 D where D.a<5;
 | |
| 
 | |
| --echo This should be intersect:
 | |
| set optimizer_switch=default;
 | |
| explain select * from t1 where a=10 and b=10;
 | |
| 
 | |
| --echo No intersect when index_merge is disabled:
 | |
| set optimizer_switch='default,index_merge=off';
 | |
| explain select * from t1 where a=10 and b=10;
 | |
| 
 | |
| --echo No intersect if it is disabled:
 | |
| set optimizer_switch='default,index_merge_intersection=off';
 | |
| explain select * from t1 where a=10 and b=10;
 | |
| 
 | |
| --echo Do intersect when union was disabled
 | |
| set optimizer_switch='default,index_merge_union=off';
 | |
| explain select * from t1 where a=10 and b=10;
 | |
| 
 | |
| --echo Do intersect when sort_union was disabled
 | |
| set optimizer_switch='default,index_merge_sort_union=off';
 | |
| explain select * from t1 where a=10 and b=10;
 | |
| 
 | |
| # Now take union-of-intersection and see how we can disable parts of it
 | |
| --echo This will use intersection inside a union:
 | |
| set optimizer_switch=default;
 | |
| explain select * from t1 where a=10 and b=10 or c=10;
 | |
| 
 | |
| --echo Should be only union left:
 | |
| set optimizer_switch='default,index_merge_intersection=off';
 | |
| explain select * from t1 where a=10 and b=10 or c=10;
 | |
| 
 | |
| --echo This will switch to sort-union (intersection will be gone, too,
 | |
| --echo   thats a known limitation:
 | |
| set optimizer_switch='default,index_merge_union=off';
 | |
| explain select * from t1 where a=10 and b=10 or c=10;
 | |
| 
 | |
| set optimizer_switch=default;
 | |
| show variables like 'optimizer_switch';
 | |
| 
 | |
| drop table t0, t1;
 | |
| 
 |