~ubuntu-branches/ubuntu/maverick/mysql-5.1/maverick-proposed

« back to all changes in this revision

Viewing changes to mysql-test/suite/innodb/t/innodb_mysql.test

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2010-08-04 13:18:27 UTC
  • mfrom: (1.2.2 upstream) (2.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20100804131827-4tjg88vr9dd49s3k
Tags: 5.1.49-1ubuntu1
* Merge from debian unstable:
  + debian/control:
     * Update maintainer according to spec.
     * Move section from "misc" to "database".
     * Added libmysqlclient16-dev an empty transitional package. 
     * Added mysql-client-core-5.1 package.
     * Suggest mailx for mysql-server-5.1
     * Add mysql-testsuite package so you can run the testsuite seperately.
  + debian/additions/my.cnf:
    * Remove language options. Error message files are located in a different directory in Mysql
      5.0. Setting the language option to use /usr/share/mysql/english breaks Mysql 5.0. Both 5.0
      and 5.1 use a different value that works. (LP: #316974)
  + Add apparmor profile:
    + debian/apparmor-profile: apparmor-profile
    + debian/rules, debian/mysql-server-5.1.files: install apparmor profile
    + debian/mysql-server-5.1.dirs: add etc/apparmor.d/fore-complain
    + debian/mysql-server-5.1.postrm: remove symlink in force-complain/ on purge.
    + debian/mysql-server-5.1.README.Debian: add apparmor documentation.
    + debian/additions/my.cnf: Add warning about apparmor. (LP: #201799)
    + debian/mysql-server-5.1.postinst: reload apparmor profiles
  * Convert the package from sysvinit to upstart:
    + debian/mysql-server-5.1.mysql.upstart: Add upstart script.
    + debian/mysql-server-5.1.mysql.init: Dropped, unused now with upstart.
    + debian/additions/mysqld_safe_syslog.cnf: Dropped, unused now with upstart.
    + debian/additons/my.cnf: Remove pid declaration and setup error logging to /var/log/mysql since
      we're not piping anything around logger anymore.
    + debian/rules, debian/mysql-server-5.1.logcheck.ignore.{paranoid,worstation},
      debian/mysql-server-5.1.logcheck.ignore.server: : Remove references to mysqld_safe
    + debian/patches/38_scripts_mysqld_safe.sh_signals.dpatch: Dropped
  * Added -fno-strict-aliasing to CFLAGS to get around mysql testsuite build failures.
  * Add Apport hook (LP: #354188):
    + debian/mysql-server-5.1.py: apport package hook
    + debian/rules: Make it installable
  * debian/mysql-server-5.1.mysql-server.logrotate: Check to see if mysql is running before
    running logrotate. (LP: #513135)
  * Make the testsuite installable. (LP: #530752)
    + debian/mysql-server-5.1.files, debian/rules: install apport package hook
  * debian/mysql-server-5.1.preinst: Set mysql user's home directory
    to /nonexistent to protect against having the /var/lib/mysql
    user-writeable. If an attacker can trick mysqld into creating
    dot files in the home directory, he could do .rhost-like attacks
    on the system. (LP: #293258)
  * debian/control: mysql-client-5.1 should depend on mysql-core-client-5.1.
    (LP: #590952) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# t/innodb_mysql.test
 
2
#
 
3
# Last update:
 
4
# 2006-07-26 ML test refactored (MySQL 5.1)
 
5
#               main testing code t/innodb_mysql.test -> include/mix1.inc              
 
6
#
 
7
 
 
8
-- source include/have_innodb.inc
 
9
let $engine_type= InnoDB;
 
10
let $other_engine_type= MEMORY;
 
11
# InnoDB does support FOREIGN KEYFOREIGN KEYs
 
12
let $test_foreign_keys= 1;
 
13
set global innodb_support_xa=default;
 
14
set session innodb_support_xa=default;
 
15
--source include/mix1.inc
 
16
 
 
17
--disable_warnings
 
18
drop table if exists t1, t2, t3;
 
19
--enable_warnings
 
20
#
 
21
# BUG#35850: Performance regression in 5.1.23/5.1.24
 
22
#
 
23
create table t1(a int);
 
24
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 
25
create table t2 (a int, b int, pk int, key(a,b), primary key(pk)) engine=innodb;
 
26
insert into t2 select @a:=A.a+10*(B.a + 10*C.a),@a, @a from t1 A, t1 B, t1 C;
 
27
--echo this must use key 'a', not PRIMARY:
 
28
--replace_column 9 #
 
29
explain select a from t2 where a=b;
 
30
drop table t1, t2;
 
31
 
 
32
#
 
33
# Bug #40360: Binlog related errors with binlog off
 
34
#
 
35
# This bug is triggered when the binlog format is STATEMENT and the
 
36
# binary log is turned off. In this case, no error should be shown for
 
37
# the statement since there are no replication issues.
 
38
 
 
39
SET SESSION BINLOG_FORMAT=STATEMENT;
 
40
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
41
query_vertical select @@session.sql_log_bin, @@session.binlog_format, @@session.tx_isolation;
 
42
CREATE TABLE t1 ( a INT ) ENGINE=InnoDB;
 
43
INSERT INTO t1 VALUES(1);
 
44
DROP TABLE t1;
 
45
 
 
46
#
 
47
# Bug#37284 Crash in Field_string::type()
 
48
#
 
49
--disable_warnings
 
50
DROP TABLE IF EXISTS t1;
 
51
--enable_warnings
 
52
CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;
 
53
CREATE INDEX i1 on t1 (a(3));
 
54
SELECT * FROM t1 WHERE a = 'abcde';
 
55
DROP TABLE t1;
 
56
 
 
57
#
 
58
# Bug #37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of
 
59
# requested column
 
60
#
 
61
 
 
62
CREATE TABLE foo (a int, b int, c char(10),
 
63
                  PRIMARY KEY (c(3)),
 
64
                  KEY b (b)
 
65
) engine=innodb;
 
66
 
 
67
CREATE TABLE foo2 (a int, b int, c char(10),
 
68
                  PRIMARY KEY (c),
 
69
                  KEY b (b)
 
70
) engine=innodb;
 
71
 
 
72
CREATE TABLE bar (a int, b int, c char(10),
 
73
                  PRIMARY KEY (c(3)),
 
74
                  KEY b (b)
 
75
) engine=myisam;
 
76
 
 
77
INSERT INTO foo VALUES
 
78
   (1,2,'abcdefghij'), (2,3,''), (3,4,'klmnopqrst'),
 
79
   (4,5,'uvwxyz'), (5,6,'meotnsyglt'), (4,5,'asfdewe');
 
80
 
 
81
INSERT INTO bar SELECT * FROM foo;
 
82
INSERT INTO foo2 SELECT * FROM foo;
 
83
 
 
84
--query_vertical EXPLAIN SELECT c FROM bar WHERE b>2;
 
85
--query_vertical EXPLAIN SELECT c FROM foo WHERE b>2;
 
86
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE b>2;
 
87
 
 
88
--query_vertical EXPLAIN SELECT c FROM bar WHERE c>2;
 
89
--query_vertical EXPLAIN SELECT c FROM foo WHERE c>2;
 
90
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE c>2;
 
91
 
 
92
DROP TABLE foo, bar, foo2;
 
93
 
 
94
 
 
95
#
 
96
# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table
 
97
#
 
98
 
 
99
--disable_warnings
 
100
DROP TABLE IF EXISTS t1,t3,t2;
 
101
DROP FUNCTION IF EXISTS f1;
 
102
--enable_warnings
 
103
 
 
104
DELIMITER |;
 
105
CREATE FUNCTION f1() RETURNS VARCHAR(250)
 
106
 BEGIN
 
107
     return 'hhhhhhh' ;
 
108
 END|
 
109
DELIMITER ;|
 
110
 
 
111
CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20), c VARCHAR(20)) ENGINE=INNODB;
 
112
 
 
113
BEGIN WORK;
 
114
 
 
115
CREATE TEMPORARY TABLE t2 (a VARCHAR(20), b VARCHAR(20), c varchar(20)) ENGINE=INNODB;
 
116
CREATE TEMPORARY TABLE t3 LIKE t2;
 
117
 
 
118
INSERT INTO t1 VALUES ('a','b',NULL),('c','d',NULL),('e','f',NULL);
 
119
 
 
120
SET @stmt := CONCAT('INSERT INTO t2 SELECT tbl.a, tbl.b, f1()',' FROM t1 tbl');
 
121
PREPARE stmt1 FROM @stmt;
 
122
 
 
123
SET @stmt := CONCAT('INSERT INTO t3', ' SELECT * FROM t2');
 
124
PREPARE stmt3 FROM @stmt;
 
125
 
 
126
EXECUTE stmt1;
 
127
 
 
128
COMMIT;
 
129
 
 
130
DEALLOCATE PREPARE stmt1;
 
131
DEALLOCATE PREPARE stmt3;
 
132
 
 
133
DROP TABLE t1,t3,t2;
 
134
DROP FUNCTION f1;
 
135
 
 
136
#
 
137
# Bug#37016: TRUNCATE TABLE removes some rows but not all
 
138
#
 
139
 
 
140
--disable_warnings
 
141
DROP TABLE IF EXISTS t1,t2;
 
142
--enable_warnings
 
143
 
 
144
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
 
145
CREATE TABLE t2 (id INT PRIMARY KEY,
 
146
                 t1_id INT, INDEX par_ind (t1_id),
 
147
                 FOREIGN KEY (t1_id) REFERENCES t1(id)) ENGINE=INNODB;
 
148
INSERT INTO t1 VALUES (1),(2);
 
149
INSERT INTO t2 VALUES (3,2);
 
150
 
 
151
SET AUTOCOMMIT = 0;
 
152
 
 
153
START TRANSACTION;
 
154
--error ER_ROW_IS_REFERENCED_2
 
155
TRUNCATE TABLE t1;
 
156
SELECT * FROM t1;
 
157
COMMIT;
 
158
SELECT * FROM t1;
 
159
 
 
160
START TRANSACTION;
 
161
--error ER_ROW_IS_REFERENCED_2
 
162
TRUNCATE TABLE t1;
 
163
SELECT * FROM t1;
 
164
ROLLBACK;
 
165
SELECT * FROM t1;
 
166
 
 
167
SET AUTOCOMMIT = 1;
 
168
 
 
169
START TRANSACTION;
 
170
SELECT * FROM t1;
 
171
COMMIT;
 
172
 
 
173
--error ER_ROW_IS_REFERENCED_2
 
174
TRUNCATE TABLE t1;
 
175
SELECT * FROM t1;
 
176
DELETE FROM t2 WHERE id = 3;
 
177
 
 
178
START TRANSACTION;
 
179
SELECT * FROM t1;
 
180
TRUNCATE TABLE t1;
 
181
ROLLBACK;
 
182
SELECT * FROM t1;
 
183
TRUNCATE TABLE t2;
 
184
 
 
185
DROP TABLE t2;
 
186
DROP TABLE t1;
 
187
 
 
188
--echo #
 
189
--echo # Bug#40127 Multiple table DELETE IGNORE hangs on foreign key constraint violation on 5.0
 
190
--echo #
 
191
CREATE TABLE t1 (
 
192
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 
193
        PRIMARY KEY (id)
 
194
) ENGINE=InnoDB;
 
195
 
 
196
CREATE TABLE t2 (
 
197
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 
198
        aid INT UNSIGNED NOT NULL,
 
199
        PRIMARY KEY (id),
 
200
        FOREIGN KEY (aid) REFERENCES t1 (id)
 
201
) ENGINE=InnoDB;
 
202
 
 
203
CREATE TABLE t3 (
 
204
        bid INT UNSIGNED NOT NULL,
 
205
        FOREIGN KEY (bid) REFERENCES t2 (id)
 
206
) ENGINE=InnoDB;
 
207
 
 
208
CREATE TABLE t4 (
 
209
  a INT
 
210
) ENGINE=InnoDB;
 
211
 
 
212
CREATE TABLE t5 (
 
213
  a INT
 
214
) ENGINE=InnoDB;
 
215
 
 
216
INSERT INTO t1 (id) VALUES (1);
 
217
INSERT INTO t2 (id, aid) VALUES (1, 1),(2,1),(3,1),(4,1);
 
218
INSERT INTO t3 (bid) VALUES (1);
 
219
 
 
220
INSERT INTO t4 VALUES (1),(2),(3),(4),(5);
 
221
INSERT INTO t5 VALUES (1);
 
222
 
 
223
DELETE t5 FROM t4 LEFT JOIN t5 ON t4.a= t5.a;
 
224
 
 
225
--error ER_ROW_IS_REFERENCED_2
 
226
DELETE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;
 
227
--error ER_ROW_IS_REFERENCED_2
 
228
DELETE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;
 
229
 
 
230
DELETE IGNORE t2, t1 FROM t2 INNER JOIN t1 ON (t2.aid = t1.id) WHERE t2.id = 1;
 
231
 
 
232
DROP TABLE t3;
 
233
DROP TABLE t2;
 
234
DROP TABLE t1;
 
235
DROP TABLES t4,t5;
 
236
 
 
237
--echo # Bug#40127 Multiple table DELETE IGNORE hangs on foreign key constraint violation on 5.0
 
238
--echo # Testing for any side effects of IGNORE on AFTER DELETE triggers used with
 
239
--echo # transactional tables.
 
240
--echo #
 
241
CREATE TABLE t1 (i INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
 
242
CREATE TABLE t2 (a VARCHAR(100)) ENGINE=InnoDB;
 
243
CREATE TABLE t3 (i INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
 
244
CREATE TABLE t4 (i INT NOT NULL PRIMARY KEY, t1i INT, 
 
245
  FOREIGN KEY (t1i) REFERENCES t1(i))
 
246
  ENGINE=InnoDB;
 
247
delimiter ||;
 
248
CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROW
 
249
BEGIN
 
250
  SET @b:='EXECUTED TRIGGER';
 
251
  INSERT INTO t2 VALUES (@b);
 
252
  SET @a:= error_happens_here;
 
253
END||
 
254
delimiter ;||
 
255
 
 
256
SET @b:="";
 
257
SET @a:="";
 
258
INSERT INTO t1 VALUES (1),(2),(3),(4);
 
259
INSERT INTO t3 SELECT * FROM t1;
 
260
--echo ** An error in a trigger causes rollback of the statement.
 
261
--error ER_BAD_FIELD_ERROR
 
262
DELETE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;
 
263
SELECT @a,@b;
 
264
SELECT * FROM t2;
 
265
SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;
 
266
 
 
267
--echo ** Same happens with the IGNORE option
 
268
--error ER_BAD_FIELD_ERROR
 
269
DELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;
 
270
SELECT * FROM t2;
 
271
SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;
 
272
 
 
273
--echo **
 
274
--echo ** The following is an attempt to demonstrate
 
275
--echo ** error handling inside a row iteration.
 
276
--echo **
 
277
DROP TRIGGER trg;
 
278
TRUNCATE TABLE t1;
 
279
TRUNCATE TABLE t2;
 
280
TRUNCATE TABLE t3;
 
281
 
 
282
INSERT INTO t1 VALUES (1),(2),(3),(4);
 
283
INSERT INTO t3 VALUES (1),(2),(3),(4);
 
284
INSERT INTO t4 VALUES (3,3),(4,4);
 
285
 
 
286
delimiter ||;
 
287
CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROW
 
288
BEGIN
 
289
  SET @b:= CONCAT('EXECUTED TRIGGER FOR ROW ',CAST(OLD.i AS CHAR));
 
290
  INSERT INTO t2 VALUES (@b);
 
291
END||
 
292
delimiter ;||
 
293
 
 
294
--echo ** DELETE is prevented by foreign key constrains but errors are silenced.
 
295
--echo ** The AFTER trigger isn't fired.
 
296
DELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;
 
297
--echo ** Tables are modified by best effort:
 
298
SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;
 
299
--echo ** The AFTER trigger was only executed on successful rows:
 
300
SELECT * FROM t2;
 
301
 
 
302
DROP TRIGGER trg;
 
303
 
 
304
--echo **
 
305
--echo ** Induce an error midway through an AFTER-trigger
 
306
--echo **
 
307
TRUNCATE TABLE t4;
 
308
TRUNCATE TABLE t1;
 
309
TRUNCATE TABLE t3;
 
310
INSERT INTO t1 VALUES (1),(2),(3),(4);
 
311
INSERT INTO t3 VALUES (1),(2),(3),(4);
 
312
delimiter ||;
 
313
CREATE TRIGGER trg AFTER DELETE ON t1 FOR EACH ROW
 
314
BEGIN
 
315
  SET @a:= @a+1;
 
316
  IF @a > 2 THEN
 
317
    INSERT INTO t4 VALUES (5,5);
 
318
  END IF;
 
319
END||
 
320
delimiter ;||
 
321
 
 
322
SET @a:=0;
 
323
--echo ** Errors in the trigger causes the statement to abort.
 
324
--error ER_NO_REFERENCED_ROW_2
 
325
DELETE IGNORE t1 FROM t3 LEFT JOIN t1 ON t1.i=t3.i;
 
326
SELECT * FROM t1 LEFT JOIN t3 ON t1.i=t3.i;
 
327
SELECT * FROM t4;
 
328
 
 
329
DROP TRIGGER trg;
 
330
DROP TABLE t4;
 
331
DROP TABLE t1;
 
332
DROP TABLE t2;
 
333
DROP TABLE t3;
 
334
 
 
335
#
 
336
# Bug#43580: Issue with Innodb on multi-table update
 
337
#
 
338
CREATE TABLE t1 (a INT, b INT, KEY (a)) ENGINE = INNODB;
 
339
CREATE TABLE t2 (a INT KEY, b INT, KEY (b)) ENGINE = INNODB;
 
340
 
 
341
CREATE TABLE t3 (a INT, b INT KEY, KEY (a)) ENGINE = INNODB;
 
342
CREATE TABLE t4 (a INT KEY, b INT, KEY (b)) ENGINE = INNODB;
 
343
 
 
344
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6);
 
345
INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
 
346
 
 
347
INSERT INTO t3 VALUES (1, 101), (2, 102), (3, 103), (4, 104), (5, 105), (6, 106);
 
348
INSERT INTO t4 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
 
349
 
 
350
UPDATE t1, t2 SET t1.a = t1.a + 100, t2.b = t1.a + 10 
 
351
WHERE t1.a BETWEEN 2 AND 4 AND t2.a = t1.b;
 
352
--sorted_result
 
353
SELECT * FROM t2;
 
354
 
 
355
UPDATE t3, t4 SET t3.a = t3.a + 100, t4.b = t3.a + 10 
 
356
WHERE t3.a BETWEEN 2 AND 4 AND t4.a = t3.b - 100;
 
357
--sorted_result
 
358
SELECT * FROM t4;
 
359
 
 
360
DROP TABLE t1, t2, t3, t4;
 
361
 
 
362
--echo #
 
363
--echo # Bug#44886: SIGSEGV in test_if_skip_sort_order() -
 
364
--echo #            uninitialized variable used as subscript 
 
365
--echo #
 
366
 
 
367
CREATE TABLE t1 (a INT, b INT, c INT, d INT, PRIMARY KEY (b), KEY (a,c))
 
368
  ENGINE=InnoDB;
 
369
INSERT INTO t1 VALUES (1,1,1,0);
 
370
 
 
371
CREATE TABLE t2 (a INT, b INT, e INT, KEY (e)) ENGINE=InnoDB;
 
372
INSERT INTO t2 VALUES (1,1,2);
 
373
 
 
374
CREATE TABLE t3 (a INT, b INT) ENGINE=MyISAM;
 
375
INSERT INTO t3 VALUES (1, 1);
 
376
 
 
377
SELECT * FROM t1, t2, t3
 
378
  WHERE t1.a = t3.a AND (t1.b = t3.b OR t1.d) AND t2.b = t1.b AND t2.e = 2
 
379
  GROUP BY t1.b;
 
380
 
 
381
DROP TABLE t1, t2, t3;
 
382
 
 
383
--echo #
 
384
--echo # Bug #45828: Optimizer won't use partial primary key if another 
 
385
--echo # index can prevent filesort
 
386
--echo #
 
387
 
 
388
# Create the table
 
389
CREATE TABLE `t1` (
 
390
  c1 int NOT NULL,
 
391
  c2 int NOT NULL,
 
392
  c3 int NOT NULL,
 
393
  PRIMARY KEY (c1,c2),
 
394
  KEY  (c3)
 
395
) ENGINE=InnoDB;
 
396
 
 
397
# populate with data
 
398
INSERT INTO t1 VALUES (5,2,1246276747);
 
399
INSERT INTO t1 VALUES (2,1,1246281721);
 
400
INSERT INTO t1 VALUES (7,3,1246281756);
 
401
INSERT INTO t1 VALUES (4,2,1246282139);
 
402
INSERT INTO t1 VALUES (3,1,1246282230);
 
403
INSERT INTO t1 VALUES (1,0,1246282712);
 
404
INSERT INTO t1 VALUES (8,3,1246282765);
 
405
INSERT INTO t1 SELECT c1+10,c2+10,c3+10 FROM t1;
 
406
INSERT INTO t1 SELECT c1+100,c2+100,c3+100 from t1;
 
407
INSERT INTO t1 SELECT c1+1000,c2+1000,c3+1000 from t1;
 
408
INSERT INTO t1 SELECT c1+10000,c2+10000,c3+10000 from t1;
 
409
INSERT INTO t1 SELECT c1+100000,c2+100000,c3+100000 from t1;
 
410
INSERT INTO t1 SELECT c1+1000000,c2+1000000,c3+1000000 from t1;
 
411
 
 
412
# query and no rows will match the c1 condition, whereas all will match c3
 
413
SELECT * FROM t1 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;
 
414
 
 
415
# SHOULD use the pk.
 
416
# index on c3 will be used instead of primary key
 
417
EXPLAIN SELECT * FROM t1 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;
 
418
 
 
419
# if we force the primary key, we can see the estimate is 1 
 
420
EXPLAIN SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;
 
421
 
 
422
 
 
423
CREATE TABLE t2 (
 
424
  c1 int NOT NULL,
 
425
  c2 int NOT NULL,
 
426
  c3 int NOT NULL,
 
427
  KEY (c1,c2),
 
428
  KEY (c3)
 
429
) ENGINE=InnoDB;
 
430
 
 
431
# SHOULD use the pk.
 
432
# if we switch it from a primary key to a regular index, it works correctly as well
 
433
explain SELECT * FROM t2 WHERE c1 = 99999999 AND c3 > 1 ORDER BY c3;
 
434
 
 
435
DROP TABLE t1,t2;
 
436
 
 
437
 
 
438
--echo #
 
439
--echo # 36259: Optimizing with ORDER BY
 
440
--echo #
 
441
 
 
442
CREATE TABLE t1 (
 
443
  a INT NOT NULL AUTO_INCREMENT,
 
444
  b INT NOT NULL,
 
445
  c INT NOT NULL,
 
446
  d VARCHAR(5),
 
447
  e INT NOT NULL,
 
448
  PRIMARY KEY (a), KEY i2 (b,c,d)
 
449
) ENGINE=InnoDB;
 
450
 
 
451
INSERT INTO t1 (b,c,d,e) VALUES (1,1,'a',1), (2,2,'b',2);
 
452
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
453
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
454
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
455
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
456
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
457
INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1;
 
458
EXPLAIN SELECT * FROM t1 WHERE b=1 AND c=1 ORDER BY a;
 
459
EXPLAIN SELECT * FROM t1 FORCE INDEX(i2) WHERE b=1 and c=1 ORDER BY a;
 
460
EXPLAIN SELECT * FROM t1 FORCE INDEX(PRIMARY) WHERE b=1 AND c=1 ORDER BY a;
 
461
 
 
462
DROP TABLE t1;
 
463
 
 
464
--echo #
 
465
--echo # Bug #47963: Wrong results when index is used
 
466
--echo #
 
467
CREATE TABLE t1(
 
468
  a VARCHAR(5) NOT NULL, 
 
469
  b VARCHAR(5) NOT NULL,
 
470
  c DATETIME NOT NULL,
 
471
  KEY (c) 
 
472
) ENGINE=InnoDB;
 
473
INSERT INTO t1 VALUES('TEST', 'TEST', '2009-10-09 00:00:00');
 
474
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
475
  c >= '2009-10-09 00:00:00' AND c <= '2009-10-09 00:00:00';
 
476
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
477
  c >= '2009-10-09 00:00:00.0' AND c <= '2009-10-09 00:00:00.0';
 
478
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
479
  c >= '2009-10-09 00:00:00.0' AND c <= '2009-10-09 00:00:00';
 
480
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
481
  c >= '2009-10-09 00:00:00' AND c <= '2009-10-09 00:00:00.0';
 
482
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
483
  c >= '2009-10-09 00:00:00.000' AND c <= '2009-10-09 00:00:00.000';
 
484
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
485
  c >= '2009-10-09 00:00:00.00' AND c <= '2009-10-09 00:00:00.001';
 
486
SELECT * FROM t1 WHERE a = 'TEST' AND 
 
487
  c >= '2009-10-09 00:00:00.001' AND c <= '2009-10-09 00:00:00.00';
 
488
EXPLAIN SELECT * FROM t1 WHERE a = 'TEST' AND 
 
489
  c >= '2009-10-09 00:00:00.001' AND c <= '2009-10-09 00:00:00.00';
 
490
DROP TABLE t1;
 
491
 
 
492
--echo #
 
493
--echo # Bug #46175: NULL read_view and consistent read assertion
 
494
--echo #
 
495
 
 
496
CREATE TABLE t1(a CHAR(13),KEY(a)) ENGINE=innodb;
 
497
CREATE TABLE t2(b DATETIME,KEY(b)) ENGINE=innodb;
 
498
INSERT INTO t1 VALUES (),();
 
499
INSERT INTO t2 VALUES (),();
 
500
CREATE OR REPLACE VIEW v1 AS SELECT 1 FROM t2 
 
501
  WHERE b =(SELECT a FROM t1 LIMIT 1);
 
502
 
 
503
--disable_query_log
 
504
--disable_result_log
 
505
CONNECT (con1, localhost, root,,);
 
506
--enable_query_log
 
507
--enable_result_log
 
508
CONNECTION default;
 
509
 
 
510
DELIMITER |;
 
511
CREATE PROCEDURE p1(num INT)
 
512
BEGIN
 
513
  DECLARE i INT DEFAULT 0;
 
514
  REPEAT
 
515
    SHOW CREATE VIEW v1;
 
516
    SET i:=i+1;
 
517
  UNTIL i>num END REPEAT;
 
518
END|
 
519
DELIMITER ;|
 
520
 
 
521
--echo # Should not crash
 
522
--disable_query_log
 
523
--disable_result_log
 
524
--send CALL p1(1000)
 
525
CONNECTION con1;
 
526
--echo # Should not crash
 
527
CALL p1(1000);
 
528
 
 
529
CONNECTION default;
 
530
--reap
 
531
--enable_query_log
 
532
--enable_result_log
 
533
 
 
534
DISCONNECT con1;
 
535
DROP PROCEDURE p1;
 
536
DROP VIEW v1;
 
537
DROP TABLE t1,t2;
 
538
 
 
539
 
 
540
--echo #
 
541
--echo # Bug #49324: more valgrind errors in test_if_skip_sort_order
 
542
--echo #
 
543
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb ;
 
544
--echo #should not cause valgrind warnings
 
545
SELECT 1 FROM t1 JOIN t1 a USING(a) GROUP BY t1.a,t1.a;
 
546
DROP TABLE t1;
 
547
 
 
548
--echo #
 
549
--echo # Bug#50843: Filesort used instead of clustered index led to
 
550
--echo #            performance degradation.
 
551
--echo #
 
552
create table t1(f1 int not null primary key, f2 int) engine=innodb;
 
553
create table t2(f1 int not null, key (f1)) engine=innodb;
 
554
insert into t1 values (1,1),(2,2),(3,3);
 
555
insert into t2 values (1),(2),(3);
 
556
explain select t1.* from t1 left join t2 using(f1) group by t1.f1;
 
557
drop table t1,t2;
 
558
--echo #
 
559
 
 
560
 
 
561
--echo #
 
562
--echo # Bug #39653: find_shortest_key in sql_select.cc does not consider
 
563
--echo #             clustered primary keys
 
564
--echo #
 
565
 
 
566
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c INT, d INT, e INT, f INT,
 
567
                 KEY (b,c)) ENGINE=INNODB;
 
568
 
 
569
INSERT INTO t1 VALUES (1,1,1,1,1,1), (2,2,2,2,2,2), (3,3,3,3,3,3),
 
570
                      (4,4,4,4,4,4), (5,5,5,5,5,5), (6,6,6,6,6,6),
 
571
                      (7,7,7,7,7,7), (8,8,8,8,8,8), (9,9,9,9,9,9),
 
572
                      (11,11,11,11,11,11);
 
573
 
 
574
--query_vertical EXPLAIN SELECT COUNT(*) FROM t1
 
575
 
 
576
DROP TABLE t1;
 
577
 
 
578
--echo #
 
579
--echo # Bug #49838: DROP INDEX and ADD UNIQUE INDEX for same index may
 
580
--echo #   corrupt definition at engine
 
581
--echo #
 
582
 
 
583
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, KEY k (a,b)) 
 
584
  ENGINE=InnoDB;
 
585
 
 
586
ALTER TABLE t1 DROP INDEX k, ADD UNIQUE INDEX k (a,b);
 
587
 
 
588
--query_vertical SHOW INDEXES FROM t1;
 
589
 
 
590
DROP TABLE t1;
 
591
 
 
592
 
 
593
--echo #
 
594
--echo # Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when 
 
595
--echo #  JOINed during an UPDATE
 
596
--echo #
 
597
 
 
598
CREATE TABLE t1 (d INT) ENGINE=InnoDB;
 
599
CREATE TABLE t2 (a INT, b INT, 
 
600
  c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 
601
  ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB;
 
602
 
 
603
--echo set up our data elements
 
604
INSERT INTO t1 (d) VALUES (1);
 
605
INSERT INTO t2 (a,b) VALUES (1,1);
 
606
SELECT SECOND(c) INTO @bug47453 FROM t2;
 
607
 
 
608
SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;
 
609
UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1;
 
610
SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;
 
611
 
 
612
SELECT SLEEP(1);
 
613
 
 
614
UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1;
 
615
 
 
616
--echo #should be 0
 
617
SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a;
 
618
 
 
619
DROP TABLE t1, t2;
 
620
 
 
621
--echo #
 
622
--echo # Bug#38999 valgrind warnings for update statement in function compare_record()
 
623
--echo #
 
624
 
 
625
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
 
626
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
 
627
INSERT INTO t1 values (1),(2),(3),(4),(5);
 
628
INSERT INTO t2 values (1);
 
629
 
 
630
SELECT * FROM t1 WHERE a = 2;
 
631
UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
 
632
 
 
633
DROP TABLE t1,t2;
 
634
 
 
635
--echo #
 
636
--echo # Bug #53334: wrong result for outer join with impossible ON condition
 
637
--echo # (see the same test case for MyISAM in join.test)
 
638
--echo #
 
639
 
 
640
CREATE TABLE t1 (id INT PRIMARY KEY);
 
641
CREATE TABLE t2 (id INT);
 
642
 
 
643
INSERT INTO t1 VALUES (75);
 
644
INSERT INTO t1 VALUES (79);
 
645
INSERT INTO t1 VALUES (78);
 
646
INSERT INTO t1 VALUES (77);
 
647
REPLACE INTO t1 VALUES (76);
 
648
REPLACE INTO t1 VALUES (76);
 
649
INSERT INTO t1 VALUES (104);
 
650
INSERT INTO t1 VALUES (103);
 
651
INSERT INTO t1 VALUES (102);
 
652
INSERT INTO t1 VALUES (101);
 
653
INSERT INTO t1 VALUES (105);
 
654
INSERT INTO t1 VALUES (106);
 
655
INSERT INTO t1 VALUES (107);
 
656
 
 
657
INSERT INTO t2 VALUES (107),(75),(1000);
 
658
 
 
659
SELECT t1.id,t2.id FROM t2 LEFT JOIN t1 ON t1.id>=74 AND t1.id<=0
 
660
  WHERE t2.id=75 AND t1.id IS NULL;
 
661
EXPLAIN SELECT t1.id,t2.id FROM t2 LEFT JOIN t1 ON t1.id>=74 AND t1.id<=0
 
662
  WHERE t2.id=75 AND t1.id IS NULL;
 
663
 
 
664
DROP TABLE t1,t2;
 
665
 
 
666
--echo #
 
667
--echo # Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index))
 
668
--echo #
 
669
 
 
670
CREATE TABLE t1 (a INT, b INT, c INT, d INT,
 
671
                 PRIMARY KEY(a,b,c), KEY(b,d))
 
672
                 ENGINE=InnoDB;
 
673
INSERT INTO t1 VALUES (0, 77, 1, 3);
 
674
 
 
675
UPDATE t1 SET d = 0 WHERE b = 77 AND c = 25;
 
676
 
 
677
DROP TABLE t1;
 
678
 
 
679
--echo #
 
680
--echo # Bug#50389 Using intersect does not return all rows
 
681
--echo #
 
682
 
 
683
CREATE TABLE t1 (
 
684
  f1 INT(10) NOT NULL,
 
685
  f2 INT(10),
 
686
  f3 INT(10),
 
687
  f4 TINYINT(4),
 
688
  f5 VARCHAR(50),
 
689
  PRIMARY KEY (f1),
 
690
  KEY idx1 (f2,f5,f4),
 
691
  KEY idx2 (f2,f4)
 
692
) ENGINE=InnoDB;
 
693
 
 
694
LOAD DATA INFILE '../../std_data/intersect-bug50389.tsv' INTO TABLE t1;
 
695
 
 
696
SELECT * FROM t1 WHERE f1 IN
 
697
(3305028,3353871,3772880,3346860,4228206,3336022,
 
698
 3470988,3305175,3329875,3817277,3856380,3796193,
 
699
 3784744,4180925,4559596,3963734,3856391,4494153)
 
700
AND f5 = 'abcdefghijklmnopwrst' AND f2 = 1221457 AND f4 = 0 ;
 
701
 
 
702
EXPLAIN SELECT * FROM t1 WHERE f1 IN
 
703
(3305028,3353871,3772880,3346860,4228206,3336022,
 
704
 3470988,3305175,3329875,3817277,3856380,3796193,
 
705
 3784744,4180925,4559596,3963734,3856391,4494153)
 
706
AND f5 = 'abcdefghijklmnopwrst' AND f2 = 1221457 AND f4 = 0 ;
 
707
 
 
708
DROP TABLE t1;
 
709
 
 
710
--echo #
 
711
--echo # Bug#51431 Wrong sort order after import of dump file
 
712
--echo #
 
713
 
 
714
CREATE TABLE t1 (
 
715
  f1 INT(11) NOT NULL,
 
716
  f2 int(11) NOT NULL,
 
717
  f3 int(11) NOT NULL,
 
718
  f4 tinyint(1) NOT NULL,
 
719
  PRIMARY KEY (f1),
 
720
  UNIQUE KEY (f2, f3),
 
721
  KEY (f4)
 
722
) ENGINE=InnoDB;
 
723
 
 
724
INSERT INTO t1 VALUES
 
725
(1,1,991,1), (2,1,992,1), (3,1,993,1), (4,1,994,1), (5,1,995,1),
 
726
(6,1,996,1), (7,1,997,1), (8,1,998,1), (10,1,999,1), (11,1,9910,1),
 
727
(16,1,9911,1), (17,1,9912,1), (18,1,9913,1), (19,1,9914,1), (20,1,9915,1),
 
728
(21,1,9916,1), (22,1,9917,1), (23,1,9918,1), (24,1,9919,1), (25,1,9920,1),
 
729
(26,1,9921,1), (27,1,9922,1);
 
730
 
 
731
FLUSH TABLES;
 
732
 
 
733
SELECT * FROM t1 WHERE f2 = 1 AND f4 = TRUE
 
734
ORDER BY f1 DESC LIMIT 5;
 
735
EXPLAIN SELECT * FROM t1 WHERE f2 = 1 AND f4 = TRUE
 
736
ORDER BY f1 DESC LIMIT 5;
 
737
 
 
738
DROP TABLE t1;
 
739
 
 
740
--echo End of 5.1 tests