1 ################################################################################
5 # This is a derivate of t/innodb.test and has to be maintained by MySQL #
8 # Please, DO NOT create a toplevel testcase mix2_innodb.test, because #
9 # innodb.test does already these tests. #
11 # Variables which have to be set before calling this script: #
12 # $engine_type -- Storage engine to be tested #
13 # $other_engine_type -- storage engine <> $engine_type #
14 # $other_engine_type1 -- storage engine <> $engine_type #
15 # storage engine <> $other_engine_type, if possible #
16 # $other_non_trans_engine_type -- storage engine <> $engine_type #
17 # $other_non_trans_engine_type must be a non #
18 # transactional storage engine #
19 # $other_non_live_chks_engine_type #
20 # -- storage engine <> $engine_type, if possible #
21 # storage engine must not support live checksum #
22 # $other_live_chks_engine_type #
23 # -- storage engine <> $engine_type, if possible #
24 # storage engine must support live checksum #
25 # General Note: The $other_*_engine_type variables must point to all #
26 # time available storage engines #
27 # 2006-08 MySQL 5.1 MyISAM and MEMORY only #
28 # $test_transactions -- 0, skip transactional tests #
29 # -- 1, do not skip transactional tests #
30 # $test_foreign_keys -- 0, skip foreign key tests #
31 # -- 1, do not skip foreign key tests #
32 # $fulltext_query_unsupported -- 0, execute fulltext_query tests #
33 # -- 1, skip fulltext query tests #
34 # $no_autoinc_update -- 0, skip tests where it is expected that an update #
35 # does not update the internal auto-increment value#
36 # -- 1, do not skip these tests #
37 # $no_spatial_key -- 0, skip tests where it is expected that keys on #
38 # spatial data type are not allowed #
39 # -- 1, do not skip these tests #
41 # The comments/expectations refer to InnoDB. #
42 # They might be not valid for other storage engines. #
46 # 2006-08-15 ML - introduce several $variables #
47 # - correct some storage engine assignments #
48 # - minor improvements like correct wrong table after analyze #
49 # - let checksum testcase meet all table variants with/without #
50 # live checksum feature exiting and/or enabled #
51 # 2006-07-26 ML create script by using t/innodb.test and introduce $variables #
53 ################################################################################
55 # Set the SESSION DEFAULT STORAGE ENGINE to a value <> storage engine
56 # to be tested. This must not affect any CREATE TABLE statement, where
57 # the storage engine is assigned explicitely,
58 eval SET SESSION DEFAULT_STORAGE_ENGINE = $other_engine_type;
61 # Small basic test with ignore
65 drop
table if exists t1,t2,t3,t4;
66 drop database
if exists mysqltest;
69 eval create
table t1 (
id int unsigned not null auto_increment,
code tinyint
unsigned not null,
name char(20) not null, primary key (
id), key (
code), unique (
name)) engine=$engine_type;
71 insert into t1 (
code,
name) values (1, 'Tim'), (1, 'Monty'), (2, 'David'), (2, 'Erik'), (3, 'Sasha'), (3, 'Jeremy'), (4, 'Matt');
72 select
id, code,
name from t1 order by
id;
74 update ignore t1 set
id = 8,
name = 'Sinisa' where
id < 3;
75 select
id, code,
name from t1 order by
id;
76 update ignore t1 set
id =
id + 10,
name = 'Ralph' where
id < 4;
77 select
id, code,
name from t1 order by
id;
83 # The 'replace_column' statements are needed because the cardinality calculated
84 # by innodb is not always the same between runs
87 eval CREATE
TABLE t1 (
88 id int(11) NOT NULL auto_increment,
89 parent_id
int(11) DEFAULT
'0' NOT NULL,
90 level tinyint(4) DEFAULT
'0' NOT NULL,
92 KEY parent_id (parent_id),
94 ) engine=$engine_type;
95 INSERT INTO t1 VALUES (1,0,0),(3,1,1),(4,1,1),(8,2,2),(9,2,2),(17,3,2),(22,4,2),(24,4,2),(28,5,2),(29,5,2),(30,5,2),(31,6,2),(32,6,2),(33,6,2),(203,7,2),(202,7,2),(20,3,2),(157,0,0),(193,5,2),(40,7,2),(2,1,1),(15,2,2),(6,1,1),(34,6,2),(35,6,2),(16,3,2),(7,1,1),(36,7,2),(18,3,2),(26,5,2),(27,5,2),(183,4,2),(38,7,2),(25,5,2),(37,7,2),(21,4,2),(19,3,2),(5,1,1),(179,5,2);
96 update t1 set parent_id=parent_id+100;
97 select * from t1 where parent_id=102;
98 update t1 set
id=
id+1000;
99 -- error ER_DUP_ENTRY,1022
100 update t1 set
id=1024 where
id=1009;
102 update ignore t1 set
id=
id+1;
# This will change all rows
104 update ignore t1
set id=1023 where
id=1010;
105 select * from t1 where parent_id=102;
109 explain select
level,
id from t1 where level=1;
111 explain select
level,
id,parent_id from t1 where level=1;
112 select
level,
id from t1 where level=1;
113 select
level,
id,parent_id from t1 where level=1;
123 eval CREATE
TABLE t1 (
124 gesuchnr
int(11) DEFAULT
'0' NOT NULL,
125 benutzer_id
int(11) DEFAULT
'0' NOT NULL,
126 PRIMARY
KEY (gesuchnr,benutzer_id)
127 ) engine=$engine_type;
129 replace into t1 (gesuchnr,benutzer_id) values (2,1);
130 replace into t1 (gesuchnr,benutzer_id) values (1,1);
131 replace into t1 (gesuchnr,benutzer_id) values (1,1);
136 # test delete using hidden_primary_key
139 eval create
table t1 (a
int) engine=$engine_type;
140 insert into t1 values (1), (2);
142 delete from t1 where a = 1;
147 eval create
table t1 (a
int,b varchar(20)) engine=$engine_type;
148 insert into t1 values (1,""), (2,"testing");
149 delete from t1 where a = 1;
151 create
index skr on t1 (a);
152 insert into t1 values (3,""), (4,"testing");
159 # Test of reading on secondary key with may be null
161 eval create
table t1 (a
int,b varchar(20),key(a)) engine=$engine_type;
162 insert into t1 values (1,""), (2,"testing");
163 select * from t1 where a = 1;
166 if ($test_transactions)
172 eval create
table t1 (
n int not null primary key) engine=$engine_type;
174 insert into t1 values (4);
176 select
n,
"after rollback" from t1;
177 insert into t1 values (4);
179 select
n,
"after commit" from t1;
181 insert into t1 values (5);
182 -- error ER_DUP_ENTRY
183 insert into t1 values (4);
185 select
n,
"after commit" from t1;
187 insert into t1 values (6);
188 -- error ER_DUP_ENTRY
189 insert into t1 values (4);
196 savepoint `my_savepoint`;
197 insert into t1 values (7);
199 insert into t1 values (3);
202 rollback
to savepoint savept2;
204 rollback
to savepoint savept3;
205 rollback
to savepoint savept2;
206 release savepoint `my_savepoint`;
209 rollback
to savepoint `my_savepoint`;
211 rollback
to savepoint savept2;
212 insert into t1 values (8);
222 # Test for commit and FLUSH TABLES WITH READ LOCK
225 eval create
table t1 (n
int not null primary key) engine=$engine_type;
227 insert into t1 values (4);
228 flush tables with read lock;
230 # Current code can't handle a read lock in middle of transaction
239 # Testing transactions
242 eval create
table t1 (
id int NOT NULL PRIMARY
KEY, nom varchar(64)) engine=$engine_type;
244 insert into t1 values(1,'hamdouni');
245 select
id as afterbegin_id,nom as afterbegin_nom from t1;
247 select
id as afterrollback_id,nom as afterrollback_nom from t1;
249 insert into t1 values(2,'mysql');
250 select
id as afterautocommit0_id,nom as afterautocommit0_nom from t1;
252 select
id as afterrollback_id,nom as afterrollback_nom from t1;
257 # Simple not autocommit test
260 eval CREATE
TABLE t1 (
id char(8) not null primary key, val
int not null) engine=$engine_type;
261 insert into t1 values (
'pippo', 12);
262 -- error ER_DUP_ENTRY
263 insert into t1 values (
'pippo', 12); # Gives error
265 delete from t1 where
id =
'pippo';
268 insert into t1 values (
'pippo', 12);
279 # Test of active transactions
282 eval create
table t1 (a integer) engine=$engine_type;
285 eval create
table t1 (b integer) engine=$engine_type;
286 insert into t1 values (1);
294 # The following simple tests failed at some point
297 eval CREATE
TABLE t1 (ID INTEGER NOT NULL PRIMARY KEY, NAME VARCHAR(64)) ENGINE=$engine_type;
298 INSERT INTO t1 VALUES (1, 'Jochen');
302 eval CREATE
TABLE t1 ( _userid VARCHAR(60) NOT NULL PRIMARY KEY) ENGINE=$engine_type;
304 INSERT INTO t1 SET _userid='marc@anyware.co.uk';
307 SELECT _userid FROM t1 WHERE _userid='marc@anyware.co.uk';
312 # End of transactional tests
315 # Test when reading on part of unique key
317 eval CREATE
TABLE t1 (
318 user_id
int(10) DEFAULT
'0' NOT NULL,
321 ref_email varchar(100) DEFAULT
'' NOT NULL,
323 PRIMARY KEY (user_id,ref_email)
324 )engine=$engine_type;
326 INSERT INTO t1 VALUES (10292,'sanjeev','29153373','sansh777@hotmail.com','xxx'),(10292,'shirish','2333604','shirish@yahoo.com','ddsds'),(10292,'sonali','323232','sonali@bolly.com','filmstar');
327 select * from t1 where user_id=10292;
328 INSERT INTO t1 VALUES (10291,'sanjeev','29153373','sansh777@hotmail.com','xxx'),(10293,'shirish','2333604','shirish@yahoo.com','ddsds');
329 select * from t1 where user_id=10292;
330 select * from t1 where user_id>=10292;
331 select * from t1 where user_id>10292;
332 select * from t1 where user_id<10292;
336 # Test that keys are created in right order
339 eval CREATE
TABLE t1 (a
int not null, b
int not null,c
int not null,
340 key(a),primary key(a,b), unique(c),key(a),unique(b)) ENGINE = $engine_type;
346 # Test of ALTER TABLE and innodb tables
349 eval create
table t1 (col1
int not null, col2
char(4) not null, primary key(col1)) ENGINE = $other_engine_type;
350 eval alter
table t1 engine=$engine_type;
351 insert into t1 values ('1','1'),('5','2'),('2','3'),('3','4'),('4','4');
353 update t1 set col2='7' where col1='4';
355 alter
table t1 add co3
int not null;
357 update t1 set col2='9' where col1='2';
362 # INSERT INTO innodb tables
365 eval create
table t1 (a
int not null , b
int, primary key (a)) engine = $engine_type;
366 eval create
table t2 (a
int not null , b
int, primary key (a)) engine = $other_engine_type;
367 insert into t1 VALUES (1,3) , (2,3), (3,3);
369 insert into t2 select * from t1;
371 delete from t1 where b = 3;
373 insert into t1 select * from t2;
379 # Search on unique key
382 eval CREATE
TABLE t1 (
383 id int(11) NOT NULL auto_increment,
384 ggid varchar(32) binary DEFAULT
'' NOT NULL,
385 email varchar(64) DEFAULT
'' NOT NULL,
386 passwd varchar(32) binary DEFAULT
'' NOT NULL,
389 ) ENGINE=$engine_type;
391 insert into t1 (ggid,passwd) values ('test1','xxx');
392 insert into t1 (ggid,passwd) values ('test2','yyy');
393 -- error ER_DUP_ENTRY
394 insert into t1 (ggid,passwd) values ('test2','this will fail');
395 -- error ER_DUP_ENTRY
396 insert into t1 (ggid,
id) values ('this will fail',1);
398 select * from t1 where ggid='test1';
399 select * from t1 where passwd='xxx';
400 select * from t1 where
id=2;
402 replace into t1 (ggid,
id) values ('this will work',1);
403 replace into t1 (ggid,passwd) values ('test2','this will work');
404 -- error ER_DUP_ENTRY
405 update t1 set
id=100,ggid='test2' where
id=1;
407 select * from t1 where
id=1;
408 select * from t1 where
id=999;
412 # ORDER BY on not primary key
415 eval CREATE
TABLE t1 (
416 user_name varchar(12),
419 user_id
int(11) DEFAULT
'0' NOT NULL,
425 dummy_primary_key
int(11) NOT NULL auto_increment,
426 PRIMARY KEY (dummy_primary_key)
427 ) ENGINE=$engine_type;
428 INSERT INTO t1 VALUES ('user_0','somepassword','N',0,0,0,'2000-09-07','23:06:59','2000-09-07 23:06:59',1);
429 INSERT INTO t1 VALUES ('user_1','somepassword','Y',1,1,1,'2000-09-07','23:06:59','2000-09-07 23:06:59',2);
430 INSERT INTO t1 VALUES ('user_2','somepassword','N',2,2,1.4142135623731,'2000-09-07','23:06:59','2000-09-07 23:06:59',3);
431 INSERT INTO t1 VALUES ('user_3','somepassword','Y',3,3,1.7320508075689,'2000-09-07','23:06:59','2000-09-07 23:06:59',4);
432 INSERT INTO t1 VALUES ('user_4','somepassword','N',4,4,2,'2000-09-07','23:06:59','2000-09-07 23:06:59',5);
433 select user_name, password , subscribed, user_id, quota, weight, access_date, access_time, approved, dummy_primary_key from t1 order by user_name;
437 # Testing of tables without primary keys
440 eval CREATE
TABLE t1 (
441 id int(11) NOT NULL auto_increment,
442 parent_id
int(11) DEFAULT
'0' NOT NULL,
443 level tinyint(4) DEFAULT
'0' NOT NULL,
445 KEY parent_id (parent_id),
447 ) engine=$engine_type;
448 INSERT INTO t1 VALUES (1,0,0),(3,1,1),(4,1,1),(8,2,2),(9,2,2),(17,3,2),(22,4,2),(24,4,2),(28,5,2),(29,5,2),(30,5,2),(31,6,2),(32,6,2),(33,6,2),(203,7,2),(202,7,2),(20,3,2),(157,0,0),(193,5,2),(40,7,2),(2,1,1),(15,2,2),(6,1,1),(34,6,2),(35,6,2),(16,3,2),(7,1,1),(36,7,2),(18,3,2),(26,5,2),(27,5,2),(183,4,2),(38,7,2),(25,5,2),(37,7,2),(21,4,2),(19,3,2),(5,1,1);
449 INSERT INTO t1 values (179,5,2);
450 update t1 set parent_id=parent_id+100;
451 select * from t1 where parent_id=102;
452 update t1 set
id=
id+1000;
453 update t1 set
id=1024 where
id=1009;
455 update ignore t1 set
id=
id+1;
# This will change all rows
457 update ignore t1
set id=1023 where
id=1010;
458 select * from t1 where parent_id=102;
460 explain select level from t1 where level=1;
461 select
level,
id from t1 where level=1;
462 select
level,
id,parent_id from t1 where level=1;
463 select
level,
id from t1 where level=1 order by
id;
464 delete from t1 where level=1;
469 # Test of index only reads
471 eval CREATE
TABLE t1 (
472 sca_code
char(6) NOT NULL,
473 cat_code
char(6) NOT NULL,
474 sca_desc varchar(50),
475 lan_code
char(2) NOT NULL,
476 sca_pic varchar(100),
477 sca_sdesc varchar(50),
478 sca_sch_desc varchar(16),
479 PRIMARY KEY (sca_code, cat_code, lan_code),
480 INDEX sca_pic (sca_pic)
481 ) engine = $engine_type ;
483 INSERT INTO t1 ( sca_code, cat_code, sca_desc, lan_code, sca_pic, sca_sdesc, sca_sch_desc) VALUES ( 'PD', 'J', 'PENDANT', 'EN', NULL, NULL, 'PENDANT'),( 'RI', 'J', 'RING', 'EN', NULL, NULL, 'RING'),( 'QQ', 'N', 'RING', 'EN', 'not null', NULL, 'RING');
484 select count(*) from t1 where sca_code = 'PD';
485 select count(*) from t1 where sca_code <= 'PD';
486 select count(*) from t1 where sca_pic is null;
487 alter
table t1 drop
index sca_pic, add
index sca_pic (cat_code, sca_pic);
488 select count(*) from t1 where sca_code='PD' and sca_pic is null;
489 select count(*) from t1 where cat_code='
E';
492 select count(*) from t1 where sca_code='PD' and sca_pic is null;
493 select count(*) from t1 where sca_pic >= 'n';
494 select sca_pic from t1 where sca_pic is null;
495 update t1 set sca_pic="
test" where sca_pic is null;
496 delete from t1 where sca_code='pd';
500 # Test of opening table twice and timestamps
503 eval CREATE
TABLE t1 (a
int not null, b timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, primary key (a)) engine=$engine_type;
504 insert into t1 (a) values(1),(2),(3);
505 select t1.a from t1 natural join t1 as t2 where t1.b >= @a order by t1.a;
506 select a from t1 natural join t1 as t2 where b >= @a order by a;
507 update t1 set a=5 where a=1;
512 # Test with variable length primary key
514 eval create
table t1 (a varchar(100) not null, primary key(a), b
int not null) engine=$engine_type;
515 insert into t1 values(
"hello",1),(
"world",2);
516 select * from t1 order by b desc;
523 # Test of create index with NULL columns
525 eval create
table t1 (
i int, j
int ) ENGINE=$engine_type;
526 insert into t1 values (1,2);
527 select * from t1 where
i=1 and j=2;
528 create
index ax1 on t1 (i,j);
529 select * from t1 where i=1 and j=2;
533 # Test min-max optimization
536 eval CREATE
TABLE t1 (
537 a int3
unsigned NOT NULL,
538 b int1
unsigned NOT NULL,
540 ) ENGINE = $engine_type;
542 INSERT INTO t1 VALUES (1, 1);
543 SELECT MIN(B),MAX(b) FROM t1 WHERE t1.a = 1;
547 # Test INSERT DELAYED
550 eval CREATE
TABLE t1 (a
int unsigned NOT NULL) engine=$engine_type;
551 # Can't test this in 3.23
552 # INSERT DELAYED INTO t1 VALUES (1);
553 INSERT INTO t1 VALUES (1);
559 # Crash when using many tables (Test case by Jeremy D Zawodny)
562 eval create
table t1 (a
int primary key,b
int, c
int, d
int, e
int, f
int, g
int, h
int, i
int, j
int, k
int, l
int, m
int, n
int, o
int, p
int, q
int, r
int, s
int, t
int, u
int, v
int, w
int, x
int, y
int, z
int, a1
int, a2
int, a3
int, a4
int, a5
int, a6
int, a7
int, a8
int, a9
int, b1
int, b2
int, b3
int, b4
int, b5
int, b6
int) engine = $engine_type;
563 insert into t1 values (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
565 explain select * from t1 where a > 0 and a < 50;
572 eval create
table t1 (
id int NOT NULL,id2
int NOT NULL,id3
int NOT NULL,dummy1
char(30),primary key (
id,id2),
index index_id3 (id3)) engine=$engine_type;
573 insert into t1 values (0,0,0,'ABCDEFGHIJ'),(2,2,2,'BCDEFGHIJK'),(1,1,1,'CDEFGHIJKL');
574 LOCK TABLES t1 WRITE;
576 insert into t1 values (99,1,2,'D'),(1,1,2,'D');
582 eval create
table t1 (
id int NOT NULL,id2
int NOT NULL,id3
int NOT NULL,dummy1
char(30),primary key (
id,id2),
index index_id3 (id3)) engine=$engine_type;
583 insert into t1 values (0,0,0,'ABCDEFGHIJ'),(2,2,2,'BCDEFGHIJK'),(1,1,1,'CDEFGHIJKL');
584 LOCK TABLES t1 WRITE;
587 insert into t1 values (99,1,2,'D'),(1,1,2,'D');
589 insert ignore into t1 values (100,1,2,'D'),(1,1,99,'D');
591 select
id,id3 from t1;
598 eval create
table t1 (a
char(20), unique (a(5))) engine=$engine_type;
600 eval create
table t1 (a
char(20),
index (a(5))) engine=$engine_type;
601 show create
table t1;
605 # Test using temporary table and auto_increment
608 eval create temporary
table t1 (a
int not null auto_increment, primary key(a)) engine=$engine_type;
609 insert into t1 values (NULL),(NULL),(NULL);
610 delete from t1 where a=3;
611 insert into t1 values (NULL);
613 alter
table t1 add b
int;
620 id int auto_increment primary key,
621 name varchar(32) not null,
625 ) engine=$engine_type;
626 insert into t1 values (1,'one','one value',101),
627 (2,'two','two value',102),(3,'three','three value',103);
629 replace into t1 (value,
name,uid) values ('other value','two',102);
630 delete from t1 where uid=102;
632 replace into t1 (value,name,uid) values ('other value','two',102);
634 replace into t1 (value,name,uid) values ('other value','two',102);
642 # Check that the creation of a table with engine = $engine_type does
643 # in a certain database (already containing some tables using other
644 # storage engines) not prevent the dropping of this database.
646 create database mysqltest;
647 eval create
table mysqltest.t1 (a
int not null) engine= $engine_type;
648 insert into mysqltest.t1 values(1);
649 eval create
table mysqltest.t2 (a
int not null) engine= $other_engine_type;
650 insert into mysqltest.t2 values(1);
651 eval create
table mysqltest.t3 (a
int not null) engine= $other_engine_type1;
652 insert into mysqltest.t3 values(1);
654 drop database mysqltest;
655 # Don't check error message
657 show tables from mysqltest;
660 # Test truncate table with and without auto_commit
664 eval create
table t1 (a
int not null) engine= $engine_type;
665 insert into t1 values(1),(2);
671 insert into t1 values(1),(2);
678 eval create
table t1 (a
int not null) engine= $engine_type;
679 insert into t1 values(1),(2);
681 insert into t1 values(1),(2);
684 insert into t1 values(1),(2);
690 # Test of how ORDER BY works when doing it on the whole table
693 eval create
table t1 (a
int not null, b
int not null, c
int not null, primary key (a),key(b)) engine=$engine_type;
694 insert into t1 values (3,3,3),(1,1,1),(2,2,2),(4,4,4);
696 explain select * from t1 order by a;
698 explain select * from t1 order by b;
700 explain select * from t1 order by c;
702 explain select a from t1 order by a;
704 explain select b from t1 order by b;
706 explain select a,b from t1 order by b;
708 explain select a,b from t1;
710 explain select a,b,c from t1;
717 eval create
table t1 (t
int not null
default 1, key (t)) engine=$engine_type;
722 # Test of multi-table-delete
725 eval CREATE
TABLE t1 (
726 number bigint(20) NOT NULL
default '0',
727 cname
char(15) NOT NULL
default '',
728 carrier_id smallint(6) NOT NULL
default '0',
729 privacy tinyint(4) NOT NULL
default '0',
730 last_mod_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
731 last_mod_id smallint(6) NOT NULL
default '0',
732 last_app_date timestamp NOT NULL DEFAULT
'0000-00-00 00:00:00',
733 last_app_id smallint(6)
default '-1',
734 version smallint(6) NOT NULL
default '0',
735 assigned_scps
int(11)
default '0',
736 status tinyint(4)
default '0'
737 ) ENGINE=$engine_type;
738 INSERT INTO t1 VALUES (4077711111,'SeanWheeler',90,2,20020111112846,500,00000000000000,-1,2,3,1);
739 INSERT INTO t1 VALUES (9197722223,'berry',90,3,20020111112809,500,20020102114532,501,4,10,0);
740 INSERT INTO t1 VALUES (650,'San Francisco',0,0,20011227111336,342,00000000000000,-1,1,24,1);
741 INSERT INTO t1 VALUES (302467,'Sue\'s Subshop',90,3,20020109113241,500,20020102115111,501,7,24,0);
742 INSERT INTO t1 VALUES (6014911113,'SudzCarwash',520,1,20020102115234,500,20020102115259,501,33,32768,0);
743 INSERT INTO t1 VALUES (333,'tubs',99,2,20020109113440,501,20020109113440,500,3,10,0);
744 eval CREATE
TABLE t2 (
745 number bigint(20) NOT NULL default '0',
746 cname
char(15) NOT NULL default '',
747 carrier_id smallint(6) NOT NULL default '0',
748 privacy tinyint(4) NOT NULL default '0',
749 last_mod_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
750 last_mod_id smallint(6) NOT NULL default '0',
751 last_app_date timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
752 last_app_id smallint(6) default '-1',
753 version smallint(6) NOT NULL default '0',
754 assigned_scps
int(11) default '0',
755 status tinyint(4) default '0'
756 ) ENGINE=$engine_type;
757 INSERT INTO t2 VALUES (4077711111,'SeanWheeler',0,2,20020111112853,500,00000000000000,-1,2,3,1);
758 INSERT INTO t2 VALUES (9197722223,'berry',90,3,20020111112818,500,20020102114532,501,4,10,0);
759 INSERT INTO t2 VALUES (650,'San Francisco',90,0,20020109113158,342,00000000000000,-1,1,24,1);
760 INSERT INTO t2 VALUES (333,'tubs',99,2,20020109113453,501,20020109113453,500,3,10,0);
763 delete t1, t2 from t1 left join t2 on t1.number=t2.number where (t1.carrier_id=90 and t1.number=t2.number) or (t2.carrier_id=90 and t1.number=t2.number) or (t1.carrier_id=90 and t2.number is null);
770 # A simple test with some isolation levels
771 # TODO: Make this into a test using replication to really test how
775 eval create
table t1 (
id int unsigned not null auto_increment, code tinyint
unsigned not null, name
char(20) not null, primary key (
id), key (code), unique (name)) engine=$engine_type;
778 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
779 SELECT @@tx_isolation,@@global.tx_isolation;
780 insert into t1 (code, name) values (1, 'Tim'), (1, 'Monty'), (2, 'David');
781 select
id, code, name from t1 order by
id;
785 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
786 insert into t1 (code, name) values (2, 'Erik'), (3, 'Sasha');
787 select
id, code, name from t1 order by
id;
791 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
792 insert into t1 (code, name) values (3, 'Jeremy'), (4, 'Matt');
793 select
id, code, name from t1 order by
id;
798 # Test of multi-table-update
800 eval create
table t1 (n
int(10), d
int(10)) engine=$engine_type;
801 eval create
table t2 (n
int(10), d
int(10)) engine=$engine_type;
802 insert into t1 values(1,1),(1,2);
803 insert into t2 values(1,10),(2,20);
804 UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
812 eval create
table t1 (a
int, b
int) engine=$engine_type;
813 insert into t1 values(20,null);
814 select t2.b, ifnull(t2.b,
"this is null") from t1 as t2 left join t1 as t3 on
816 select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
817 t2.b=t3.a order by 1;
818 insert into t1 values(10,null);
819 select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
820 t2.b=t3.a order by 1;
824 # Test of read_through not existing const_table
827 eval create
table t1 (a varchar(10) not null) engine = $other_engine_type;
828 eval create
table t2 (b varchar(10) not null unique) engine=$engine_type;
829 select t1.a from t1,t2 where t1.a=t2.b;
831 eval create
table t1 (a
int not null, b
int, primary key (a)) engine = $engine_type;
832 eval create
table t2 (a
int not null, b
int, primary key (a)) engine = $engine_type;
833 insert into t1 values (10, 20);
834 insert into t2 values (10, 20);
835 update t1, t2 set t1.b = 150, t2.b = t1.b where t2.a = t1.a and t1.a = 10;
838 if ($test_foreign_keys)
841 # Test of multi-table-delete with foreign key constraints
844 eval CREATE
TABLE t1 (
id INT NOT NULL, PRIMARY KEY (
id)) ENGINE=$engine_type;
845 eval CREATE
TABLE t2 (
id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id), FOREIGN KEY (t1_id) REFERENCES t1(
id) ON DELETE CASCADE ) ENGINE=$engine_type;
846 insert into t1 set
id=1;
847 insert into t2 set
id=1, t1_id=1;
848 delete t1,t2 from t1,t2 where t1.
id=t2.t1_id;
852 eval CREATE
TABLE t1(
id INT NOT NULL, PRIMARY KEY (
id)) ENGINE=$engine_type;
853 eval CREATE
TABLE t2(
id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id) ) ENGINE=$engine_type;
854 INSERT INTO t1 VALUES(1);
855 INSERT INTO t2 VALUES(1, 1);
857 UPDATE t1,t2 SET t1.
id=t1.
id+1, t2.t1_id=t1.
id+1;
859 UPDATE t1,t2 SET t1.
id=t1.
id+1 where t1.
id!=t2.
id;
864 if ($test_transactions)
867 # Test of range_optimizer
872 eval CREATE
TABLE t1 (
id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(
id)) ENGINE=$engine_type;
874 eval CREATE
TABLE t2 (
id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(
id)) ENGINE=$engine_type;
876 eval CREATE
TABLE t3 (id1 CHAR(15) NOT NULL, id2 CHAR(15) NOT NULL, PRIMARY KEY(id1, id2)) ENGINE=$engine_type;
878 INSERT INTO t3 VALUES("my-
test-1", "my-test-2");
881 INSERT INTO t1 VALUES("this-key", "will disappear");
882 INSERT INTO t2 VALUES("this-key", "will also disappear");
883 DELETE FROM t3 WHERE id1="my-test-1";
893 SELECT * FROM t3 WHERE id1="my-test-1" LOCK IN SHARE MODE;
900 # Check update with conflicting key
903 eval CREATE
TABLE t1 (a
int not null primary key, b
int not null, unique (b)) engine=$engine_type;
904 INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
905 # We need the a < 1000 test here to quard against the halloween problems
906 UPDATE t1
set a=a+100 where b between 2 and 3 and a < 1000;
911 # Test multi update with different join methods
914 eval CREATE
TABLE t1 (a
int not null primary key, b
int not null, key (b)) engine=$engine_type;
915 eval CREATE
TABLE t2 (a
int not null primary key, b
int not null, key (b)) engine=$engine_type;
916 INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11),(12,12);
917 INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
919 # Full join, without key
920 update t1,t2
set t1.a=t1.a+100;
924 update t1,t2
set t1.a=t1.a+100 where t1.a=101;
928 update t1,t2
set t1.b=t1.b+10 where t1.b=2;
932 update t1,t2
set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t1.a=t2.a+100;
937 eval CREATE
TABLE t2 ( NEXT_T BIGINT NOT NULL PRIMARY KEY) ENGINE=$other_non_trans_engine_type;
938 eval CREATE
TABLE t1 ( B_ID INTEGER NOT NULL PRIMARY KEY) ENGINE=$engine_type;
940 INSERT INTO t1 ( B_ID ) VALUES ( 1 );
941 INSERT INTO t2 ( NEXT_T ) VALUES ( 1 );
945 eval create
table t1 ( pk
int primary key, parent
int not null, child
int not null,
index (parent) ) engine = $engine_type;
946 insert into t1 values (1,0,4), (2,1,3), (3,2,1), (4,1,2);
947 select distinct parent,child from t1 order by parent;
951 # Test that MySQL priorities clustered indexes
953 eval create
table t1 (a
int not null auto_increment primary key, b
int, c
int, key(c)) engine=$engine_type;
954 eval create
table t2 (a
int not null auto_increment primary key, b
int) ENGINE = $other_engine_type;
955 insert into t1 (b) values (null),(null),(null),(null),(null),(null),(null);
956 insert into t2 (a) select b from t1;
957 insert into t1 (b) select b from t2;
958 insert into t2 (a) select b from t1;
959 insert into t1 (a) select b from t2;
960 insert into t2 (a) select b from t1;
961 insert into t1 (a) select b from t2;
962 insert into t2 (a) select b from t1;
963 insert into t1 (a) select b from t2;
964 insert into t2 (a) select b from t1;
965 insert into t1 (a) select b from t2;
966 insert into t2 (a) select b from t1;
967 insert into t1 (a) select b from t2;
968 insert into t2 (a) select b from t1;
969 insert into t1 (a) select b from t2;
970 insert into t2 (a) select b from t1;
971 insert into t1 (a) select b from t2;
972 insert into t2 (a) select b from t1;
973 insert into t1 (a) select b from t2;
974 select count(*) from t1;
976 explain select * from t1 where c between 1 and 2500;
979 explain select * from t1 where c between 1 and 2500;
983 # Test of UPDATE ... ORDER BY
986 eval create
table t1 (
id int primary key auto_increment, fk
int,
index index_fk (fk)) engine=$engine_type;
988 insert into t1 (
id) values (null),(null),(null),(null),(null);
989 update t1 set fk=69 where fk is null order by
id limit 1;
993 eval create
table t1 (a
int not null, b
int not null, key (a)) engine=$engine_type;
994 insert into t1 values (1,1),(1,2),(1,3),(3,1),(3,2),(3,3),(3,1),(3,2),(3,3),(2,1),(2,2),(2,3);
996 update t1 set b=(@tmp:=@tmp+1) order by a;
997 update t1 set b=99 where a=1 order by b asc limit 1;
998 update t1 set b=100 where a=1 order by b desc limit 2;
999 update t1 set a=a+10+b where a=1 order by b;
1000 select * from t1 order by a,b;
1004 # Test of multi-table-updates (bug #1980).
1007 eval create
table t1 ( c
char(8) not null ) engine=$engine_type;
1008 insert into t1 values (
'0'),(
'1'),(
'2'),(
'3'),(
'4'),(
'5'),(
'6'),(
'7'),(
'8'),(
'9');
1009 insert into t1 values (
'A'),(
'B'),(
'C'),(
'D'),(
'E'),(
'F');
1011 alter
table t1 add b char(8) not null;
1012 alter
table t1 add a
char(8) not null;
1013 alter
table t1 add primary key (a,b,c);
1014 update t1 set a=c, b=c;
1016 eval create
table t2 (c
char(8) not null, b
char(8) not null, a
char(8) not null, primary key(a,b,c)) engine=$engine_type;
1017 insert into t2 select * from t1;
1019 delete t1,t2 from t2,t1 where t1.a<'B' and t2.b=t1.b;
1023 # test autoincrement with TRUNCATE
1027 eval create
table t1 (a integer auto_increment primary key) engine=$engine_type;
1028 insert into t1 (a) values (NULL),(NULL);
1030 insert into t1 (a) values (NULL),(NULL);
1035 if ($test_foreign_keys)
1038 # Test dictionary handling with spaceand quoting
1041 eval CREATE
TABLE t1 (`
id 1` INT NOT NULL, PRIMARY KEY (`
id 1`)) ENGINE=$engine_type;
1042 eval CREATE
TABLE t2 (
id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id), FOREIGN KEY (`t1_id`) REFERENCES `t1`(`
id 1`) ON DELETE CASCADE ) ENGINE=$engine_type;
1043 #show create table t2;
1047 # Test of multi updated and foreign keys
1050 eval create
table `t1` (`
id` int( 11 ) not null ,primary key ( `
id` )) engine = $engine_type;
1051 insert into `t1`values ( 1 ) ;
1052 eval create
table `t2` (`
id`
int( 11 ) not null default '0',unique key `
id` ( `
id` ) ,constraint `t1_id_fk` foreign key ( `
id` ) references `t1` (`
id` )) engine = $engine_type;
1053 insert into `t2`values ( 1 ) ;
1054 eval create
table `t3` (`
id`
int( 11 ) not null default '0',key `
id` ( `
id` ) ,constraint `t2_id_fk` foreign key ( `
id` ) references `t2` (`
id` )) engine = $engine_type;
1055 insert into `t3`values ( 1 ) ;
1057 delete t3,t2,t1 from t1,t2,t3 where t1.
id =1 and t2.
id = t1.
id and t3.
id = t2.
id;
1059 update t1,t2,t3 set t3.
id=5, t2.
id=6, t1.
id=7 where t1.
id =1 and t2.
id = t1.
id and t3.
id = t2.
id;
1061 update t3 set t3.
id=7 where t1.
id =1 and t2.
id = t1.
id and t3.
id = t2.
id;
1062 drop
table t3,t2,t1;
1065 # test for recursion depth limit
1067 eval create
table t1(
1071 foreign key(pid) references t1(
id) on
delete cascade) engine=$engine_type;
1072 insert into t1 values(0,0),(1,0),(2,1),(3,2),(4,3),(5,4),(6,5),(7,6),
1073 (8,7),(9,8),(10,9),(11,10),(12,11),(13,12),(14,13),(15,14);
1075 delete from t1 where
id=0;
1076 delete from t1 where
id=15;
1077 delete from t1 where
id=0;
1081 # End of FOREIGN KEY tests
1087 eval CREATE
TABLE t1 (col1
int(1))ENGINE=$engine_type;
1088 eval CREATE
TABLE t2 (col1
int(1),stamp TIMESTAMP,INDEX stamp_idx
1089 (stamp))ENGINE=$engine_type;
1090 insert into t1 values (1),(2),(3);
1091 # Note that timestamp 3 is wrong
1092 insert into t2 values (1, 20020204130000),(2, 20020204130000),(4,20020204310000 ),(5,20020204230000);
1093 SELECT col1 FROM t1 UNION SELECT col1 FROM t2 WHERE stamp <
1094 '20020204120000' GROUP BY col1;
1098 # Test by Francois MASUREL
1101 eval CREATE
TABLE t1 (
1102 `
id`
int(10)
unsigned NOT NULL auto_increment,
1103 `id_object`
int(10)
unsigned default '0',
1104 `id_version`
int(10)
unsigned NOT NULL
default '1',
1105 `label` varchar(100) NOT NULL
default '',
1108 KEY `id_object` (`id_object`),
1109 KEY `id_version` (`id_version`)
1110 ) ENGINE=$engine_type;
1112 INSERT INTO t1 VALUES("6", "3382", "9", "
Test", NULL), ("7", "102", "5", "Le Pekin (Test)", NULL),("584", "1794", "4", "Test de resto", NULL),("837", "1822", "6", "Test 3", NULL),("1119", "3524", "1", "Societe Test", NULL),("1122", "3525", "1", "Fournisseur Test", NULL);
1114 eval CREATE
TABLE t2 (
1115 `
id`
int(10)
unsigned NOT NULL auto_increment,
1116 `id_version`
int(10)
unsigned NOT NULL default '1',
1118 KEY `id_version` (`id_version`)
1119 ) ENGINE=$engine_type;
1121 INSERT INTO t2 VALUES("3524", "1"),("3525", "1"),("1794", "4"),("102", "5"),("1822", "6"),("3382", "9");
1123 SELECT t2.
id, t1.`label` FROM t2 INNER
JOIN
1124 (SELECT t1.id_object as id_object FROM t1 WHERE t1.`label` LIKE '%test%') AS lbl
1125 ON (t2.
id = lbl.id_object) INNER
JOIN t1 ON (t2.
id = t1.id_object);
1128 # Live checksum feature available + enabled
1129 eval create
table t1 (a
int, b varchar(200), c text not null) checksum=1 engine=$other_live_chks_engine_type;
1130 # Live checksum feature available + disabled
1131 eval create
table t2 (a
int, b varchar(200), c text not null) checksum=0 engine=$other_live_chks_engine_type;
1133 # Live checksum feature not available + enabled
1134 eval create
table t3 (a
int, b varchar(200), c varchar(200) not null) checksum=1 engine=$other_non_live_chks_engine_type;
1135 # Live checksum feature not available + disabled
1136 eval create
table t4 (a
int, b varchar(200), c varchar(200) not null) checksum=0 engine=$other_non_live_chks_engine_type;
1138 # Live checksum feature probably available + enabled
1139 eval create
table t5 (a
int, b varchar(200), c text not null) checksum=1 engine=$engine_type;
1140 # Live checksum feature probably available + disabled
1141 eval create
table t6 (a
int, b varchar(200), c text not null) checksum=0 engine=$engine_type;
1143 insert t1 values (1,
"aaa",
"bbb"), (NULL,
"",
"ccccc"), (0, NULL,
"");
1144 insert t2 select * from t1;
1145 insert t3 select * from t1;
1146 insert t4 select * from t1;
1147 insert t5 select * from t1;
1148 insert t6 select * from t1;
1149 checksum
table t1, t2, t3, t4, t5, t6, t7 quick;
1150 checksum
table t1, t2, t3, t4, t5, t6, t7;
1151 checksum
table t1, t2, t3, t4, t5, t6, t7 extended;
1152 # #show table status;
1153 drop
table t1,t2,t3, t4, t5, t6;
1156 # Test problem with refering to different fields in same table in UNION
1157 # (Bug#2552: UNION returns NULL instead of expected value (innoDB only tables))
1159 eval create
table t1 (
id int, name
char(10) not null, name2
char(10) not null) engine=$engine_type;
1160 insert into t1 values(1,
'first',
'fff'),(2,
'second',
'sss'),(3,
'third',
'ttt');
1161 select trim(name2) from t1 union all select trim(name) from t1 union all select trim(
id) from t1;
1165 # Bug#2160: Extra error message for CREATE TABLE LIKE with InnoDB
1167 eval create
table t1 (a
int) engine=$engine_type;
1168 create
table t2 like t1;
1169 show create
table t2;
1172 if ($test_foreign_keys)
1175 # Test of automaticly created foreign keys
1178 eval create
table t1 (
id int(11) not null, id2
int(11) not null, unique (
id,id2)) engine=$engine_type;
1179 eval create
table t2 (
id int(11) not null, constraint t1_id_fk foreign key (
id ) references t1 (
id)) engine = $engine_type;
1180 show create
table t1;
1181 show create
table t2;
1182 create
index id on t2 (
id);
1183 show create
table t2;
1184 create
index id2 on t2 (
id);
1185 show create
table t2;
1186 drop
index id2 on t2;
1188 drop
index id on t2;
1189 show create
table t2;
1192 eval create
table t2 (
id int(11) not null, id2
int(11) not null, constraint t1_id_fk foreign key (
id,id2) references t1 (
id,id2)) engine = $engine_type;
1193 show create
table t2;
1194 create unique
index id on t2 (
id,id2);
1195 show create
table t2;
1198 # Check foreign key columns created in different order than key columns
1199 eval create
table t2 (
id int(11) not null, id2
int(11) not null, unique (
id,id2),constraint t1_id_fk foreign key (id2,
id) references t1 (
id,id2)) engine = $engine_type;
1200 show create
table t2;
1203 eval create
table t2 (
id int(11) not null, id2
int(11) not null, unique (
id,id2), constraint t1_id_fk foreign key (
id) references t1 (
id)) engine = $engine_type;
1204 show create
table t2;
1207 eval create
table t2 (
id int(11) not null, id2
int(11) not null, unique (
id,id2),constraint t1_id_fk foreign key (id2,
id) references t1 (
id,id2)) engine = $engine_type;
1208 show create
table t2;
1211 eval create
table t2 (
id int(11) not null auto_increment, id2
int(11) not null, constraint t1_id_fk foreign key (
id) references t1 (
id), primary key (
id),
index (
id,id2)) engine = $engine_type;
1212 show create
table t2;
1215 eval create
table t2 (
id int(11) not null auto_increment, id2
int(11) not null, constraint t1_id_fk foreign key (
id) references t1 (
id)) engine= $engine_type;
1216 show create
table t2;
1218 show create
table t2;
1221 # Test error handling
1223 # Clean up filename -- embedded server reports whole path without .frm,
1224 # regular server reports relative path with .frm (argh!)
1225 --replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / t2.frm t2
1227 eval create
table t2 (
id int(11) not null, id2
int(11) not null, constraint t1_id_fk foreign key (id2,
id) references t1 (
id)) engine = $engine_type;
1231 eval create
table t2 (a
int auto_increment primary key, b
int,
index(b), foreign key (b) references t1(
id), unique(b)) engine=$engine_type;
1232 show create
table t2;
1234 eval create
table t2 (a
int auto_increment primary key, b
int, foreign key (b) references t1(
id), foreign key (b) references t1(
id), unique(b)) engine=$engine_type;
1235 show create
table t2;
1238 # End of FOREIGN KEY tests
1242 # Let us test binlog_cache_use and binlog_cache_disk_use status vars.
1243 # Actually this test has nothing to do with innodb per se, it just requires
1244 # transactional table.
1247 show status like
"binlog_cache_use";
1248 show status like
"binlog_cache_disk_use";
1250 eval create
table t1 (a
int) engine=$engine_type;
1252 # Now we are going to create transaction which is long enough so its
1253 # transaction binlog will be flushed to disk...
1259 eval insert into t1 values( $1 );
1264 show status like
"binlog_cache_use";
1265 show status like
"binlog_cache_disk_use";
1267 # Transaction which should not be flushed to disk and so should not
1268 # increase binlog_cache_disk_use.
1272 show status like
"binlog_cache_use";
1273 show status like
"binlog_cache_disk_use";
1277 # Bug #6126: Duplicate columns in keys gives misleading error message
1280 eval create
table t1 (c
char(10),
index (c,c)) engine=$engine_type;
1282 eval create
table t1 (c1
char(10), c2
char(10),
index (c1,c2,c1)) engine=$engine_type;
1284 eval create
table t1 (c1
char(10), c2
char(10),
index (c1,c1,c2)) engine=$engine_type;
1286 eval create
table t1 (c1
char(10), c2
char(10),
index (c2,c1,c1)) engine=$engine_type;
1287 eval create
table t1 (c1
char(10), c2
char(10)) engine=$engine_type;
1289 alter
table t1 add key (c1,c1);
1291 alter
table t1 add key (c2,c1,c1);
1293 alter
table t1 add key (c1,c2,c1);
1295 alter
table t1 add key (c1,c1,c2);
1299 # Bug #4082: integer truncation
1302 eval create
table t1(a
int(1) , b
int(1)) engine=$engine_type;
1303 insert into t1 values ('1111', '3333');
1304 select distinct concat(a, b) from t1;
1307 if ($fulltext_query_unsupported)
1310 # BUG#7709 test case - Boolean fulltext query against unsupported
1311 # engines does not fail
1314 eval CREATE
TABLE t1 ( a
char(10) ) ENGINE=$engine_type;
1316 SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE);
1320 if ($test_foreign_keys)
1323 # check null values #1
1327 eval CREATE
TABLE t1 (a_id tinyint(4) NOT NULL
default '0', PRIMARY KEY (a_id)) ENGINE=$engine_type DEFAULT CHARSET=latin1;
1328 INSERT INTO t1 VALUES (1),(2),(3);
1329 eval CREATE
TABLE t2 (b_id tinyint(4) NOT NULL default '0',b_a tinyint(4) NOT NULL default '0', PRIMARY KEY (b_id), KEY (b_a),
1330 CONSTRAINT fk_b_a FOREIGN KEY (b_a) REFERENCES t1 (a_id) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE=$engine_type DEFAULT CHARSET=latin1;
1332 INSERT INTO t2 VALUES (1,1),(2,1),(3,1),(4,2),(5,2);
1333 SELECT * FROM (SELECT t1.*,GROUP_CONCAT(t2.b_id SEPARATOR ',') as b_list FROM (t1 LEFT
JOIN (t2) on t1.a_id = t2.b_a) GROUP BY t1.a_id ) AS xyz;
1339 # Bug#11816 - Truncate table doesn't work with temporary innodb tables
1340 # This is not an innodb bug, but we test it using innodb.
1342 eval create temporary
table t1 (a
int) engine=$engine_type;
1343 insert into t1 values (4711);
1345 insert into t1 values (42);
1348 # Show that it works with permanent tables too.
1349 eval create
table t1 (a
int) engine=$engine_type;
1350 insert into t1 values (4711);
1352 insert into t1 values (42);
1357 # Bug #13025 Server crash during filesort
1360 eval create
table t1 (a
int not null, b
int not null, c blob not null, d
int not null, e
int, primary key (a,b,c(255),d)) engine=$engine_type;
1361 insert into t1 values (2,2,"b",2,2),(1,1,"a",1,1),(3,3,"ab",3,3);
1362 -- disable_query_log
1363 -- disable_result_log
1365 -- enable_result_log
1367 select * from t1 order by a,b,c,d;
1368 explain select * from t1 order by a,b,c,d;
1372 # BUG#11039,#13218 Wrong key length in min()
1375 eval create
table t1 (a
char(1), b
char(1), key(a, b)) engine=$engine_type;
1376 insert into t1 values ('8', '6'), ('4', '7');
1377 select min(a) from t1;
1378 select min(b) from t1 where a='8';
1384 # range optimizer problem
1387 eval create
table t1 (x bigint
unsigned not null primary key) engine=$engine_type;
1388 insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1);
1390 select count(*) from t1 where x>0;
1391 select count(*) from t1 where x=0;
1392 select count(*) from t1 where x<0;
1393 select count(*) from t1 where x < -16;
1394 select count(*) from t1 where x = -16;
1395 explain select count(*) from t1 where x > -16;
1396 select count(*) from t1 where x > -16;
1397 select * from t1 where x > -16;
1398 select count(*) from t1 where x = 18446744073709551601;
1401 # Please do not remove the following skipped InnoDB specific tests.
1402 # They make the synchronization with innodb.test easier and give
1403 # an idea what to test on other storage engines.
1407 # Test for testable InnoDB status variables. This test
1408 # uses previous ones(pages_created, rows_deleted, ...).
1409 show status like
"Innodb_buffer_pool_pages_total";
1410 show status like
"Innodb_page_size";
1411 show status like
"Innodb_rows_deleted";
1412 show status like
"Innodb_rows_inserted";
1413 show status like
"Innodb_rows_updated";
1415 # Test for row locks InnoDB status variables.
1416 show status like
"Innodb_row_lock_waits";
1417 show status like
"Innodb_row_lock_current_waits";
1418 show status like
"Innodb_row_lock_time";
1419 show status like
"Innodb_row_lock_time_max";
1420 show status like
"Innodb_row_lock_time_avg";
1422 # Test for innodb_sync_spin_loops variable
1423 show variables like
"innodb_sync_spin_loops";
1424 set global innodb_sync_spin_loops=1000;
1425 show variables like
"innodb_sync_spin_loops";
1426 set global innodb_sync_spin_loops=0;
1427 show variables like
"innodb_sync_spin_loops";
1428 set global innodb_sync_spin_loops=20;
1429 show variables like
"innodb_sync_spin_loops";
1431 # Test for innodb_thread_concurrency variable
1432 show variables like
"innodb_thread_concurrency";
1433 set global innodb_thread_concurrency=1001;
1434 show variables like
"innodb_thread_concurrency";
1435 set global innodb_thread_concurrency=0;
1436 show variables like
"innodb_thread_concurrency";
1437 set global innodb_thread_concurrency=16;
1438 show variables like
"innodb_thread_concurrency";
1440 # Test for innodb_concurrency_tickets variable
1441 show variables like
"innodb_concurrency_tickets";
1442 set global innodb_concurrency_tickets=1000;
1443 show variables like
"innodb_concurrency_tickets";
1444 set global innodb_concurrency_tickets=0;
1445 show variables like
"innodb_concurrency_tickets";
1446 set global innodb_concurrency_tickets=500;
1447 show variables like
"innodb_concurrency_tickets";
1449 # Test for innodb_thread_sleep_delay variable
1450 show variables like
"innodb_thread_sleep_delay";
1451 set global innodb_thread_sleep_delay=100000;
1452 show variables like
"innodb_thread_sleep_delay";
1453 set global innodb_thread_sleep_delay=0;
1454 show variables like
"innodb_thread_sleep_delay";
1455 set global innodb_thread_sleep_delay=10000;
1456 show variables like
"innodb_thread_sleep_delay";
1465 let $default=`select @@default_storage_engine`;
1466 eval
set default_storage_engine=$engine_type;
1467 source include/varchar.inc;
1470 # Some errors/warnings on create
1473 # Clean up filename -- embedded server reports whole path without .frm,
1474 # regular server reports relative path with .frm (argh!)
1475 --replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / t1.frm t1
1476 create
table t1 (v varchar(65530), key(v));
1478 create
table t1 (v varchar(65536));
1479 show create
table t1;
1481 create
table t1 (v varchar(65530) character
set utf8);
1482 show create
table t1;
1485 eval
set default_storage_engine=$default;
1487 # InnoDB specific varchar tests
1488 eval create
table t1 (v varchar(16384)) engine=$engine_type;
1492 # BUG#11039 Wrong key length in min()
1495 eval create
table t1 (a
char(1), b
char(1), key(a, b)) engine=$engine_type;
1496 insert into t1 values ('8', '6'), ('4', '7');
1497 select min(a) from t1;
1498 select min(b) from t1 where a='8';
1502 # Bug #11080 & #11005 Multi-row REPLACE fails on a duplicate key error
1505 eval CREATE
TABLE t1 ( `a`
int(11) NOT NULL auto_increment, `b`
int(11)
default NULL,PRIMARY KEY (`a`),UNIQUE KEY `b` (`b`)) ENGINE=$engine_type;
1506 insert into t1 (b) values (1);
1507 replace into t1 (b) values (2), (1), (3);
1510 insert into t1 (b) values (1);
1511 replace into t1 (b) values (2);
1512 replace into t1 (b) values (1);
1513 replace into t1 (b) values (3);
1517 eval create
table t1 (rowid
int not null auto_increment, val
int not null,primary
1518 key (rowid), unique(val)) engine=$engine_type;
1519 replace into t1 (val) values ('1'),('2');
1520 replace into t1 (val) values ('1'),('2');
1521 --error ER_DUP_ENTRY
1522 insert into t1 (val) values ('1'),('2');
1526 if ($no_autoinc_update)
1529 # Test that update does not change internal auto-increment value
1532 eval create
table t1 (a
int not null auto_increment primary key, val
int) engine=$engine_type;
1533 insert into t1 (val) values (1);
1534 update t1 set a=2 where a=1;
1535 # We should get the following error because InnoDB does not update the counter
1536 --error ER_DUP_ENTRY
1537 insert into t1 (val) values (1);
1544 # Bug#10465: DECIMAL, crash on DELETE (InnoDB only)
1548 eval CREATE
TABLE t1 (GRADE DECIMAL(4) NOT NULL, PRIMARY KEY (GRADE)) ENGINE=$engine_type;
1550 INSERT INTO t1 (GRADE) VALUES (151),(252),(343);
1551 SELECT GRADE FROM t1 WHERE GRADE > 160 AND GRADE < 300;
1552 SELECT GRADE FROM t1 WHERE GRADE= 151;
1556 # Bug #12340 multitable delete deletes only one record
1558 eval create
table t1 (f1 varchar(10), f2 varchar(10), primary key (f1,f2)) engine=$engine_type;
1559 eval create
table t2 (f3 varchar(10), f4 varchar(10), key (f4)) engine=$engine_type;
1560 insert into t2 values ('aa','cc');
1561 insert into t1 values ('aa','bb'),('aa','cc');
1562 delete t1 from t1,t2 where f1=f3 and f4='cc';
1566 if ($test_foreign_keys)
1569 # Test that the slow TRUNCATE implementation resets autoincrement columns
1573 eval CREATE
TABLE t1 (
1574 id INTEGER NOT NULL AUTO_INCREMENT, PRIMARY KEY (
id)
1575 ) ENGINE=$engine_type;
1577 eval CREATE
TABLE t2 (
1578 id INTEGER NOT NULL,
1579 FOREIGN KEY (
id) REFERENCES t1 (
id)
1580 ) ENGINE=$engine_type;
1582 INSERT INTO t1 (
id) VALUES (NULL);
1585 INSERT INTO t1 (
id) VALUES (NULL);
1588 # continued from above; test that doing a slow TRUNCATE on a table with 0
1589 # rows resets autoincrement columns
1592 INSERT INTO t1 (
id) VALUES (NULL);
1596 # Test that foreign keys in temporary tables are not accepted (bug #12084)
1597 eval CREATE
TABLE t1
1600 ) ENGINE=$engine_type;
1603 eval CREATE TEMPORARY
TABLE t2
1605 id INT NOT NULL PRIMARY KEY,
1607 FOREIGN KEY (b) REFERENCES test.t1(
id)
1608 ) ENGINE=$engine_type;
1611 # End of FOREIGN KEY test
1613 # Please do not remove the following skipped InnoDB specific tests.
1614 # They make the synchronization with innodb.test easier and give
1615 # an idea what to test on other storage engines.
1620 # Test that index column max sizes are honored (bug #13315)
1624 eval create
table t1 (col1 varchar(2000),
index (col1(767)))
1625 character set = latin1 engine = $engine_type;
1628 eval create
table t2 (col1
char(255),
index (col1))
1629 character set = latin1 engine = $engine_type;
1630 eval create
table t3 (col1 binary(255),
index (col1))
1631 character set = latin1 engine = $engine_type;
1632 eval create
table t4 (col1 varchar(767),
index (col1))
1633 character set = latin1 engine = $engine_type;
1634 eval create
table t5 (col1 varchar(767) primary key)
1635 character set = latin1 engine = $engine_type;
1636 eval create
table t6 (col1 varbinary(767) primary key)
1637 character set = latin1 engine = $engine_type;
1638 eval create
table t7 (col1 text,
index(col1(767)))
1639 character set = latin1 engine = $engine_type;
1640 eval create
table t8 (col1 blob,
index(col1(767)))
1641 character set = latin1 engine = $engine_type;
1644 # multi-column indexes are allowed to be longer
1645 eval create
table t9 (col1 varchar(512), col2 varchar(512),
index(col1, col2))
1646 character set = latin1 engine = $engine_type;
1648 show create
table t9;
1650 drop
table t1, t2, t3, t4, t5, t6, t7, t8, t9;
1652 # these should have their index length trimmed
1653 eval create
table t1 (col1 varchar(768),
index(col1))
1654 character set = latin1 engine = $engine_type;
1655 eval create
table t2 (col1 varbinary(768),
index(col1))
1656 character set = latin1 engine = $engine_type;
1657 eval create
table t3 (col1 text,
index(col1(768)))
1658 character set = latin1 engine = $engine_type;
1659 eval create
table t4 (col1 blob,
index(col1(768)))
1660 character set = latin1 engine = $engine_type;
1662 show create
table t1;
1664 drop
table t1, t2, t3, t4;
1667 # End of skipped test
1669 # Please do not remove the following skipped InnoDB specific tests.
1670 # They make the synchronization with innodb.test easier and give
1671 # an idea what to test on other storage engines.
1675 # these should be refused
1677 eval create
table t1 (col1 varchar(768) primary key)
1678 character
set = latin1 engine = $engine_type;
1680 eval create
table t2 (col1 varbinary(768) primary key)
1681 character
set = latin1 engine = $engine_type;
1683 eval create
table t3 (col1 text, primary key(col1(768)))
1684 character set = latin1 engine = $engine_type;
1686 eval create
table t4 (col1 blob, primary key(col1(768)))
1687 character set = latin1 engine = $engine_type;
1691 if ($test_foreign_keys)
1694 # Test improved foreign key error messages (bug #3443)
1697 eval CREATE
TABLE t1
1700 ) ENGINE=$engine_type;
1702 eval CREATE
TABLE t2
1705 CONSTRAINT c1 FOREIGN KEY (v) REFERENCES t1(
id)
1706 ) ENGINE=$engine_type;
1709 INSERT INTO t2 VALUES(2);
1711 INSERT INTO t1 VALUES(1);
1712 INSERT INTO t2 VALUES(1);
1715 DELETE FROM t1 WHERE
id = 1;
1720 SET FOREIGN_KEY_CHECKS=0;
1722 SET FOREIGN_KEY_CHECKS=1;
1725 INSERT INTO t2 VALUES(3);
1729 # End of FOREIGN tests
1731 if ($test_transactions)
1734 # Test that checksum table uses a consistent read Bug #12669
1736 connect (a,localhost,root,,);
1737 connect (b,localhost,root,,);
1739 eval create
table t1(a
int not null) engine=$engine_type DEFAULT CHARSET=latin1;
1740 insert into t1 values (1),(2);
1744 insert into t1 values(3);
1747 # Here checksum should not see insert
1759 eval create
table t1(a
int not null) engine=$engine_type DEFAULT CHARSET=latin1;
1760 insert into t1 values (1),(2);
1765 insert into t1 values(3);
1768 # Here checksum sees insert
1778 # tests for bugs #9802 and #13778
1780 if ($test_foreign_keys)
1782 # test that FKs between invalid types are not accepted
1784 set foreign_key_checks=0;
1785 eval create
table t2 (a
int primary key, b
int, foreign key (b) references t1(a)) engine = $engine_type;
1786 --replace_result $MYSQLTEST_VARDIR . master-data/ ''
1788 eval create
table t1(a
char(10) primary key, b varchar(20)) engine = $engine_type;
1789 set foreign_key_checks=1;
1792 # test that FKs between different charsets are not accepted in CREATE even
1795 set foreign_key_checks=0;
1796 eval create
table t1(a varchar(10) primary key) engine = $engine_type DEFAULT CHARSET=latin1;
1797 --replace_result $MYSQLTEST_VARDIR . master-data/
''
1799 eval create
table t2 (a varchar(10), foreign key (a) references t1(a)) engine = $engine_type DEFAULT CHARSET=utf8;
1800 set foreign_key_checks=1;
1803 # test that invalid datatype conversions with ALTER are not allowed
1805 set foreign_key_checks=0;
1806 eval create
table t2 (a varchar(10), foreign key (a) references t1(a)) engine = $engine_type;
1807 eval create
table t1(a varchar(10) primary key) engine = $engine_type;
1809 alter
table t1 modify column a
int;
1810 set foreign_key_checks=1;
1813 # test that charset conversions with ALTER are allowed when f_k_c is 0
1815 set foreign_key_checks=0;
1816 eval create
table t2 (a varchar(10), foreign key (a) references t1(a)) engine = $engine_type DEFAULT CHARSET=latin1;
1817 eval create
table t1(a varchar(10) primary key) engine = $engine_type DEFAULT CHARSET=latin1;
1818 alter
table t1 convert
to character set utf8;
1819 set foreign_key_checks=1;
1822 # test that RENAME does not allow invalid charsets when f_k_c is 0
1824 set foreign_key_checks=0;
1825 eval create
table t2 (a varchar(10), foreign key (a) references t1(a)) engine = $engine_type DEFAULT CHARSET=latin1;
1826 eval create
table t3(a varchar(10) primary key) engine = $engine_type DEFAULT CHARSET=utf8;
1827 --replace_result $MYSQLTEST_VARDIR . master-data/ ''
1830 set foreign_key_checks=1;
1833 # test that foreign key errors are reported correctly (Bug #15550)
1835 eval create
table t1(a
int primary key) row_format=redundant engine=$engine_type;
1836 eval create
table t2(a
int primary key,constraint foreign key(a)references t1(a)) row_format=compact engine=$engine_type;
1837 eval create
table t3(a
int primary key) row_format=compact engine=$engine_type;
1838 eval create
table t4(a
int primary key,constraint foreign key(a)references t3(a)) row_format=redundant engine=$engine_type;
1840 insert into t1 values(1);
1841 insert into t3 values(1);
1843 insert into t2 values(2);
1845 insert into t4 values(2);
1846 insert into t2 values(1);
1847 insert into t4 values(1);
1865 drop
table t4,t3,t2,t1;
1867 # End of FOREIGN KEY tests
1870 # Please do not remove the following skipped InnoDB specific tests.
1871 # They make the synchronization with innodb.test easier and give
1872 # an idea what to test on other storage engines.
1877 # Test that we can create a large (>1K) key
1879 eval create
table t1 (a varchar(255) character
set utf8,
1880 b varchar(255) character
set utf8,
1881 c varchar(255) character
set utf8,
1882 d varchar(255) character
set utf8,
1883 key (a,b,c,d)) engine=$engine_type;
1885 --error ER_TOO_LONG_KEY
1886 eval create
table t1 (a varchar(255) character set utf8,
1887 b varchar(255) character set utf8,
1888 c varchar(255) character set utf8,
1889 d varchar(255) character set utf8,
1890 e varchar(255) character set utf8,
1891 key (a,b,c,d,e)) engine=$engine_type;
1894 # test the padding of BINARY types and collations (Bug #14189)
1896 eval create
table t1 (s1 varbinary(2),primary key (s1)) engine=$engine_type;
1897 eval create
table t2 (s1 binary(2),primary key (s1)) engine=$engine_type;
1898 eval create
table t3 (s1 varchar(2) binary,primary key (s1)) engine=$engine_type;
1899 eval create
table t4 (s1
char(2) binary,primary key (s1)) engine=$engine_type;
1901 insert into t1 values (0x41),(0x4120),(0x4100);
1902 -- error ER_DUP_ENTRY
1903 insert into t2 values (0x41),(0x4120),(0x4100);
1904 insert into t2 values (0x41),(0x4120);
1905 -- error ER_DUP_ENTRY
1906 insert into t3 values (0x41),(0x4120),(0x4100);
1907 insert into t3 values (0x41),(0x4100);
1908 -- error ER_DUP_ENTRY
1909 insert into t4 values (0x41),(0x4120),(0x4100);
1910 insert into t4 values (0x41),(0x4100);
1911 select hex(s1) from t1;
1912 select hex(s1) from t2;
1913 select hex(s1) from t3;
1914 select hex(s1) from t4;
1915 drop
table t1,t2,t3,t4;
1918 if ($test_foreign_keys)
1920 eval create
table t1 (a
int primary key,s1 varbinary(3) not null unique) engine=$engine_type;
1921 eval create
table t2 (s1 binary(2) not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=$engine_type;
1923 insert into t1 values(1,0x4100),(2,0x41),(3,0x4120),(4,0x42);
1925 insert into t2 values(0x42);
1926 insert into t2 values(0x41);
1927 select hex(s1) from t2;
1928 update t1 set s1=0x123456 where a=2;
1929 select hex(s1) from t2;
1931 update t1 set s1=0x12 where a=1;
1933 update t1 set s1=0x12345678 where a=1;
1935 update t1 set s1=0x123457 where a=1;
1936 update t1 set s1=0x1220 where a=1;
1937 select hex(s1) from t2;
1938 update t1 set s1=0x1200 where a=1;
1939 select hex(s1) from t2;
1940 update t1 set s1=0x4200 where a=1;
1941 select hex(s1) from t2;
1943 delete from t1 where a=1;
1944 delete from t1 where a=2;
1945 update t2 set s1=0x4120;
1948 delete from t1 where a!=3;
1949 select a,hex(s1) from t1;
1950 select hex(s1) from t2;
1954 eval create
table t1 (a
int primary key,s1 varchar(2) binary not null unique) engine=$engine_type;
1955 eval create
table t2 (s1
char(2) binary not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=$engine_type;
1957 insert into t1 values(1,0x4100),(2,0x41);
1958 insert into t2 values(0x41);
1959 select hex(s1) from t2;
1960 update t1 set s1=0x1234 where a=1;
1961 select hex(s1) from t2;
1962 update t1 set s1=0x12 where a=2;
1963 select hex(s1) from t2;
1964 delete from t1 where a=1;
1966 delete from t1 where a=2;
1967 select a,hex(s1) from t1;
1968 select hex(s1) from t2;
1972 # End FOREIGN KEY tests
1974 if ($test_foreign_keys)
1976 # Ensure that <tablename>_ibfk_0 is not mistreated as a
1977 # generated foreign key identifier. (Bug #16387)
1979 eval CREATE
TABLE t1(a INT, PRIMARY KEY(a)) ENGINE=$engine_type;
1980 eval CREATE
TABLE t2(a INT) ENGINE=$engine_type;
1981 ALTER
TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1(a);
1982 ALTER
TABLE t2 DROP FOREIGN KEY t2_ibfk_1;
1983 ALTER
TABLE t2 ADD CONSTRAINT t2_ibfk_0 FOREIGN KEY (a) REFERENCES t1(a);
1984 ALTER
TABLE t2 DROP FOREIGN KEY t2_ibfk_0;
1985 SHOW CREATE
TABLE t2;
1990 # Test case for bug #16229: MySQL/InnoDB uses full explicit table locks in trigger processing
1993 connect (a,localhost,root,,);
1994 connect (b,localhost,root,,);
1996 eval create
table t1(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
1997 insert into t1(a) values (1),(2),(3);
2001 update t1 set b = 5 where a = 2;
2005 create trigger t1t before insert on t1 for each row begin set
NEW.b =
NEW.a * 10 + 5,
NEW.c =
NEW.a / 10; end |
2009 insert into t1(a) values (10),(20),(30),(40),(50),(60),(70),(80),(90),(100),
2010 (11),(21),(31),(41),(51),(61),(71),(81),(91),(101),
2011 (12),(22),(32),(42),(52),(62),(72),(82),(92),(102),
2012 (13),(23),(33),(43),(53),(63),(73),(83),(93),(103),
2013 (14),(24),(34),(44),(54),(64),(74),(84),(94),(104);
2023 # Another trigger test
2025 connect (a,localhost,root,,);
2026 connect (b,localhost,root,,);
2028 eval create
table t1(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
2029 eval create
table t2(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
2030 eval create
table t3(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
2031 eval create
table t4(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
2032 eval create
table t5(a
int not null, b
int, c
int, d
int, primary key(a)) engine=$engine_type;
2033 insert into t1(a) values (1),(2),(3);
2034 insert into t2(a) values (1),(2),(3);
2035 insert into t3(a) values (1),(2),(3);
2036 insert into t4(a) values (1),(2),(3);
2037 insert into t3(a) values (5),(7),(8);
2038 insert into t4(a) values (5),(7),(8);
2039 insert into t5(a) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12);
2042 create trigger t1t before insert on t1 for each row begin
2043 INSERT INTO t2 SET a =
NEW.a;
2046 create trigger t2t before insert on t2 for each row begin
2047 DELETE FROM t3 WHERE a =
NEW.a;
2050 create trigger t3t before delete on t3 for each row begin
2051 UPDATE t4 SET b = b + 1 WHERE a = OLD.a;
2054 create trigger t4t before update on t4 for each row begin
2055 UPDATE t5 SET b = b + 1 where a =
NEW.a;
2060 update t1 set b = b + 5 where a = 1;
2061 update t2 set b = b + 5 where a = 1;
2062 update t3 set b = b + 5 where a = 1;
2063 update t4 set b = b + 5 where a = 1;
2064 insert into t5(a) values(20);
2068 insert into t1(a) values(7);
2069 insert into t2(a) values(8);
2070 delete from t2 where a = 3;
2071 update t4 set b = b + 1 where a = 3;
2077 drop
table t1, t2, t3, t4, t5;
2082 if ($test_foreign_keys)
2085 # Test that cascading updates leading to duplicate keys give the correct
2086 # error message (bug #9680)
2089 eval CREATE
TABLE t1 (
2090 field1 varchar(8) NOT NULL DEFAULT
'',
2091 field2 varchar(8) NOT NULL DEFAULT
'',
2092 PRIMARY KEY (field1, field2)
2093 ) ENGINE=$engine_type;
2095 eval CREATE
TABLE t2 (
2096 field1 varchar(8) NOT NULL DEFAULT '' PRIMARY KEY,
2097 FOREIGN KEY (field1) REFERENCES t1 (field1)
2098 ON DELETE CASCADE ON UPDATE CASCADE
2099 ) ENGINE=$engine_type;
2101 INSERT INTO t1 VALUES ('old', 'somevalu');
2102 INSERT INTO t1 VALUES ('other', 'anyvalue');
2104 INSERT INTO t2 VALUES ('old');
2105 INSERT INTO t2 VALUES ('other');
2107 --error ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO
2108 UPDATE t1 SET field1 = 'other' WHERE field2 = 'somevalu';
2114 # Bug#18477 - MySQL/InnoDB Ignoring Foreign Keys in ALTER TABLE
2116 eval create
table t1 (
2121 ) engine=$engine_type;
2123 eval create
table t2 (
2126 ) engine=$engine_type;
2128 alter
table t1 add constraint c2_fk foreign key (c2)
2129 references t2(c1) on delete cascade;
2130 show create
table t1;
2132 alter
table t1 drop foreign key c2_fk;
2133 show create
table t1;
2137 # End FOREIGN KEY test
2140 # Bug #14360: problem with intervals
2143 eval create
table t1(a date) engine=$engine_type;
2144 eval create
table t2(a date, key(a)) engine=$engine_type;
2145 insert into t1 values('2005-10-01');
2146 insert into t2 values('2005-10-01');
2147 select * from t1, t2
2148 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
2151 eval create
table t1 (
id int not null, f_id
int not null, f
int not null,
2152 primary key(f_id,
id)) engine=$engine_type;
2153 eval create
table t2 (
id int not null,s_id
int not null,s varchar(200),
2154 primary key(
id)) engine=$engine_type;
2155 INSERT INTO t1 VALUES (8, 1, 3);
2156 INSERT INTO t1 VALUES (1, 2, 1);
2157 INSERT INTO t2 VALUES (1, 0, '');
2158 INSERT INTO t2 VALUES (8, 1, '');
2160 DELETE ml.* FROM t1 AS ml LEFT
JOIN t2 AS mm ON (mm.
id=ml.
id)
2161 WHERE mm.
id IS NULL;
2162 select ml.* from t1 as ml left join t2 as mm on (mm.
id=ml.
id)
2163 where mm.
id is null lock in share
mode;
2167 # Test case where X-locks on unused rows should be released in a
2168 # update (because READ COMMITTED isolation level)
2171 connect (a,localhost,root,,);
2172 connect (b,localhost,root,,);
2174 eval create
table t1(a
int not null, b
int, primary key(a)) engine=$engine_type;
2175 insert into t1 values(1,1),(2,2),(3,1),(4,2),(5,1),(6,2),(7,3);
2178 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2179 update t1 set b = 5 where b = 1;
2182 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2184 # X-lock to record (7,3) should be released in a update
2186 select * from t1 where a = 7 and b = 3
for update;
2196 if ($test_transactions)
2199 # Test case where no locks should be released (because we are not
2200 # using READ COMMITTED isolation level)
2203 connect (a,localhost,root,,);
2204 connect (b,localhost,root,,);
2206 eval create
table t1(a
int not null, b
int, primary key(a)) engine=$engine_type;
2207 insert into t1 values(1,1),(2,2),(3,1),(4,2),(5,1),(6,2);
2210 select * from t1 lock in share mode;
2211 update t1 set b = 5 where b = 1;
2215 # S-lock to records (2,2),(4,2), and (6,2) should not be released in a update
2218 select * from t1 where a = 2 and b = 2
for update;
2220 # X-lock to record (1,1),(3,1),(5,1) should not be released in a update
2233 # Consistent read should be used in following selects
2235 # 1) INSERT INTO ... SELECT
2236 # 2) UPDATE ... = ( SELECT ...)
2237 # 3) CREATE ... SELECT
2239 connect (a,localhost,root,,);
2240 connect (b,localhost,root,,);
2242 eval create
table t1(a
int not null, b
int, primary key(a)) engine=$engine_type;
2243 insert into t1 values (1,2),(5,3),(4,2);
2244 eval create
table t2(d
int not null, e
int, primary key(d)) engine=$engine_type;
2245 insert into t2 values (8,6),(12,1),(3,1);
2248 select * from t2 for update;
2251 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2252 insert into t1 select * from t2;
2253 update t1 set b = (select e from t2 where a = d);
2254 eval create
table t3(d
int not null, e
int, primary key(d)) engine=$engine_type
2262 drop
table t1, t2, t3;
2265 # Consistent read should not be used if
2267 # (a) isolation level is serializable OR
2268 # (b) select ... lock in share mode OR
2269 # (c) select ... for update
2271 # in following queries:
2273 # 1) INSERT INTO ... SELECT
2274 # 2) UPDATE ... = ( SELECT ...)
2275 # 3) CREATE ... SELECT
2277 connect (a,localhost,root,,);
2278 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2279 connect (b,localhost,root,,);
2280 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2281 connect (c,localhost,root,,);
2282 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2283 connect (d,localhost,root,,);
2284 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2285 connect (e,localhost,root,,);
2286 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2287 connect (f,localhost,root,,);
2288 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2289 connect (g,localhost,root,,);
2290 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2291 connect (h,localhost,root,,);
2292 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2293 connect (i,localhost,root,,);
2294 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2295 connect (j,localhost,root,,);
2296 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
2298 create
table t1(a
int not null, b
int, primary key(a));
2299 insert into t1 values (1,2),(5,3),(4,2);
2300 create
table t2(a
int not null, b
int, primary key(a));
2301 insert into t2 values (8,6),(12,1),(3,1);
2302 create
table t3(d
int not null, b
int, primary key(d));
2303 insert into t3 values (8,6),(12,1),(3,1);
2304 create
table t5(a
int not null, b
int, primary key(a));
2305 insert into t5 values (1,2),(5,3),(4,2);
2306 create
table t6(d
int not null, e
int, primary key(d));
2307 insert into t6 values (8,6),(12,1),(3,1);
2308 create
table t8(a
int not null, b
int, primary key(a));
2309 insert into t8 values (1,2),(5,3),(4,2);
2310 create
table t9(d
int not null, e
int, primary key(d));
2311 insert into t9 values (8,6),(12,1),(3,1);
2314 select * from t2
for update;
2317 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
2319 insert into t1 select * from t2;
2322 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
2324 update t3
set b = (select b from t2 where a = d);
2327 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
2329 create
table t4(a
int not null, b
int, primary key(a)) select * from t2;
2332 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2334 insert into t5 (select * from t2 lock in share mode);
2337 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2339 update t6 set e = (select b from t2 where a = d lock in share mode);
2342 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2344 create
table t7(a
int not null, b
int, primary key(a)) select * from t2 lock in share mode;
2347 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2349 insert into t8 (select * from t2 for update);
2352 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2354 update t9 set e = (select b from t2 where a = d for update);
2357 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2359 create
table t10(a
int not null, b
int, primary key(a)) select * from t2 for update;
2411 drop
table t1, t2, t3, t5, t6, t8, t9;
2413 # End transactional tests
2415 if ($test_foreign_keys)
2417 # bug 18934, "InnoDB crashes when table uses column names like DB_ROW_ID"
2419 eval CREATE
TABLE t1 (DB_ROW_ID
int) engine=$engine_type;
2422 # Bug #17152: Wrong result with BINARY comparison on aliased column
2425 eval CREATE
TABLE t1 (
2426 a BIGINT(20) NOT NULL,
2428 ) ENGINE=$engine_type DEFAULT CHARSET=UTF8;
2430 eval CREATE
TABLE t2 (
2431 a BIGINT(20) NOT NULL,
2432 b VARCHAR(128) NOT NULL,
2435 KEY idx_t2_b_c (b,c(200)),
2436 CONSTRAINT t_fk FOREIGN KEY (a) REFERENCES t1 (a)
2438 ) ENGINE=$engine_type DEFAULT CHARSET=UTF8;
2440 INSERT INTO t1 VALUES (1);
2441 INSERT INTO t2 VALUES (1, 'bar', 'vbar');
2442 INSERT INTO t2 VALUES (1, 'BAR2', 'VBAR');
2443 INSERT INTO t2 VALUES (1, 'bar_bar', 'bibi');
2444 INSERT INTO t2 VALUES (1, 'customer_over', '1');
2446 SELECT * FROM t2 WHERE b = 'customer_over';
2447 SELECT * FROM t2 WHERE BINARY b = 'customer_over';
2448 SELECT DISTINCT p0.a FROM t2 p0 WHERE p0.b = 'customer_over';
2450 SELECT DISTINCT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
2451 SELECT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
2456 if ($no_spatial_key)
2459 # Bug #15680 (SPATIAL key in innodb)
2461 --error ER_TABLE_CANT_HANDLE_SPKEYS
2462 eval create
table t1 (g geometry not null, spatial gk(g)) engine=$engine_type;
2466 # Test optimize on table with open transaction
2469 eval CREATE
TABLE t1 ( a
int ) ENGINE=$engine_type;
2471 INSERT INTO t1 VALUES (1);
2475 #######################################################################
2477 # This is derivate of t/innodb.test and has to be maintained by #
2478 # MySQL guys only. #
2480 # Please synchronize this file from time to time with t/innodb.test. #
2481 # Please, DO NOT create a toplevel testcase innodb-mix2.test, because #
2482 # innodb.test does already these tests. #
2484 #######################################################################