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; | ||
|  | 
 |