# # test of MERGE TABLES # drop table if exists t1,t2,t3,t4,t5,t6; create table t1 (a int not null primary key auto_increment, message char(20)); create table t2 (a int not null primary key auto_increment, message char(20)); INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1"); INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2"); create table t3 (a int not null, b char(20), key(a)) type=MERGE UNION=(t1,t2); select * from t3; select * from t3 order by a desc; drop table t3; insert into t1 select NULL,message from t2; insert into t2 select NULL,message from t1; insert into t1 select NULL,message from t2; insert into t2 select NULL,message from t1; insert into t1 select NULL,message from t2; insert into t2 select NULL,message from t1; insert into t1 select NULL,message from t2; insert into t2 select NULL,message from t1; insert into t1 select NULL,message from t2; insert into t2 select NULL,message from t1; insert into t1 select NULL,message from t2; create table t3 (a int not null, b char(20), key(a)) type=MERGE UNION=(test.t1,test.t2); explain select * from t3 where a < 10; explain select * from t3 where a > 10 and a < 20; select * from t3 where a = 10; select * from t3 where a < 10; select * from t3 where a > 10 and a < 20; explain select a from t3 order by a desc limit 10; select a from t3 order by a desc limit 10; select a from t3 order by a desc limit 300,10; delete from t3 where a=3; select * from t3 where a < 10; delete from t3 where a >= 6 and a <= 8; select * from t3 where a < 10; update t3 set a=3 where a=9; select * from t3 where a < 10; update t3 set a=6 where a=7; select * from t3 where a < 10; show create table t3; # The following should give errors create table t4 (a int not null, b char(10), key(a)) type=MERGE UNION=(t1,t2); --error 1016 select * from t4; --error 1212 create table t5 (a int not null, b char(10), key(a)) type=MERGE UNION=(test.t1,test_2.t2); # Because of windows, it's important that we drop the merge tables first! drop table if exists t5,t4,t3,t1,t2; create table t1 (c char(10)) type=myisam; create table t2 (c char(10)) type=myisam; create table t3 (c char(10)) union=(t1,t2) type=merge; insert into t1 (c) values ('test1'); insert into t1 (c) values ('test1'); insert into t1 (c) values ('test1'); insert into t2 (c) values ('test2'); insert into t2 (c) values ('test2'); insert into t2 (c) values ('test2'); select * from t3; select * from t3; delete from t3 where 1=1; select * from t3; select * from t1; drop table t3,t2,t1; # # Test 2 # CREATE TABLE t1 (incr int not null, othr int not null, primary key(incr)); CREATE TABLE t2 (incr int not null, othr int not null, primary key(incr)); CREATE TABLE t3 (incr int not null, othr int not null, primary key(incr)) TYPE=MERGE UNION=(t1,t2); SELECT * from t3; INSERT INTO t1 VALUES ( 1,10),( 3,53),( 5,21),( 7,12),( 9,17); INSERT INTO t2 VALUES ( 2,24),( 4,33),( 6,41),( 8,26),( 0,32); INSERT INTO t1 VALUES (11,20),(13,43),(15,11),(17,22),(19,37); INSERT INTO t2 VALUES (12,25),(14,31),(16,42),(18,27),(10,30); SELECT * from t3 where incr in (1,2,3,4) order by othr; alter table t3 UNION=(t1); select count(*) from t3; alter table t3 UNION=(t1,t2); select count(*) from t3; alter table t3 TYPE=MYISAM; select count(*) from t3; # Test that ALTER TABLE rembers the old UNION drop table t3; CREATE TABLE t3 (incr int not null, othr int not null, primary key(incr)) TYPE=MERGE UNION=(t1,t2); show create table t3; alter table t3 drop primary key; show create table t3; drop table t3,t2,t1; # # Test table without unions # create table t1 (a int not null) type=merge; select * from t1; drop table t1; # # Bug found by Monty. # drop table if exists t3, t2, t1; create table t1 (a int not null, b int not null, key(a,b)); create table t2 (a int not null, b int not null, key(a,b)); create table t3 (a int not null, b int not null, key(a,b)) TYPE=MERGE UNION=(t1,t2); insert into t1 values (1,2),(2,1),(0,0),(4,4),(5,5),(6,6); insert into t2 values (1,1),(2,2),(0,0),(4,4),(5,5),(6,6); flush tables; select * from t3 where a=1 order by b limit 2; drop table t3,t1,t2; # # [phi] testing INSERT_METHOD stuff # drop table if exists t6, t5, t4, t3, t2, t1; # first testing of common stuff with new parameters create table t1 (a int not null, b int not null auto_increment, primary key(a,b)); create table t2 (a int not null, b int not null auto_increment, primary key(a,b)); create table t3 (a int not null, b int not null, key(a,b)) UNION=(t1,t2) INSERT_METHOD=NO; create table t4 (a int not null, b int not null, key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=NO; create table t5 (a int not null, b int not null auto_increment, primary key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=FIRST; create table t6 (a int not null, b int not null auto_increment, primary key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; show create table t3; show create table t4; show create table t5; show create table t6; insert into t1 values (1,NULL),(1,NULL),(1,NULL),(1,NULL); insert into t2 values (2,NULL),(2,NULL),(2,NULL),(2,NULL); select * from t3 order by b,a limit 3; select * from t4 order by b,a limit 3; select * from t5 order by b,a limit 3,3; select * from t6 order by b,a limit 6,3; # now testing inserts and where the data gets written insert into t5 values (5,1),(5,2); insert into t6 values (6,1),(6,2); select * from t1 order by a,b; select * from t2 order by a,b; select * from t4 order by a,b; # preperation for next test insert into t3 values (3,1),(3,2),(3,3),(3,4); select * from t3 order by a,b; # now testing whether options are kept by alter table alter table t4 UNION=(t1,t2,t3); show create table t4; select * from t4 order by a,b; # testing switching off insert method and inserts again alter table t4 INSERT_METHOD=FIRST; show create table t4; insert into t4 values (4,1),(4,2); select * from t1 order by a,b; select * from t2 order by a,b; select * from t3 order by a,b; select * from t4 order by a,b; select * from t5 order by a,b; # auto_increment select 1; insert into t5 values (1,NULL),(5,NULL); insert into t6 values (2,NULL),(6,NULL); select * from t1 order by a,b; select * from t2 order by a,b; select * from t5 order by a,b; select * from t6 order by a,b; drop table if exists t6, t5, t4, t3, t2, t1; CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM; INSERT INTO t1 VALUES (1,1), (2,1); CREATE TABLE t2 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM; INSERT INTO t2 VALUES (1,2), (2,2); CREATE TABLE t ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', KEY a (a,b)) TYPE=MRG_MyISAM UNION=(t1,t2); select max(b) from t where a = 2; select max(b) from t1 where a = 2; drop table if exists t,t1,t2;