4
# $engine_type -- storage engine to be tested
5
# $other_engine_type -- storage engine <> $engine_type
6
# $other_engine_type must point to an all
7
# time available storage engine
8
# 2006-08 MySQL 5.1 MyISAM and MEMORY only
9
# $test_foreign_keys -- 0, skip foreign key tests
10
# -- 1, do not skip foreign key tests
11
# have to be set before sourcing this script.
13
# Note: The comments/expectations refer to InnoDB.
14
# They might be not valid for other storage engines.
17
# 2006-08-15 ML refactoring of t/innodb_mysql.test
18
# - shift main code of t/innodb_mysql.test to include/mix1.inc
19
# - replace hardcoded assignment of storage engine by
20
# use of $engine_type and $other_engine_type variables
21
# - remove redundant replay testcase of
22
# Bug#12882 min/max inconsistent on empty table
23
# - corrected analyze table t1; to analyze table t4;
24
# Much older versions of this test show that the table
25
# where just some indexes have been created must be used.
28
eval SET SESSION STORAGE_ENGINE = $engine_type;
31
drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4;
35
# BUG#16798: Uninitialized row buffer reads in ref-or-null optimizer
36
# (repeatable only w/innodb).
38
c_id int not null default '0',
39
org_id int default null,
40
unique key contacts$c_id (c_id),
41
key contacts$org_id (org_id)
44
(2,null),(120,null),(141,null),(218,7), (128,1),
45
(151,2),(234,2),(236,2),(243,2),(255,2),(259,2),(232,3),(235,3),(238,3),
46
(246,3),(253,3),(269,3),(285,3),(291,3),(293,3),(131,4),(230,4),(231,4);
49
slai_id int not null default '0',
50
owner_tbl int default null,
51
owner_id int default null,
52
sla_id int default null,
53
inc_web int default null,
54
inc_email int default null,
55
inc_chat int default null,
56
inc_csr int default null,
57
inc_total int default null,
58
time_billed int default null,
59
activedate timestamp null default null,
60
expiredate timestamp null default null,
61
state int default null,
62
sla_set int default null,
63
unique key t2$slai_id (slai_id),
64
key t2$owner_id (owner_id),
65
key t2$sla_id (sla_id)
67
insert into t2(slai_id, owner_tbl, owner_id, sla_id) values
68
(1,3,1,1), (3,3,10,2), (4,3,3,6), (5,3,2,5), (6,3,8,3), (7,3,9,7),
69
(8,3,6,8), (9,3,4,9), (10,3,5,10), (11,3,11,11), (12,3,7,12);
73
from t1 c join t2 si on
74
((si.owner_tbl = 3 and si.owner_id = c.org_id) or
75
( si.owner_tbl = 2 and si.owner_id = c.c_id))
77
c.c_id = 218 and expiredate is null;
79
select * from t1 where org_id is null;
81
from t1 c join t2 si on
82
((si.owner_tbl = 3 and si.owner_id = c.org_id) or
83
( si.owner_tbl = 2 and si.owner_id = c.c_id))
85
c.c_id = 218 and expiredate is null;
90
# Bug#17212: results not sorted correctly by ORDER BY when using index
91
# (repeatable only w/innodb because of index props)
93
CREATE TABLE t1 (a int, b int, KEY b (b));
94
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b));
95
CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),
96
UNIQUE KEY b (b,c), KEY a (a,b,c));
98
INSERT INTO t1 VALUES (1, 1);
99
INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;
100
INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;
102
INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
103
INSERT INTO t2 SELECT a + 1, b FROM t2;
104
DELETE FROM t2 WHERE a = 1 AND b < 2;
106
INSERT INTO t3 VALUES (1,1,1),(2,1,2);
107
INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;
108
INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;
110
# demonstrate a problem when a must-use-sort table flag
111
# (sort_by_table=1) is being neglected.
112
SELECT STRAIGHT_JOIN t1.b, t1.a FROM t1, t3, t2 WHERE
113
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
114
ORDER BY t1.b LIMIT 2;
116
# demonstrate the problem described in the bug report
117
SELECT STRAIGHT_JOIN t1.b, t1.a FROM t1, t3, t2 WHERE
118
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
119
ORDER BY t1.b LIMIT 5;
120
DROP TABLE t1, t2, t3;
123
# BUG#21077 (The testcase is not deterministic so correct execution doesn't
124
# prove anything) For proof one should track if sequence of ha_innodb::* func
126
CREATE TABLE `t1` (`id1` INT) ;
127
INSERT INTO `t1` (`id1`) VALUES (1),(5),(2);
134
UNIQUE (`id2`,`id4`),
138
INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES
146
SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2);
150
# Bug #13191: INSERT...ON DUPLICATE KEY UPDATE of UTF-8 string fields
151
# used in partial unique indices.
154
CREATE TABLE t1(c1 TEXT, UNIQUE (c1(1)), cnt INT DEFAULT 1)
156
INSERT INTO t1 (c1) VALUES ('1a');
158
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;
162
CREATE TABLE t1(c1 VARCHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1)
164
INSERT INTO t1 (c1) VALUES ('1a');
166
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;
170
CREATE TABLE t1(c1 CHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1)
172
INSERT INTO t1 (c1) VALUES ('1a');
174
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;
179
# Bug #28272: EXPLAIN for SELECT from an empty InnoDB table
183
a1 decimal(10,0) DEFAULT NULL,
186
a5 char(175) DEFAULT NULL,
187
a6 timestamp NOT NULL DEFAULT NOW(),
189
INDEX idx (a6,a7(239),a5)
192
EXPLAIN SELECT a4 FROM t1 WHERE
194
a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
196
EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE
197
t.a6=t.a6 AND t1.a6=NULL AND
198
t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
203
# Bug #12882 min/max inconsistent on empty table
207
eval create temporary table t1m (a int) engine = $other_engine_type;
208
create table t1i (a int);
209
eval create temporary table t2m (a int) engine = $other_engine_type;
210
create table t2i (a int);
212
insert into t2m values (5);
213
insert into t2i values (5);
215
select 1, min(a) from t1i where a=99;
216
select 1, min(a) from t1i where 1=99;
217
select 1, min(1) from t1i where a=99;
218
select 1, min(1) from t1i where 1=99;
220
select 1, max(a) from t1i where a=99;
221
select 1, max(a) from t1i where 1=99;
222
select 1, max(1) from t1i where a=99;
223
select 1, max(1) from t1i where 1=99;
225
# mixed $engine_type/$other_engine_type test
226
explain select count(*), min(7), max(7) from t1m, t1i;
227
select count(*), min(7), max(7) from t1m, t1i;
229
explain select count(*), min(7), max(7) from t1m, t2i;
230
select count(*), min(7), max(7) from t1m, t2i;
232
explain select count(*), min(7), max(7) from t2m, t1i;
233
select count(*), min(7), max(7) from t2m, t1i;
235
drop table t1m, t1i, t2m, t2i;
238
# Bug #12882: primary key implcitly included in every innodb index
239
# (was part of group_min_max.test)
242
eval create TEMPORARY table t1 (
243
a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' '
244
) ENGINE = $other_engine_type;
246
insert into t1 (a1, a2, b, c, d) values
247
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
248
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
249
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
250
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
251
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
252
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
253
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
254
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
255
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
256
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
257
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
258
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),
259
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),
260
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),
261
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),
262
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4'),
263
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
264
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
265
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
266
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
267
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
268
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
269
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
270
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
271
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
272
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
273
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
274
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),
275
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),
276
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),
277
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),
278
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4');
281
pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' '
284
insert into t4 (a1, a2, b, c, d, dummy) select * from t1;
286
create index idx12672_0 on t4 (a1);
287
create index idx12672_1 on t4 (a1,a2,b,c);
288
create index idx12672_2 on t4 (a1,a2,b);
291
select distinct a1 from t4 where pk_col not in (1,2,3,4);
297
# BUG#18819: DELETE IGNORE hangs on foreign key parent delete
299
# The bug itself does not relate to InnoDB, but we have to use foreign
300
# keys to reproduce it.
303
DROP TABLE IF EXISTS t2, t1;
306
CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE= InnoDB;
309
FOREIGN KEY (i) REFERENCES t1 (i) ON DELETE NO ACTION
312
INSERT INTO t1 VALUES (1);
313
INSERT INTO t2 VALUES (1);
315
DELETE IGNORE FROM t1 WHERE i = 1;
317
SELECT * FROM t1, t2;
322
--echo End of 4.1 tests.
326
# Bug #6142: a problem with the empty innodb table
327
# (was part of group_min_max.test)
332
a varchar(30), b varchar(30), primary key(a), key(b)
335
select distinct a from t1;
339
# Bug #9798: group by with rollup
340
# (was part of group_min_max.test)
344
create table t1(a int, key(a));
346
insert into t1 values(1);
347
select a, count(a) from t1 group by a with rollup;
351
# Bug #13293 Wrongly used index results in endless loop.
352
# (was part of group_min_max.test)
354
create table t1 (f1 int, f2 char(1), primary key(f1,f2));
355
insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d");
356
alter table t1 drop primary key, add primary key (f2, f1);
357
explain select distinct f1 a, f1 b from t1;
358
explain select distinct f1, f2 from t1;
362
# Test for bug #17164: ORed FALSE blocked conversion of outer join into join
365
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, name varchar(20),
367
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, fkey int);
368
# CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, fkey int,
369
# FOREIGN KEY (fkey) REFERENCES t2(id));
370
if ($test_foreign_keys)
372
ALTER TABLE t2 ADD FOREIGN KEY (fkey) REFERENCES t2(id);
374
INSERT INTO t1 VALUES (1,'A1'),(2,'A2'),(3,'B');
375
INSERT INTO t2 VALUES (1,1),(2,2),(3,2),(4,3),(5,3);
378
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
379
WHERE t1.name LIKE 'A%';
382
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
383
WHERE t1.name LIKE 'A%' OR FALSE;
388
# Bug#26159: crash for a loose scan of a table that has been emptied
393
name varchar(20) NOT NULL,
394
dept varchar(20) NOT NULL,
399
INSERT INTO t1(id, dept, age, name) VALUES
400
(3987, 'cs1', 10, 'rs1'), (3988, 'cs2', 20, 'rs1'), (3995, 'cs3', 10, 'rs2'),
401
(3996, 'cs4', 20, 'rs2'), (4003, 'cs5', 10, 'rs3'), (4004, 'cs6', 20, 'rs3'),
402
(4011, 'cs7', 10, 'rs4'), (4012, 'cs8', 20, 'rs4'), (4019, 'cs9', 10, 'rs5'),
403
(4020, 'cs10', 20, 'rs5'),(4027, 'cs11', 10, 'rs6'),(4028, 'cs12', 20, 'rs6');
405
EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
406
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
408
EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
409
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
413
--source include/innodb_rollback_on_timeout.inc
416
# Bug #27210: INNODB ON DUPLICATE KEY UPDATE
419
connect (con1,localhost,root,,);
421
drop table if exists `test`;
422
CREATE TABLE `test` (`test1` varchar(3) NOT NULL,
423
`test2` varchar(4) NOT NULL,PRIMARY KEY (`test1`))
425
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '5678');
427
connect (con2,localhost,root,,);
430
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '1234')
431
ON DUPLICATE KEY UPDATE `test2` = '1234';
439
--source include/innodb_rollback_on_timeout.inc
442
# Bug #27650: INSERT fails after multi-row INSERT of the form:
443
# INSERT INTO t (id...) VALUES (NULL...) ON DUPLICATE KEY UPDATE id=VALUES(id)
447
id int auto_increment,
449
counter int not null default 1,
454
insert into t1 (id, c) values
457
on duplicate key update id = values(id), counter = counter + 1;
461
insert into t1 (id, c) values
463
on duplicate key update id = values(id), counter = counter + 1;
469
insert into t1 (id, c) values (NULL, 'a');
473
insert into t1 (id, c) values (NULL, 'b'), (NULL, 'b')
474
on duplicate key update id = values(id), c = values(c), counter = counter + 1;
478
insert into t1 (id, c) values (NULL, 'a')
479
on duplicate key update id = values(id), c = values(c), counter = counter + 1;
485
# Test needs to be rewritten to not use divide by zero
487
## Bug #28189: optimizer erroniously prefers ref access to range access
488
## for an InnoDB table
492
# id int AUTO_INCREMENT PRIMARY KEY,
493
# stat_id int NOT NULL,
494
# acct_id int DEFAULT NULL,
495
# INDEX idx1 (stat_id, acct_id),
496
# INDEX idx2 (acct_id)
500
# id int AUTO_INCREMENT PRIMARY KEY,
501
# stat_id int NOT NULL,
502
# acct_id int DEFAULT NULL,
503
# INDEX idx1 (stat_id, acct_id),
504
# INDEX idx2 (acct_id)
507
#INSERT INTO t1(stat_id,acct_id) VALUES
508
# (1,759), (2,831), (3,785), (4,854), (1,921),
509
# (1,553), (2,589), (3,743), (2,827), (2,545),
510
# (4,779), (4,783), (1,597), (1,785), (4,832),
511
# (1,741), (1,833), (3,788), (2,973), (1,907);
513
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
514
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
515
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
516
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
517
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
518
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
519
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
520
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
521
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
522
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
523
#INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
524
#UPDATE t1 SET acct_id=785
525
# WHERE MOD(stat_id,2)=0 AND MOD(id,stat_id)=MOD(acct_id,stat_id);
528
#SELECT COUNT(*) FROM t1;
529
#SELECT COUNT(*) FROM t1 WHERE acct_id=785;
531
#EXPLAIN SELECT COUNT(*) FROM t1 WHERE stat_id IN (1,3) AND acct_id=785;
533
#INSERT INTO t2 SELECT * FROM t1;
536
#EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785;
541
# Bug #28652: assert when alter innodb table operation
543
create table t1(a int) engine=innodb;
544
alter table t1 comment '123';
545
show create table t1;
549
# Bug #25866: Getting "#HY000 Can't find record in..." on and INSERT
551
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
552
INSERT INTO t1 VALUES ('uk'),('bg');
553
SELECT * FROM t1 WHERE a = 'uk';
554
DELETE FROM t1 WHERE a = 'uk';
555
SELECT * FROM t1 WHERE a = 'uk';
556
UPDATE t1 SET a = 'us' WHERE a = 'uk';
557
SELECT * FROM t1 WHERE a = 'uk';
559
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
560
INSERT INTO t2 VALUES ('uk'),('bg');
561
SELECT * FROM t2 WHERE a = 'uk';
562
DELETE FROM t2 WHERE a = 'uk';
563
SELECT * FROM t2 WHERE a = 'uk';
564
INSERT INTO t2 VALUES ('uk');
565
UPDATE t2 SET a = 'us' WHERE a = 'uk';
566
SELECT * FROM t2 WHERE a = 'uk';
568
CREATE TEMPORARY TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
569
INSERT INTO t3 VALUES ('uk'),('bg');
570
SELECT * FROM t3 WHERE a = 'uk';
571
DELETE FROM t3 WHERE a = 'uk';
572
SELECT * FROM t3 WHERE a = 'uk';
573
INSERT INTO t3 VALUES ('uk');
574
UPDATE t3 SET a = 'us' WHERE a = 'uk';
575
SELECT * FROM t3 WHERE a = 'uk';
580
# Bug #25798: a query with forced index merge returns wrong result
584
id int NOT NULL auto_increment PRIMARY KEY,
592
b int NOT NULL auto_increment PRIMARY KEY,
596
INSERT INTO t2(c) VALUES ('2007-01-01');
597
INSERT INTO t2(c) SELECT c FROM t2;
598
INSERT INTO t2(c) SELECT c FROM t2;
599
INSERT INTO t2(c) SELECT c FROM t2;
600
INSERT INTO t2(c) SELECT c FROM t2;
601
INSERT INTO t2(c) SELECT c FROM t2;
602
INSERT INTO t2(c) SELECT c FROM t2;
603
INSERT INTO t2(c) SELECT c FROM t2;
604
INSERT INTO t2(c) SELECT c FROM t2;
605
INSERT INTO t2(c) SELECT c FROM t2;
606
INSERT INTO t2(c) SELECT c FROM t2;
608
INSERT INTO t1(b,c) SELECT b,c FROM t2;
609
UPDATE t2 SET c='2007-01-02';
610
INSERT INTO t1(b,c) SELECT b,c FROM t2;
611
UPDATE t2 SET c='2007-01-03';
612
INSERT INTO t1(b,c) SELECT b,c FROM t2;
614
set @@sort_buffer_size=8192;
616
SELECT COUNT(*) FROM t1;
620
SELECT COUNT(*) FROM t1
621
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
622
SELECT COUNT(*) FROM t1
623
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
627
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
628
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
629
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
630
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
632
set @@sort_buffer_size=default;
636
# Test of behaviour with CREATE ... SELECT
639
CREATE TABLE t1 (a int, b int);
640
insert into t1 values (1,1),(1,2);
642
CREATE TABLE t2 (primary key (a)) select * from t1;
643
# This should give warning
644
drop table if exists t2;
646
CREATE TEMPORARY TABLE t2 (primary key (a)) select * from t1;
647
# This should give warning
648
drop table if exists t2;
649
CREATE TABLE t2 (a int, b int, primary key (a));
651
INSERT INTO t2 values(100,100);
653
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
659
INSERT INTO t2 select * from t1;
663
CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a));
665
INSERT INTO t2 values(100,100);
667
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
671
INSERT INTO t2 values(101,101);
673
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
679
INSERT INTO t2 select * from t1;
684
# Bug#17530: Incorrect key truncation on table creation caused server crash.
686
create table t1(f1 varchar(800) not null, key(f1));
687
insert into t1 values('aaa');
692
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
694
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB;
696
INSERT INTO t1 VALUES ( 1 , 1 , 1);
697
INSERT INTO t1 SELECT a + 1 , MOD(a + 1 , 20), 1 FROM t1;
698
INSERT INTO t1 SELECT a + 2 , MOD(a + 2 , 20), 1 FROM t1;
699
INSERT INTO t1 SELECT a + 4 , MOD(a + 4 , 20), 1 FROM t1;
700
INSERT INTO t1 SELECT a + 8 , MOD(a + 8 , 20), 1 FROM t1;
701
INSERT INTO t1 SELECT a + 16, MOD(a + 16, 20), 1 FROM t1;
702
INSERT INTO t1 SELECT a + 32, MOD(a + 32, 20), 1 FROM t1;
703
INSERT INTO t1 SELECT a + 64, MOD(a + 64, 20), 1 FROM t1;
705
EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;
706
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
709
--source include/innodb_rollback_on_timeout.inc
712
# Bug #28591: MySQL need not sort the records in case of ORDER BY
713
# primary_key on InnoDB table
716
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a), KEY bkey (b)) ENGINE=InnoDB;
717
INSERT INTO t1 VALUES (1,2),(3,2),(2,2),(4,2),(5,2),(6,2),(7,2),(8,2);
718
INSERT INTO t1 SELECT a + 8, 2 FROM t1;
719
INSERT INTO t1 SELECT a + 16, 1 FROM t1;
720
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a;
721
SELECT * FROM t1 WHERE b=2 ORDER BY a;
722
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;
723
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;
724
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
725
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
727
CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a), KEY bkey (b,c))
729
INSERT INTO t2 VALUES (1,1,1),(3,1,1),(2,1,1),(4,1,1);
730
INSERT INTO t2 SELECT a + 4, 1, 1 FROM t2;
731
INSERT INTO t2 SELECT a + 8, 1, 1 FROM t2;
733
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 ORDER BY a;
734
SELECT * FROM t2 WHERE b=1 ORDER BY a;
735
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;
736
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;
737
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;
738
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;
739
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;
740
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;
746
# Bug #28125: ERROR 2013 when adding index.
748
create table t1(a text) engine=innodb;
749
insert into t1 values('aaa');
750
alter table t1 add index(a(1024));
751
show create table t1;
755
# Bug #28570: handler::index_read() is called with different find_flag when
765
INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30);
768
SELECT * FROM t1 WHERE b=20 FOR UPDATE;
770
--connect (conn2, localhost, root,,test)
772
# This statement gives a "failed: 1205: Lock wait timeout exceeded; try
773
# restarting transaction" message when the bug is present.
775
SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE;
785
# Bug#30596: GROUP BY optimization gives wrong result order
795
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
797
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
798
SELECT c,b,d FROM t1 GROUP BY c,b,d;
799
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
800
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
801
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
802
SELECT c,b,d FROM t1 ORDER BY c,b,d;
804
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
805
SELECT c,b,d FROM t1 GROUP BY c,b;
806
EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
807
SELECT c,b FROM t1 GROUP BY c,b;
812
# Bug #31001: ORDER BY DESC in InnoDB not working
814
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), INDEX b (b)) ENGINE=InnoDB;
815
INSERT INTO t1(a,b) VALUES (1,1), (2,2), (3,2);
817
#The two queries below should produce different results, but they don't.
818
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;
819
SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;
820
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;
821
SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;
823
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a ASC;
824
SELECT * FROM t1 ORDER BY b ASC, a ASC;
825
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a DESC;
826
SELECT * FROM t1 ORDER BY b DESC, a DESC;
827
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a DESC;
828
SELECT * FROM t1 ORDER BY b ASC, a DESC;
829
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a ASC;
830
SELECT * FROM t1 ORDER BY b DESC, a ASC;
834
###########################################################################
838
--echo # Bug#27610: ALTER TABLE ROW_FORMAT=... does not rebuild the table.
846
DROP TABLE IF EXISTS t1;
851
CREATE TABLE t1(c INT)
853
ROW_FORMAT = COMPACT;
856
--echo # - initial check;
859
SELECT table_schema, table_name, row_format
860
FROM data_dictionary.TABLES
861
WHERE table_schema = DATABASE() AND table_name = 't1';
864
--echo # - change ROW_FORMAT and check;
867
ALTER TABLE t1 ROW_FORMAT = REDUNDANT;
871
SELECT table_schema, table_name, row_format
872
FROM data_dictionary.TABLES
873
WHERE table_schema = DATABASE() AND table_name = 't1';
876
--echo # - that's it, cleanup.
881
###########################################################################
884
# Bug #31137: Assertion failed: primary_key_no == -1 || primary_key_no == 0
886
create table t1(a char(10) not null, unique key aa(a(1)),
887
b char(4) not null, unique key bb(b(4))) engine=innodb;
889
show create table t1;
893
# Bug #32815: query with ORDER BY and a possible ref_or_null access
896
CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;
897
INSERT INTO t1 VALUES
898
(191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);
900
EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
901
SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
906
# Bug #34223: Assertion failed: (optp->var_type & 127) == 8,
907
# file .\my_getopt.c, line 830
910
set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment;
911
set global innodb_autoextend_increment=8;
912
set global innodb_autoextend_increment=@my_innodb_autoextend_increment;
914
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;
915
set global innodb_commit_concurrency=0;
916
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
918
--echo End of 5.0 tests
920
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
921
# UPDATE": if the row is updated, it's like a regular UPDATE:
922
# LAST_INSERT_ID() is not affected.
924
`k` int NOT NULL auto_increment,
925
`a` int default NULL,
926
`c` int default NULL,
928
UNIQUE KEY `idx_1` (`a`)
930
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
933
insert into t2 ( a ) values ( 7 ) on duplicate key update c =
936
select last_insert_id();
938
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
941
select last_insert_id();
942
# test again when last_insert_id() is 0 initially
943
select last_insert_id(0);
944
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
947
select last_insert_id();
950
# Test of LAST_INSERT_ID() when autogenerated will fail:
951
# last_insert_id() should not change
952
insert ignore into t2 values (null,6,1),(10,8,1);
953
select last_insert_id();
954
# First and second autogenerated will fail, last_insert_id() should
956
insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);
957
select last_insert_id();
960
# Test of the workaround which enables people to know the id of the
961
# updated row in INSERT ON DUPLICATE KEY UPDATE, by using
962
# LAST_INSERT_ID(autoinc_col) in the UPDATE clause.
964
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
966
0 ) + 1, k=last_insert_id(k);
967
select last_insert_id();
974
# Bug#29310: An InnoDB table was updated when the data wasn't actually changed.
976
create table t1(f1 varchar(5) unique, f2 timestamp NOT NULL DEFAULT
977
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
978
insert into t1(f1) values(1);
980
select @a:=f2 from t1;
983
select @b:=f2 from t1;
984
select if(@a=@b,"ok","wrong");
985
insert into t1(f1) values (1) on duplicate key update f1="1";
987
select @b:=f2 from t1;
988
select if(@a=@b,"ok","wrong");
989
insert into t1(f1) select f1 from t1 on duplicate key update f1="1";
991
select @b:=f2 from t1;
992
select if(@a=@b,"ok","wrong");
995
# Bug#30747 Create table with identical constraint names behaves incorrectly
998
if ($test_foreign_keys)
1000
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb;
1001
--error ER_WRONG_FK_DEF
1002
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1003
CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb;
1004
--error ER_WRONG_FK_DEF
1005
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1006
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb;
1007
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1008
CONSTRAINT c1 FOREIGN KEY c2 (c) REFERENCES t1 (a) ON DELETE NO ACTION,
1009
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb;
1010
ALTER TABLE t2 DROP FOREIGN KEY c2;
1012
--error ER_WRONG_FK_DEF
1013
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1014
FOREIGN KEY (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb;
1015
--error ER_WRONG_FK_DEF
1016
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1017
FOREIGN KEY f1 (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb;
1018
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
1019
CONSTRAINT c1 FOREIGN KEY f1 (c) REFERENCES t1 (a) ON DELETE NO ACTION,
1020
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION,
1021
FOREIGN KEY f3 (c) REFERENCES t1 (a) ON UPDATE NO ACTION,
1022
FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb;
1023
SHOW CREATE TABLE t2;
1029
# Bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB and
1030
# auto_increment keys
1032
create table t1 (a int auto_increment primary key) engine=innodb;
1034
alter table t1 order by a;
1038
# Bug #33697: ORDER BY primary key DESC vs. ref access + filesort
1039
# (reproduced only with InnoDB tables)
1043
(vid integer NOT NULL,
1044
tid integer NOT NULL,
1045
idx integer NOT NULL,
1046
name varchar(128) NOT NULL,
1047
type varchar(128) NULL,
1048
PRIMARY KEY(idx, vid, tid),
1049
UNIQUE(vid, tid, name)
1052
INSERT INTO t1 VALUES
1053
(1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL),
1054
(5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL),
1055
(4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL),
1056
(4,1,3,'pk',NULL),(5,1,3,'c2',NULL),
1057
(2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL);
1059
EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
1061
SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
1066
# Bug#21704: Renaming column does not update FK definition.
1070
DROP TABLE IF EXISTS t1;
1071
DROP TABLE IF EXISTS t2;
1074
CREATE TABLE t1(id INT PRIMARY KEY)
1078
t1_id INT PRIMARY KEY,
1079
CONSTRAINT fk1 FOREIGN KEY (t1_id) REFERENCES t1(id))
1084
--disable_result_log
1085
--error ER_ERROR_ON_RENAME
1086
ALTER TABLE t1 CHANGE id id2 INT;
1094
--echo End of 5.1 tests