1
by brian
clean slate |
1 |
# include/mix1.inc |
2 |
#
|
|
3 |
# The variables |
|
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. |
|
12 |
#
|
|
13 |
# Note: The comments/expectations refer to InnoDB. |
|
14 |
# They might be not valid for other storage engines. |
|
15 |
#
|
|
16 |
# Last update: |
|
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. |
|
26 |
#
|
|
27 |
||
28 |
eval SET SESSION STORAGE_ENGINE = $engine_type; |
|
29 |
||
30 |
--disable_warnings |
|
31 |
drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4; |
|
32 |
--enable_warnings |
|
33 |
||
34 |
||
35 |
# BUG#16798: Uninitialized row buffer reads in ref-or-null optimizer |
|
36 |
# (repeatable only w/innodb). |
|
37 |
create table t1 ( |
|
38 |
c_id int(11) not null default '0', |
|
39 |
org_id int(11) default null, |
|
40 |
unique key contacts$c_id (c_id), |
|
41 |
key contacts$org_id (org_id) |
|
42 |
);
|
|
43 |
insert into t1 values |
|
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); |
|
47 |
||
48 |
create table t2 ( |
|
49 |
slai_id int(11) not null default '0', |
|
50 |
owner_tbl int(11) default null, |
|
51 |
owner_id int(11) default null, |
|
52 |
sla_id int(11) default null, |
|
53 |
inc_web int(11) default null, |
|
54 |
inc_email int(11) default null, |
|
55 |
inc_chat int(11) default null, |
|
56 |
inc_csr int(11) default null, |
|
57 |
inc_total int(11) default null, |
|
58 |
time_billed int(11) default null, |
|
59 |
activedate timestamp null default null, |
|
60 |
expiredate timestamp null default null, |
|
61 |
state int(11) default null, |
|
62 |
sla_set int(11) default null, |
|
63 |
unique key t2$slai_id (slai_id), |
|
64 |
key t2$owner_id (owner_id), |
|
65 |
key t2$sla_id (sla_id) |
|
66 |
);
|
|
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); |
|
70 |
||
71 |
flush tables; |
|
72 |
select si.slai_id |
|
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)) |
|
76 |
where
|
|
77 |
c.c_id = 218 and expiredate is null; |
|
78 |
||
79 |
select * from t1 where org_id is null; |
|
80 |
select si.slai_id |
|
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)) |
|
84 |
where
|
|
85 |
c.c_id = 218 and expiredate is null; |
|
86 |
||
87 |
drop table t1, t2; |
|
88 |
||
89 |
#
|
|
90 |
# Bug#17212: results not sorted correctly by ORDER BY when using index |
|
91 |
# (repeatable only w/innodb because of index props) |
|
92 |
#
|
|
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)); |
|
97 |
||
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; |
|
101 |
||
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; |
|
105 |
||
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; |
|
109 |
||
110 |
# demonstrate a problem when a must-use-sort table flag |
|
111 |
# (sort_by_table=1) is being neglected. |
|
112 |
SELECT STRAIGHT_JOIN SQL_NO_CACHE 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; |
|
115 |
||
116 |
# demonstrate the problem described in the bug report |
|
117 |
SELECT STRAIGHT_JOIN SQL_NO_CACHE 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; |
|
121 |
||
122 |
||
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 |
|
125 |
# calls is correct. |
|
126 |
CREATE TABLE `t1` (`id1` INT) ; |
|
127 |
INSERT INTO `t1` (`id1`) VALUES (1),(5),(2); |
|
128 |
||
129 |
CREATE TABLE `t2` ( |
|
130 |
`id1` INT, |
|
131 |
`id2` INT NOT NULL, |
|
132 |
`id3` INT, |
|
133 |
`id4` INT NOT NULL, |
|
134 |
UNIQUE (`id2`,`id4`), |
|
135 |
KEY (`id1`) |
|
136 |
);
|
|
137 |
||
138 |
INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES |
|
139 |
(1,1,1,0), |
|
140 |
(1,1,2,1), |
|
141 |
(5,1,2,2), |
|
142 |
(6,1,2,3), |
|
143 |
(1,2,2,2), |
|
144 |
(1,2,1,1); |
|
145 |
||
146 |
SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2); |
|
147 |
DROP TABLE t1, t2; |
|
148 |
||
149 |
#
|
|
150 |
# Bug #13191: INSERT...ON DUPLICATE KEY UPDATE of UTF-8 string fields |
|
151 |
# used in partial unique indices. |
|
152 |
#
|
|
153 |
||
154 |
CREATE TABLE t1(c1 TEXT, UNIQUE (c1(1)), cnt INT DEFAULT 1) |
|
155 |
ENGINE=INNODB CHARACTER SET UTF8; |
|
156 |
INSERT INTO t1 (c1) VALUES ('1a'); |
|
157 |
SELECT * FROM t1; |
|
158 |
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; |
|
159 |
SELECT * FROM t1; |
|
160 |
DROP TABLE t1; |
|
161 |
||
162 |
CREATE TABLE t1(c1 VARCHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) |
|
163 |
ENGINE=INNODB CHARACTER SET UTF8; |
|
164 |
INSERT INTO t1 (c1) VALUES ('1a'); |
|
165 |
SELECT * FROM t1; |
|
166 |
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; |
|
167 |
SELECT * FROM t1; |
|
168 |
DROP TABLE t1; |
|
169 |
||
170 |
CREATE TABLE t1(c1 CHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) |
|
171 |
ENGINE=INNODB CHARACTER SET UTF8; |
|
172 |
INSERT INTO t1 (c1) VALUES ('1a'); |
|
173 |
SELECT * FROM t1; |
|
174 |
INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; |
|
175 |
SELECT * FROM t1; |
|
176 |
DROP TABLE t1; |
|
177 |
||
178 |
#
|
|
179 |
# Bug #28272: EXPLAIN for SELECT from an empty InnoDB table |
|
180 |
#
|
|
181 |
||
182 |
CREATE TABLE t1 ( |
|
183 |
a1 decimal(10,0) DEFAULT NULL, |
|
184 |
a2 blob, |
|
185 |
a3 time DEFAULT NULL, |
|
186 |
a4 blob, |
|
187 |
a5 char(175) DEFAULT NULL, |
|
188 |
a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
|
189 |
a7 tinyblob, |
|
190 |
INDEX idx (a6,a7(239),a5) |
|
191 |
) ENGINE=InnoDB; |
|
192 |
||
193 |
EXPLAIN SELECT a4 FROM t1 WHERE |
|
194 |
a6=NULL AND |
|
195 |
a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; |
|
196 |
||
197 |
EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE |
|
198 |
t.a6=t.a6 AND t1.a6=NULL AND |
|
199 |
t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; |
|
200 |
||
201 |
DROP TABLE t1; |
|
202 |
||
203 |
#
|
|
204 |
# Bug #12882 min/max inconsistent on empty table |
|
205 |
#
|
|
206 |
||
207 |
--disable_warnings |
|
208 |
eval create table t1m (a int) engine = $other_engine_type; |
|
209 |
create table t1i (a int); |
|
210 |
eval create table t2m (a int) engine = $other_engine_type; |
|
211 |
create table t2i (a int); |
|
212 |
--enable_warnings |
|
213 |
insert into t2m values (5); |
|
214 |
insert into t2i values (5); |
|
215 |
||
216 |
select 1, min(a) from t1i where a=99; |
|
217 |
select 1, min(a) from t1i where 1=99; |
|
218 |
select 1, min(1) from t1i where a=99; |
|
219 |
select 1, min(1) from t1i where 1=99; |
|
220 |
||
221 |
select 1, max(a) from t1i where a=99; |
|
222 |
select 1, max(a) from t1i where 1=99; |
|
223 |
select 1, max(1) from t1i where a=99; |
|
224 |
select 1, max(1) from t1i where 1=99; |
|
225 |
||
226 |
# mixed $engine_type/$other_engine_type test |
|
227 |
explain select count(*), min(7), max(7) from t1m, t1i; |
|
228 |
select count(*), min(7), max(7) from t1m, t1i; |
|
229 |
||
230 |
explain select count(*), min(7), max(7) from t1m, t2i; |
|
231 |
select count(*), min(7), max(7) from t1m, t2i; |
|
232 |
||
233 |
explain select count(*), min(7), max(7) from t2m, t1i; |
|
234 |
select count(*), min(7), max(7) from t2m, t1i; |
|
235 |
||
236 |
drop table t1m, t1i, t2m, t2i; |
|
237 |
||
238 |
#
|
|
239 |
# Bug #12882: primary key implcitly included in every innodb index |
|
240 |
# (was part of group_min_max.test) |
|
241 |
#
|
|
242 |
||
243 |
eval create table t1 ( |
|
244 |
a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' ' |
|
245 |
) ENGINE = $other_engine_type; |
|
246 |
||
247 |
insert into t1 (a1, a2, b, c, d) values |
|
248 |
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'), |
|
249 |
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'), |
|
250 |
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'), |
|
251 |
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'), |
|
252 |
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'), |
|
253 |
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'), |
|
254 |
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'), |
|
255 |
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'), |
|
256 |
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'), |
|
257 |
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'), |
|
258 |
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'), |
|
259 |
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'), |
|
260 |
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'), |
|
261 |
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'), |
|
262 |
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'), |
|
263 |
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4'), |
|
264 |
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'), |
|
265 |
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'), |
|
266 |
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'), |
|
267 |
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'), |
|
268 |
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'), |
|
269 |
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'), |
|
270 |
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'), |
|
271 |
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'), |
|
272 |
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'), |
|
273 |
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'), |
|
274 |
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'), |
|
275 |
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'), |
|
276 |
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'), |
|
277 |
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'), |
|
278 |
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'), |
|
279 |
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4'); |
|
280 |
--disable_warnings |
|
281 |
create table t4 ( |
|
282 |
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 ' ' |
|
283 |
);
|
|
284 |
--enable_warnings |
|
285 |
insert into t4 (a1, a2, b, c, d, dummy) select * from t1; |
|
286 |
||
287 |
create index idx12672_0 on t4 (a1); |
|
288 |
create index idx12672_1 on t4 (a1,a2,b,c); |
|
289 |
create index idx12672_2 on t4 (a1,a2,b); |
|
290 |
analyze table t4; |
|
291 |
||
292 |
select distinct a1 from t4 where pk_col not in (1,2,3,4); |
|
293 |
||
294 |
drop table t1,t4; |
|
295 |
||
296 |
||
297 |
#
|
|
298 |
# BUG#18819: DELETE IGNORE hangs on foreign key parent delete |
|
299 |
#
|
|
300 |
# The bug itself does not relate to InnoDB, but we have to use foreign |
|
301 |
# keys to reproduce it. |
|
302 |
#
|
|
303 |
--disable_warnings |
|
304 |
DROP TABLE IF EXISTS t2, t1; |
|
305 |
--enable_warnings |
|
306 |
||
307 |
CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE= InnoDB; |
|
308 |
CREATE TABLE t2 ( |
|
309 |
i INT NOT NULL, |
|
310 |
FOREIGN KEY (i) REFERENCES t1 (i) ON DELETE NO ACTION |
|
311 |
) ENGINE= InnoDB; |
|
312 |
||
313 |
INSERT INTO t1 VALUES (1); |
|
314 |
INSERT INTO t2 VALUES (1); |
|
315 |
||
316 |
DELETE IGNORE FROM t1 WHERE i = 1; |
|
317 |
||
318 |
SELECT * FROM t1, t2; |
|
319 |
||
320 |
DROP TABLE t2, t1; |
|
321 |
||
322 |
||
323 |
--echo End of 4.1 tests. |
|
324 |
||
325 |
||
326 |
#
|
|
327 |
# Bug #6142: a problem with the empty innodb table |
|
328 |
# (was part of group_min_max.test) |
|
329 |
#
|
|
330 |
||
331 |
--disable_warnings |
|
332 |
create table t1 ( |
|
333 |
a varchar(30), b varchar(30), primary key(a), key(b) |
|
334 |
);
|
|
335 |
--enable_warnings |
|
336 |
select distinct a from t1; |
|
337 |
drop table t1; |
|
338 |
||
339 |
#
|
|
340 |
# Bug #9798: group by with rollup |
|
341 |
# (was part of group_min_max.test) |
|
342 |
#
|
|
343 |
||
344 |
--disable_warnings |
|
345 |
create table t1(a int, key(a)); |
|
346 |
--enable_warnings |
|
347 |
insert into t1 values(1); |
|
348 |
select a, count(a) from t1 group by a with rollup; |
|
349 |
drop table t1; |
|
350 |
||
351 |
#
|
|
352 |
# Bug #13293 Wrongly used index results in endless loop. |
|
353 |
# (was part of group_min_max.test) |
|
354 |
#
|
|
355 |
create table t1 (f1 int, f2 char(1), primary key(f1,f2)); |
|
356 |
insert into t1 values ( 1,"e"),(2,"a"),( 3,"c"),(4,"d"); |
|
357 |
alter table t1 drop primary key, add primary key (f2, f1); |
|
358 |
explain select distinct f1 a, f1 b from t1; |
|
359 |
explain select distinct f1, f2 from t1; |
|
360 |
drop table t1; |
|
361 |
||
362 |
#
|
|
363 |
# Test for bug #17164: ORed FALSE blocked conversion of outer join into join |
|
364 |
#
|
|
365 |
||
366 |
CREATE TABLE t1 (id int(11) NOT NULL PRIMARY KEY, name varchar(20), |
|
367 |
INDEX (name)); |
|
368 |
CREATE TABLE t2 (id int(11) NOT NULL PRIMARY KEY, fkey int(11)); |
|
369 |
# CREATE TABLE t2 (id int(11) NOT NULL PRIMARY KEY, fkey int(11), |
|
370 |
# FOREIGN KEY (fkey) REFERENCES t2(id)); |
|
371 |
if ($test_foreign_keys) |
|
372 |
{
|
|
373 |
ALTER TABLE t2 ADD FOREIGN KEY (fkey) REFERENCES t2(id); |
|
374 |
}
|
|
375 |
INSERT INTO t1 VALUES (1,'A1'),(2,'A2'),(3,'B'); |
|
376 |
INSERT INTO t2 VALUES (1,1),(2,2),(3,2),(4,3),(5,3); |
|
377 |
||
378 |
EXPLAIN
|
|
379 |
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id |
|
380 |
WHERE t1.name LIKE 'A%'; |
|
381 |
||
382 |
EXPLAIN
|
|
383 |
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id |
|
384 |
WHERE t1.name LIKE 'A%' OR FALSE; |
|
385 |
||
386 |
DROP TABLE t1,t2; |
|
387 |
||
388 |
#
|
|
389 |
# Bug#26159: crash for a loose scan of a table that has been emptied |
|
390 |
#
|
|
391 |
||
392 |
CREATE TABLE t1 ( |
|
393 |
id int NOT NULL, |
|
394 |
name varchar(20) NOT NULL, |
|
395 |
dept varchar(20) NOT NULL, |
|
396 |
age tinyint(3) unsigned NOT NULL, |
|
397 |
PRIMARY KEY (id), |
|
398 |
INDEX (name,dept) |
|
399 |
) ENGINE=InnoDB; |
|
400 |
INSERT INTO t1(id, dept, age, name) VALUES |
|
401 |
(3987, 'cs1', 10, 'rs1'), (3988, 'cs2', 20, 'rs1'), (3995, 'cs3', 10, 'rs2'), |
|
402 |
(3996, 'cs4', 20, 'rs2'), (4003, 'cs5', 10, 'rs3'), (4004, 'cs6', 20, 'rs3'), |
|
403 |
(4011, 'cs7', 10, 'rs4'), (4012, 'cs8', 20, 'rs4'), (4019, 'cs9', 10, 'rs5'), |
|
404 |
(4020, 'cs10', 20, 'rs5'),(4027, 'cs11', 10, 'rs6'),(4028, 'cs12', 20, 'rs6'); |
|
405 |
||
406 |
EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5'; |
|
407 |
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5'; |
|
408 |
DELETE FROM t1; |
|
409 |
EXPLAIN SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5'; |
|
410 |
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5'; |
|
411 |
||
412 |
DROP TABLE t1; |
|
413 |
||
414 |
--source include/innodb_rollback_on_timeout.inc |
|
415 |
||
416 |
#
|
|
417 |
# Bug #27210: INNODB ON DUPLICATE KEY UPDATE |
|
418 |
#
|
|
419 |
||
420 |
connect (con1,localhost,root,,); |
|
421 |
connection con1; |
|
422 |
drop table if exists `test`; |
|
423 |
CREATE TABLE `test` (`test1` varchar(3) NOT NULL, |
|
424 |
`test2` varchar(4) NOT NULL,PRIMARY KEY (`test1`)) |
|
425 |
ENGINE=InnoDB DEFAULT CHARSET=latin1; |
|
426 |
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '5678'); |
|
427 |
disconnect con1; |
|
428 |
connect (con2,localhost,root,,); |
|
429 |
connection con2; |
|
430 |
select * from test; |
|
431 |
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '1234') |
|
432 |
ON DUPLICATE KEY UPDATE `test2` = '1234'; |
|
433 |
select * from test; |
|
434 |
flush tables; |
|
435 |
select * from test; |
|
436 |
disconnect con2; |
|
437 |
connection default; |
|
438 |
drop table test; |
|
439 |
||
440 |
--source include/innodb_rollback_on_timeout.inc |
|
441 |
||
442 |
#
|
|
443 |
# Bug #27650: INSERT fails after multi-row INSERT of the form: |
|
444 |
# INSERT INTO t (id...) VALUES (NULL...) ON DUPLICATE KEY UPDATE id=VALUES(id) |
|
445 |
#
|
|
446 |
||
447 |
create table t1( |
|
448 |
id int auto_increment, |
|
449 |
c char(1) not null, |
|
450 |
counter int not null default 1, |
|
451 |
primary key (id), |
|
452 |
unique key (c) |
|
453 |
) engine=innodb; |
|
454 |
||
455 |
insert into t1 (id, c) values |
|
456 |
(NULL, 'a'), |
|
457 |
(NULL, 'a') |
|
458 |
on duplicate key update id = values(id), counter = counter + 1; |
|
459 |
||
460 |
select * from t1; |
|
461 |
||
462 |
insert into t1 (id, c) values |
|
463 |
(NULL, 'b') |
|
464 |
on duplicate key update id = values(id), counter = counter + 1; |
|
465 |
||
466 |
select * from t1; |
|
467 |
||
468 |
truncate table t1; |
|
469 |
||
470 |
insert into t1 (id, c) values (NULL, 'a'); |
|
471 |
||
472 |
select * from t1; |
|
473 |
||
474 |
insert into t1 (id, c) values (NULL, 'b'), (NULL, 'b') |
|
475 |
on duplicate key update id = values(id), c = values(c), counter = counter + 1; |
|
476 |
||
477 |
select * from t1; |
|
478 |
||
479 |
insert into t1 (id, c) values (NULL, 'a') |
|
480 |
on duplicate key update id = values(id), c = values(c), counter = counter + 1; |
|
481 |
||
482 |
select * from t1; |
|
483 |
||
484 |
drop table t1; |
|
485 |
||
486 |
#
|
|
487 |
# Bug #28189: optimizer erroniously prefers ref access to range access |
|
488 |
# for an InnoDB table |
|
489 |
#
|
|
490 |
||
491 |
CREATE TABLE t1( |
|
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) |
|
497 |
) ENGINE=MyISAM; |
|
498 |
||
499 |
CREATE TABLE t2( |
|
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) |
|
505 |
) ENGINE=InnoDB; |
|
506 |
||
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); |
|
512 |
||
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); |
|
526 |
OPTIMIZE TABLE t1; |
|
527 |
||
528 |
SELECT COUNT(*) FROM t1; |
|
529 |
SELECT COUNT(*) FROM t1 WHERE acct_id=785; |
|
530 |
||
531 |
EXPLAIN SELECT COUNT(*) FROM t1 WHERE stat_id IN (1,3) AND acct_id=785; |
|
532 |
||
533 |
INSERT INTO t2 SELECT * FROM t1; |
|
534 |
OPTIMIZE TABLE t2; |
|
535 |
||
536 |
EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785; |
|
537 |
||
538 |
DROP TABLE t1,t2; |
|
539 |
||
540 |
#
|
|
541 |
# Bug #28652: assert when alter innodb table operation |
|
542 |
#
|
|
543 |
create table t1(a int) engine=innodb; |
|
544 |
alter table t1 comment '123'; |
|
545 |
show create table t1; |
|
546 |
drop table t1; |
|
547 |
||
548 |
#
|
|
549 |
# Bug #25866: Getting "#HY000 Can't find record in..." on and INSERT |
|
550 |
#
|
|
551 |
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8; |
|
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'; |
|
558 |
||
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'; |
|
567 |
||
568 |
CREATE 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'; |
|
576 |
||
577 |
DROP TABLE t1,t2,t3; |
|
578 |
||
579 |
#
|
|
580 |
# Test bug when trying to drop data file which no InnoDB directory entry |
|
581 |
#
|
|
582 |
||
583 |
create table t1 (a int) engine=innodb; |
|
584 |
copy_file $MYSQLTEST_VARDIR/master-data/test/t1.frm $MYSQLTEST_VARDIR/master-data/test/bug29807.frm; |
|
585 |
--error 1146 |
|
586 |
select * from bug29807; |
|
587 |
drop table t1; |
|
588 |
--error 1051 |
|
589 |
drop table bug29807; |
|
590 |
create table bug29807 (a int); |
|
591 |
drop table bug29807; |
|
592 |
||
593 |
||
594 |
#
|
|
595 |
# Bug #29154: LOCK TABLES is not atomic when >1 InnoDB tables are locked |
|
596 |
#
|
|
597 |
||
598 |
CREATE TABLE t1 (a INT) ENGINE=InnoDB; |
|
599 |
CREATE TABLE t2 (a INT) ENGINE=InnoDB; |
|
600 |
||
601 |
CONNECT (c1,localhost,root,,); |
|
602 |
CONNECT (c2,localhost,root,,); |
|
603 |
||
604 |
--echo switch to connection c1 |
|
605 |
CONNECTION c1; |
|
606 |
SET AUTOCOMMIT=0; |
|
607 |
INSERT INTO t2 VALUES (1); |
|
608 |
||
609 |
--echo switch to connection c2 |
|
610 |
CONNECTION c2; |
|
611 |
SET AUTOCOMMIT=0; |
|
612 |
--error ER_LOCK_WAIT_TIMEOUT |
|
613 |
LOCK TABLES t1 READ, t2 READ; |
|
614 |
||
615 |
--echo switch to connection c1 |
|
616 |
CONNECTION c1; |
|
617 |
COMMIT; |
|
618 |
INSERT INTO t1 VALUES (1); |
|
619 |
||
620 |
--echo switch to connection default |
|
621 |
CONNECTION default; |
|
622 |
SET AUTOCOMMIT=default; |
|
623 |
DISCONNECT c1; |
|
624 |
DISCONNECT c2; |
|
625 |
DROP TABLE t1,t2; |
|
626 |
||
627 |
#
|
|
628 |
# Bug #25798: a query with forced index merge returns wrong result |
|
629 |
#
|
|
630 |
||
631 |
CREATE TABLE t1 ( |
|
632 |
id int NOT NULL auto_increment PRIMARY KEY, |
|
633 |
b int NOT NULL, |
|
634 |
c datetime NOT NULL, |
|
635 |
INDEX idx_b(b), |
|
636 |
INDEX idx_c(c) |
|
637 |
) ENGINE=InnoDB; |
|
638 |
||
639 |
CREATE TABLE t2 ( |
|
640 |
b int NOT NULL auto_increment PRIMARY KEY, |
|
641 |
c datetime NOT NULL |
|
642 |
) ENGINE= MyISAM; |
|
643 |
||
644 |
INSERT INTO t2(c) VALUES ('2007-01-01'); |
|
645 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
646 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
647 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
648 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
649 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
650 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
651 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
652 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
653 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
654 |
INSERT INTO t2(c) SELECT c FROM t2; |
|
655 |
||
656 |
INSERT INTO t1(b,c) SELECT b,c FROM t2; |
|
657 |
UPDATE t2 SET c='2007-01-02'; |
|
658 |
INSERT INTO t1(b,c) SELECT b,c FROM t2; |
|
659 |
UPDATE t2 SET c='2007-01-03'; |
|
660 |
INSERT INTO t1(b,c) SELECT b,c FROM t2; |
|
661 |
||
662 |
set @@sort_buffer_size=8192; |
|
663 |
||
664 |
SELECT COUNT(*) FROM t1; |
|
665 |
||
666 |
--replace_column 9 # |
|
667 |
EXPLAIN
|
|
668 |
SELECT COUNT(*) FROM t1 |
|
669 |
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1; |
|
670 |
SELECT COUNT(*) FROM t1 |
|
671 |
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1; |
|
672 |
||
673 |
--replace_column 9 # |
|
674 |
EXPLAIN
|
|
675 |
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c) |
|
676 |
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1; |
|
677 |
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c) |
|
678 |
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1; |
|
679 |
||
680 |
set @@sort_buffer_size=default; |
|
681 |
||
682 |
DROP TABLE t1,t2; |
|
683 |
||
684 |
# Test of behaviour with CREATE ... SELECT |
|
685 |
#
|
|
686 |
||
687 |
CREATE TABLE t1 (a int, b int); |
|
688 |
insert into t1 values (1,1),(1,2); |
|
689 |
--error ER_DUP_ENTRY |
|
690 |
CREATE TABLE t2 (primary key (a)) select * from t1; |
|
691 |
# This should give warning |
|
692 |
drop table if exists t2; |
|
693 |
--error ER_DUP_ENTRY |
|
694 |
CREATE TEMPORARY TABLE t2 (primary key (a)) select * from t1; |
|
695 |
# This should give warning |
|
696 |
drop table if exists t2; |
|
697 |
CREATE TABLE t2 (a int, b int, primary key (a)); |
|
698 |
BEGIN; |
|
699 |
INSERT INTO t2 values(100,100); |
|
700 |
--error ER_DUP_ENTRY |
|
701 |
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; |
|
702 |
SELECT * from t2; |
|
703 |
ROLLBACK; |
|
704 |
SELECT * from t2; |
|
705 |
TRUNCATE table t2; |
|
706 |
--error ER_DUP_ENTRY |
|
707 |
INSERT INTO t2 select * from t1; |
|
708 |
SELECT * from t2; |
|
709 |
drop table t2; |
|
710 |
||
711 |
CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)); |
|
712 |
BEGIN; |
|
713 |
INSERT INTO t2 values(100,100); |
|
714 |
--error ER_DUP_ENTRY |
|
715 |
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; |
|
716 |
SELECT * from t2; |
|
717 |
COMMIT; |
|
718 |
BEGIN; |
|
719 |
INSERT INTO t2 values(101,101); |
|
720 |
--error ER_DUP_ENTRY |
|
721 |
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; |
|
722 |
SELECT * from t2; |
|
723 |
ROLLBACK; |
|
724 |
SELECT * from t2; |
|
725 |
TRUNCATE table t2; |
|
726 |
--error ER_DUP_ENTRY |
|
727 |
INSERT INTO t2 select * from t1; |
|
728 |
SELECT * from t2; |
|
729 |
drop table t1,t2; |
|
730 |
||
731 |
#
|
|
732 |
# Bug#17530: Incorrect key truncation on table creation caused server crash. |
|
733 |
#
|
|
734 |
create table t1(f1 varchar(800) binary not null, key(f1)) |
|
735 |
character set utf8 collate utf8_general_ci; |
|
736 |
insert into t1 values('aaa'); |
|
737 |
drop table t1; |
|
738 |
||
739 |
||
740 |
#
|
|
741 |
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan |
|
742 |
#
|
|
743 |
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB; |
|
744 |
||
745 |
INSERT INTO t1 VALUES ( 1 , 1 , 1); |
|
746 |
INSERT INTO t1 SELECT a + 1 , MOD(a + 1 , 20), 1 FROM t1; |
|
747 |
INSERT INTO t1 SELECT a + 2 , MOD(a + 2 , 20), 1 FROM t1; |
|
748 |
INSERT INTO t1 SELECT a + 4 , MOD(a + 4 , 20), 1 FROM t1; |
|
749 |
INSERT INTO t1 SELECT a + 8 , MOD(a + 8 , 20), 1 FROM t1; |
|
750 |
INSERT INTO t1 SELECT a + 16, MOD(a + 16, 20), 1 FROM t1; |
|
751 |
INSERT INTO t1 SELECT a + 32, MOD(a + 32, 20), 1 FROM t1; |
|
752 |
INSERT INTO t1 SELECT a + 64, MOD(a + 64, 20), 1 FROM t1; |
|
753 |
||
754 |
EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b; |
|
755 |
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b; |
|
756 |
DROP TABLE t1; |
|
757 |
||
758 |
--source include/innodb_rollback_on_timeout.inc |
|
759 |
||
760 |
#
|
|
761 |
# Bug#27296 Assertion in ALTER TABLE SET DEFAULT in Linux Debug build |
|
762 |
# (possible deadlock). |
|
763 |
#
|
|
764 |
# The bug is applicable only to a transactoinal table. |
|
765 |
# Cover with tests behavior that no longer causes an |
|
766 |
# assertion. |
|
767 |
#
|
|
768 |
--disable_warnings |
|
769 |
drop table if exists t1; |
|
770 |
--enable_warnings |
|
771 |
create table t1 (a int) engine=innodb; |
|
772 |
alter table t1 alter a set default 1; |
|
773 |
drop table t1; |
|
774 |
||
775 |
--echo |
|
776 |
--echo Bug#24918 drop table and lock / inconsistent between |
|
777 |
--echo perm and temp tables |
|
778 |
--echo |
|
779 |
--echo Check transactional tables under LOCK TABLES |
|
780 |
--echo |
|
781 |
--disable_warnings |
|
782 |
drop table if exists t24918, t24918_tmp, t24918_trans, t24918_trans_tmp, |
|
783 |
t24918_access; |
|
784 |
--enable_warnings |
|
785 |
create table t24918_access (id int); |
|
786 |
create table t24918 (id int) engine=myisam; |
|
787 |
create temporary table t24918_tmp (id int) engine=myisam; |
|
788 |
create table t24918_trans (id int) engine=innodb; |
|
789 |
create temporary table t24918_trans_tmp (id int) engine=innodb; |
|
790 |
||
791 |
lock table t24918 write, t24918_tmp write, t24918_trans write, t24918_trans_tmp write; |
|
792 |
drop table t24918; |
|
793 |
--error ER_TABLE_NOT_LOCKED |
|
794 |
select * from t24918_access; |
|
795 |
drop table t24918_trans; |
|
796 |
--error ER_TABLE_NOT_LOCKED |
|
797 |
select * from t24918_access; |
|
798 |
drop table t24918_trans_tmp; |
|
799 |
--error ER_TABLE_NOT_LOCKED |
|
800 |
select * from t24918_access; |
|
801 |
drop table t24918_tmp; |
|
802 |
--error ER_TABLE_NOT_LOCKED |
|
803 |
select * from t24918_access; |
|
804 |
unlock tables; |
|
805 |
||
806 |
drop table t24918_access; |
|
807 |
#
|
|
808 |
# Bug #28591: MySQL need not sort the records in case of ORDER BY |
|
809 |
# primary_key on InnoDB table |
|
810 |
#
|
|
811 |
||
812 |
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a), KEY bkey (b)) ENGINE=InnoDB; |
|
813 |
INSERT INTO t1 VALUES (1,2),(3,2),(2,2),(4,2),(5,2),(6,2),(7,2),(8,2); |
|
814 |
INSERT INTO t1 SELECT a + 8, 2 FROM t1; |
|
815 |
INSERT INTO t1 SELECT a + 16, 1 FROM t1; |
|
816 |
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a; |
|
817 |
SELECT * FROM t1 WHERE b=2 ORDER BY a; |
|
818 |
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a; |
|
819 |
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a; |
|
820 |
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a; |
|
821 |
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a; |
|
822 |
||
823 |
CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a), KEY bkey (b,c)) |
|
824 |
ENGINE=InnoDB; |
|
825 |
INSERT INTO t2 VALUES (1,1,1),(3,1,1),(2,1,1),(4,1,1); |
|
826 |
INSERT INTO t2 SELECT a + 4, 1, 1 FROM t2; |
|
827 |
INSERT INTO t2 SELECT a + 8, 1, 1 FROM t2; |
|
828 |
||
829 |
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 ORDER BY a; |
|
830 |
SELECT * FROM t2 WHERE b=1 ORDER BY a; |
|
831 |
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a; |
|
832 |
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a; |
|
833 |
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a; |
|
834 |
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a; |
|
835 |
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a; |
|
836 |
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a; |
|
837 |
||
838 |
DROP TABLE t1,t2; |
|
839 |
||
840 |
||
841 |
#
|
|
842 |
# Bug #28125: ERROR 2013 when adding index. |
|
843 |
#
|
|
844 |
create table t1(a text) engine=innodb default charset=utf8; |
|
845 |
insert into t1 values('aaa'); |
|
846 |
alter table t1 add index(a(1024)); |
|
847 |
show create table t1; |
|
848 |
drop table t1; |
|
849 |
||
850 |
#
|
|
851 |
# Bug #28570: handler::index_read() is called with different find_flag when |
|
852 |
# ORDER BY is used |
|
853 |
#
|
|
854 |
||
855 |
CREATE TABLE t1 ( |
|
856 |
a INT, |
|
857 |
b INT, |
|
858 |
KEY (b) |
|
859 |
) ENGINE=InnoDB; |
|
860 |
||
861 |
INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30); |
|
862 |
||
863 |
START TRANSACTION; |
|
864 |
SELECT * FROM t1 WHERE b=20 FOR UPDATE; |
|
865 |
||
866 |
--connect (conn2, localhost, root,,test) |
|
867 |
||
868 |
# This statement gives a "failed: 1205: Lock wait timeout exceeded; try |
|
869 |
# restarting transaction" message when the bug is present. |
|
870 |
START TRANSACTION; |
|
871 |
SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE; |
|
872 |
ROLLBACK; |
|
873 |
||
874 |
--disconnect conn2 |
|
875 |
--connection default |
|
876 |
||
877 |
ROLLBACK; |
|
878 |
DROP TABLE t1; |
|
879 |
||
880 |
#
|
|
881 |
# Bug#30596: GROUP BY optimization gives wrong result order |
|
882 |
#
|
|
883 |
CREATE TABLE t1( |
|
884 |
a INT, |
|
885 |
b INT NOT NULL, |
|
886 |
c INT NOT NULL, |
|
887 |
d INT, |
|
888 |
UNIQUE KEY (c,b) |
|
889 |
) engine=innodb; |
|
890 |
||
891 |
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4); |
|
892 |
||
893 |
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d; |
|
894 |
SELECT c,b,d FROM t1 GROUP BY c,b,d; |
|
895 |
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL; |
|
896 |
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL; |
|
897 |
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d; |
|
898 |
SELECT c,b,d FROM t1 ORDER BY c,b,d; |
|
899 |
||
900 |
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b; |
|
901 |
SELECT c,b,d FROM t1 GROUP BY c,b; |
|
902 |
EXPLAIN SELECT c,b FROM t1 GROUP BY c,b; |
|
903 |
SELECT c,b FROM t1 GROUP BY c,b; |
|
904 |
||
905 |
DROP TABLE t1; |
|
906 |
||
907 |
#
|
|
908 |
# Bug #31001: ORDER BY DESC in InnoDB not working |
|
909 |
#
|
|
910 |
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), INDEX b (b)) ENGINE=InnoDB; |
|
911 |
INSERT INTO t1(a,b) VALUES (1,1), (2,2), (3,2); |
|
912 |
||
913 |
#The two queries below should produce different results, but they don't. |
|
914 |
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a ASC; |
|
915 |
SELECT * FROM t1 WHERE b=2 ORDER BY a ASC; |
|
916 |
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a DESC; |
|
917 |
SELECT * FROM t1 WHERE b=2 ORDER BY a DESC; |
|
918 |
||
919 |
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a ASC; |
|
920 |
SELECT * FROM t1 ORDER BY b ASC, a ASC; |
|
921 |
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a DESC; |
|
922 |
SELECT * FROM t1 ORDER BY b DESC, a DESC; |
|
923 |
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a DESC; |
|
924 |
SELECT * FROM t1 ORDER BY b ASC, a DESC; |
|
925 |
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a ASC; |
|
926 |
SELECT * FROM t1 ORDER BY b DESC, a ASC; |
|
927 |
||
928 |
DROP TABLE t1; |
|
929 |
||
930 |
###########################################################################
|
|
931 |
||
932 |
--echo |
|
933 |
--echo # |
|
934 |
--echo # Bug#27610: ALTER TABLE ROW_FORMAT=... does not rebuild the table. |
|
935 |
--echo # |
|
936 |
||
937 |
--echo |
|
938 |
--echo # - prepare; |
|
939 |
--echo |
|
940 |
||
941 |
--disable_warnings |
|
942 |
DROP TABLE IF EXISTS t1; |
|
943 |
--enable_warnings |
|
944 |
||
945 |
--echo |
|
946 |
||
947 |
CREATE TABLE t1(c INT) |
|
948 |
ENGINE = InnoDB |
|
949 |
ROW_FORMAT = COMPACT; |
|
950 |
||
951 |
--echo |
|
952 |
--echo # - initial check; |
|
953 |
--echo |
|
954 |
||
955 |
SELECT table_schema, table_name, row_format |
|
956 |
FROM INFORMATION_SCHEMA.TABLES |
|
957 |
WHERE table_schema = DATABASE() AND table_name = 't1'; |
|
958 |
||
959 |
--echo |
|
960 |
--echo # - change ROW_FORMAT and check; |
|
961 |
--echo |
|
962 |
||
963 |
ALTER TABLE t1 ROW_FORMAT = REDUNDANT; |
|
964 |
||
965 |
--echo |
|
966 |
||
967 |
SELECT table_schema, table_name, row_format |
|
968 |
FROM INFORMATION_SCHEMA.TABLES |
|
969 |
WHERE table_schema = DATABASE() AND table_name = 't1'; |
|
970 |
||
971 |
--echo |
|
972 |
--echo # - that's it, cleanup. |
|
973 |
--echo |
|
974 |
||
975 |
DROP TABLE t1; |
|
976 |
||
977 |
###########################################################################
|
|
978 |
||
979 |
#
|
|
980 |
# Bug #31137: Assertion failed: primary_key_no == -1 || primary_key_no == 0 |
|
981 |
#
|
|
982 |
create table t1(a char(10) not null, unique key aa(a(1)), |
|
983 |
b char(4) not null, unique key bb(b(4))) engine=innodb; |
|
984 |
desc t1; |
|
985 |
show create table t1; |
|
986 |
drop table t1; |
|
987 |
||
988 |
#
|
|
989 |
# Bug #32815: query with ORDER BY and a possible ref_or_null access |
|
990 |
#
|
|
991 |
||
992 |
CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB; |
|
993 |
INSERT INTO t1 VALUES |
|
994 |
(191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); |
|
995 |
||
996 |
EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; |
|
997 |
SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; |
|
998 |
||
999 |
DROP TABLE t1; |
|
1000 |
||
1001 |
#
|
|
1002 |
# Bug #34223: Assertion failed: (optp->var_type & 127) == 8, |
|
1003 |
# file .\my_getopt.c, line 830 |
|
1004 |
#
|
|
1005 |
||
1006 |
set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment; |
|
1007 |
set global innodb_autoextend_increment=8; |
|
1008 |
set global innodb_autoextend_increment=@my_innodb_autoextend_increment; |
|
1009 |
||
1010 |
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency; |
|
1011 |
set global innodb_commit_concurrency=0; |
|
1012 |
set global innodb_commit_concurrency=@my_innodb_commit_concurrency; |
|
1013 |
||
1014 |
--echo End of 5.0 tests |
|
1015 |
||
1016 |
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY |
|
1017 |
# UPDATE": if the row is updated, it's like a regular UPDATE: |
|
1018 |
# LAST_INSERT_ID() is not affected. |
|
1019 |
CREATE TABLE `t2` ( |
|
1020 |
`k` int(11) NOT NULL auto_increment, |
|
1021 |
`a` int(11) default NULL, |
|
1022 |
`c` int(11) default NULL, |
|
1023 |
PRIMARY KEY (`k`), |
|
1024 |
UNIQUE KEY `idx_1` (`a`) |
|
1025 |
);
|
|
1026 |
insert into t2 ( a ) values ( 6 ) on duplicate key update c = |
|
1027 |
ifnull( c, |
|
1028 |
0 ) + 1; |
|
1029 |
insert into t2 ( a ) values ( 7 ) on duplicate key update c = |
|
1030 |
ifnull( c, |
|
1031 |
0 ) + 1; |
|
1032 |
select last_insert_id(); |
|
1033 |
select * from t2; |
|
1034 |
insert into t2 ( a ) values ( 6 ) on duplicate key update c = |
|
1035 |
ifnull( c, |
|
1036 |
0 ) + 1; |
|
1037 |
select last_insert_id(); |
|
1038 |
# test again when last_insert_id() is 0 initially |
|
1039 |
select last_insert_id(0); |
|
1040 |
insert into t2 ( a ) values ( 6 ) on duplicate key update c = |
|
1041 |
ifnull( c, |
|
1042 |
0 ) + 1; |
|
1043 |
select last_insert_id(); |
|
1044 |
select * from t2; |
|
1045 |
||
1046 |
# Test of LAST_INSERT_ID() when autogenerated will fail: |
|
1047 |
# last_insert_id() should not change |
|
1048 |
insert ignore into t2 values (null,6,1),(10,8,1); |
|
1049 |
select last_insert_id(); |
|
1050 |
# First and second autogenerated will fail, last_insert_id() should |
|
1051 |
# point to third |
|
1052 |
insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1); |
|
1053 |
select last_insert_id(); |
|
1054 |
select * from t2; |
|
1055 |
||
1056 |
# Test of the workaround which enables people to know the id of the |
|
1057 |
# updated row in INSERT ON DUPLICATE KEY UPDATE, by using |
|
1058 |
# LAST_INSERT_ID(autoinc_col) in the UPDATE clause. |
|
1059 |
||
1060 |
insert into t2 ( a ) values ( 6 ) on duplicate key update c = |
|
1061 |
ifnull( c, |
|
1062 |
0 ) + 1, k=last_insert_id(k); |
|
1063 |
select last_insert_id(); |
|
1064 |
select * from t2; |
|
1065 |
||
1066 |
drop table t2; |
|
1067 |
||
1068 |
||
1069 |
#
|
|
1070 |
# Tests for bug #28415 "Some ALTER TABLE statements no longer work |
|
1071 |
# under LOCK TABLES" and some aspects of fast ALTER TABLE behaviour |
|
1072 |
# for transactional tables. |
|
1073 |
#
|
|
1074 |
--disable_warnings |
|
1075 |
drop table if exists t1, t2; |
|
1076 |
--enable_warnings |
|
1077 |
create table t1 (i int); |
|
1078 |
alter table t1 modify i int default 1; |
|
1079 |
alter table t1 modify i int default 2, rename t2; |
|
1080 |
lock table t2 write; |
|
1081 |
alter table t2 modify i int default 3; |
|
1082 |
unlock tables; |
|
1083 |
lock table t2 write; |
|
1084 |
alter table t2 modify i int default 4, rename t1; |
|
1085 |
unlock tables; |
|
1086 |
drop table t1; |
|
1087 |
||
1088 |
||
1089 |
#
|
|
1090 |
# Some more tests for ALTER TABLE and LOCK TABLES for transactional tables. |
|
1091 |
#
|
|
1092 |
# Table which is altered under LOCK TABLES should stay in list of locked |
|
1093 |
# tables and be available after alter takes place unless ALTER contains |
|
1094 |
# RENAME clause. We should see the new definition of table, of course. |
|
1095 |
# Before 5.1 this behavior was inconsistent across the platforms and |
|
1096 |
# different engines. See also tests in alter_table.test |
|
1097 |
#
|
|
1098 |
--disable_warnings |
|
1099 |
drop table if exists t1; |
|
1100 |
--enable_warnings |
|
1101 |
create table t1 (i int); |
|
1102 |
insert into t1 values (); |
|
1103 |
lock table t1 write; |
|
1104 |
# Example of so-called 'fast' ALTER TABLE |
|
1105 |
alter table t1 modify i int default 1; |
|
1106 |
insert into t1 values (); |
|
1107 |
select * from t1; |
|
1108 |
# And now full-blown ALTER TABLE |
|
1109 |
alter table t1 change i c char(10) default "Two"; |
|
1110 |
insert into t1 values (); |
|
1111 |
select * from t1; |
|
1112 |
unlock tables; |
|
1113 |
select * from t1; |
|
1114 |
drop tables t1; |
|
1115 |
||
1116 |
#
|
|
1117 |
# Bug#29310: An InnoDB table was updated when the data wasn't actually changed. |
|
1118 |
#
|
|
1119 |
create table t1(f1 varchar(5) unique, f2 timestamp NOT NULL DEFAULT |
|
1120 |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); |
|
1121 |
insert into t1(f1) values(1); |
|
1122 |
--replace_column 1 # |
|
1123 |
select @a:=f2 from t1; |
|
1124 |
--sleep 5 |
|
1125 |
update t1 set f1=1; |
|
1126 |
--replace_column 1 # |
|
1127 |
select @b:=f2 from t1; |
|
1128 |
select if(@a=@b,"ok","wrong"); |
|
1129 |
--sleep 5 |
|
1130 |
insert into t1(f1) values (1) on duplicate key update f1="1"; |
|
1131 |
--replace_column 1 # |
|
1132 |
select @b:=f2 from t1; |
|
1133 |
select if(@a=@b,"ok","wrong"); |
|
1134 |
--sleep 5 |
|
1135 |
insert into t1(f1) select f1 from t1 on duplicate key update f1="1"; |
|
1136 |
--replace_column 1 # |
|
1137 |
select @b:=f2 from t1; |
|
1138 |
select if(@a=@b,"ok","wrong"); |
|
1139 |
drop table t1; |
|
1140 |
||
1141 |
# Bug#30747 Create table with identical constraint names behaves incorrectly |
|
1142 |
#
|
|
1143 |
||
1144 |
if ($test_foreign_keys) |
|
1145 |
{
|
|
1146 |
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb; |
|
1147 |
--error ER_WRONG_FK_DEF |
|
1148 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1149 |
CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; |
|
1150 |
--error ER_WRONG_FK_DEF |
|
1151 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1152 |
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; |
|
1153 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1154 |
CONSTRAINT c1 FOREIGN KEY c2 (c) REFERENCES t1 (a) ON DELETE NO ACTION, |
|
1155 |
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; |
|
1156 |
ALTER TABLE t2 DROP FOREIGN KEY c2; |
|
1157 |
DROP TABLE t2; |
|
1158 |
--error ER_WRONG_FK_DEF |
|
1159 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1160 |
FOREIGN KEY (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; |
|
1161 |
--error ER_WRONG_FK_DEF |
|
1162 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1163 |
FOREIGN KEY f1 (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; |
|
1164 |
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), |
|
1165 |
CONSTRAINT c1 FOREIGN KEY f1 (c) REFERENCES t1 (a) ON DELETE NO ACTION, |
|
1166 |
CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION, |
|
1167 |
FOREIGN KEY f3 (c) REFERENCES t1 (a) ON UPDATE NO ACTION, |
|
1168 |
FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; |
|
1169 |
SHOW CREATE TABLE t2; |
|
1170 |
DROP TABLE t2; |
|
1171 |
DROP TABLE t1; |
|
1172 |
}
|
|
1173 |
||
1174 |
#
|
|
1175 |
# Bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB and |
|
1176 |
# auto_increment keys |
|
1177 |
#
|
|
1178 |
create table t1 (a int auto_increment primary key) engine=innodb; |
|
1179 |
alter table t1 order by a; |
|
1180 |
drop table t1; |
|
1181 |
||
1182 |
#
|
|
1183 |
# Bug #33697: ORDER BY primary key DESC vs. ref access + filesort |
|
1184 |
# (reproduced only with InnoDB tables) |
|
1185 |
#
|
|
1186 |
||
1187 |
CREATE TABLE t1 |
|
1188 |
(vid integer NOT NULL, |
|
1189 |
tid integer NOT NULL, |
|
1190 |
idx integer NOT NULL, |
|
1191 |
name varchar(128) NOT NULL, |
|
1192 |
type varchar(128) NULL, |
|
1193 |
PRIMARY KEY(idx, vid, tid), |
|
1194 |
UNIQUE(vid, tid, name) |
|
1195 |
) ENGINE=InnoDB; |
|
1196 |
||
1197 |
INSERT INTO t1 VALUES |
|
1198 |
(1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL), |
|
1199 |
(5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL), |
|
1200 |
(4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL), |
|
1201 |
(4,1,3,'pk',NULL),(5,1,3,'c2',NULL), |
|
1202 |
(2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL); |
|
1203 |
||
1204 |
EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; |
|
1205 |
||
1206 |
SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; |
|
1207 |
||
1208 |
DROP TABLE t1; |
|
1209 |
||
1210 |
#
|
|
1211 |
# Bug#21704: Renaming column does not update FK definition. |
|
1212 |
#
|
|
1213 |
||
1214 |
--disable_warnings |
|
1215 |
DROP TABLE IF EXISTS t1; |
|
1216 |
DROP TABLE IF EXISTS t2; |
|
1217 |
--enable_warnings |
|
1218 |
||
1219 |
CREATE TABLE t1(id INT PRIMARY KEY) |
|
1220 |
ENGINE=innodb; |
|
1221 |
||
1222 |
CREATE TABLE t2( |
|
1223 |
t1_id INT PRIMARY KEY, |
|
1224 |
CONSTRAINT fk1 FOREIGN KEY (t1_id) REFERENCES t1(id)) |
|
1225 |
ENGINE=innodb; |
|
1226 |
||
1227 |
--echo |
|
1228 |
||
1229 |
--disable_result_log |
|
1230 |
--error ER_ERROR_ON_RENAME |
|
1231 |
ALTER TABLE t1 CHANGE id id2 INT; |
|
1232 |
--enable_result_log |
|
1233 |
||
1234 |
--echo |
|
1235 |
||
1236 |
DROP TABLE t2; |
|
1237 |
DROP TABLE t1; |
|
1238 |
||
1239 |
--echo End of 5.1 tests |