~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/subselect.test

  • Committer: Stewart Smith
  • Date: 2009-06-05 12:04:43 UTC
  • mto: This revision was merged to the branch mainline in revision 1053.
  • Revision ID: stewart@flamingspork.com-20090605120443-dn9ttgy0f1942cr8
Add code coverage for ALTER DATABASE

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
--echo # Initialise
 
1
# Initialise
2
2
--disable_warnings
3
3
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
4
4
--enable_warnings
53
53
 
54
54
SELECT 1 as a,(SELECT a+a) b,(SELECT b);
55
55
 
56
 
create table t1 (a int);
57
 
create table t2 (a int, b int);
58
 
create table t3 (a int);
59
 
create table t4 (a int not null, b int not null);
 
56
create table t1 (a int) ENGINE=MyISAM;
 
57
create table t2 (a int, b int) ENGINE=MyISAM;
 
58
create table t3 (a int) ENGINE=MyISAM;
 
59
create table t4 (a int not null, b int not null) ENGINE=MyISAM;
60
60
insert into t1 values (2);
61
61
insert into t2 values (1,7),(2,7);
62
62
insert into t4 values (4,8),(3,8),(5,9);
71
71
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1);
72
72
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)) union (select * from t4 order by a limit 2) limit 3;
73
73
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)) union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
74
 
--replace_column 9 #
75
74
explain extended (select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)) union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
76
75
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
77
76
select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from 
78
77
(select * from t2 where a>1) as tt;
79
 
--replace_column 9 #
80
78
explain extended select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from 
81
79
(select * from t2 where a>1) as tt;
82
80
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3) order by 1 desc limit 1);
83
81
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3 where t3.a > t1.a) order by 1 desc limit 1);
84
82
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3 where t3.a < t1.a) order by 1 desc limit 1);
85
83
select b,(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2) from t4;
86
 
--replace_column 9 #
87
84
explain extended select b,(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2) from t4;
88
85
select * from t3 where exists (select * from t2 where t2.b=t3.a);
89
86
select * from t3 where not exists (select * from t2 where t2.b=t3.a);
92
89
select * from t3 where a = some (select b from t2);
93
90
select * from t3 where a <> any (select b from t2);
94
91
 
95
 
--echo # Rewrite: select * from t3 where not exists (select b from t2 where a <> b);
 
92
# Rewrite: select * from t3 where not exists (select b from t2 where a <> b);
96
93
select * from t3 where a = all (select b from t2);
97
94
 
98
95
select * from t3 where a <> all (select b from t2);
100
97
select * from t3 where a < any (select b from t2);
101
98
select * from t3 where a < all (select b from t2);
102
99
select * from t3 where a >= any (select b from t2);
103
 
--replace_column 9 #
104
100
explain extended select * from t3 where a >= any (select b from t2);
105
101
select * from t3 where a >= all (select b from t2);
106
102
delete from t2 where a=100;
109
105
-- error 1241
110
106
select * from t3 where a in (select * from t2);
111
107
insert into t4 values (12,7),(1,7),(10,9),(9,6),(7,6),(3,9),(1,10);
112
 
--echo # empty set
 
108
# empty set
113
109
select b,max(a) as ma from t4 group by b having b < (select max(t2.a) from t2 where t2.b=t4.b);
114
110
insert into t2 values (2,10);
115
111
select b,max(a) as ma from t4 group by b having ma < (select max(t2.a) from t2 where t2.b=t4.b);
116
112
delete from t2 where a=2 and b=10;
117
113
select b,max(a) as ma from t4 group by b having b >= (select max(t2.a) from t2 where t2.b=t4.b);
118
 
create temporary table t5 (a int) ENGINE=MyISAM;
 
114
create table t5 (a int) ENGINE=MyISAM;
119
115
select (select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a), a from t2;
120
116
insert into t5 values (5);
121
117
select (select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a), a from t2;
122
118
insert into t5 values (2);
123
119
select (select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a), a from t2;
124
 
--replace_column 9 #
125
120
explain extended select (select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a), a from t2;
126
121
-- error 1242
127
122
select (select a from t1 where t1.a=t2.a union all select a from t5 where t5.a=t2.a), a from t2;
128
 
create temporary table t6 (patient_uq int, clinic_uq int, index i1 (clinic_uq)) ENGINE=MyISAM;
129
 
create temporary table t7( uq int primary key, name char(25)) ENGINE=MyISAM;
 
123
create table t6 (patient_uq int, clinic_uq int, index i1 (clinic_uq)) ENGINE=MyISAM;
 
124
create table t7( uq int primary key, name char(25)) ENGINE=MyISAM;
130
125
insert into t7 values(1,"Oblastnaia bolnitsa"),(2,"Bolnitsa Krasnogo Kresta");
131
126
insert into t6 values (1,1),(1,2),(2,2),(1,3);
132
127
select * from t6 where exists (select * from t7 where uq = clinic_uq);
133
128
explain extended select * from t6 where exists (select * from t7 where uq = clinic_uq);
134
129
 
135
 
--echo # not unique fields
 
130
# not unique fields
136
131
-- error 1052
137
132
select * from t1 where a= (select a from t2,t4 where t2.b=t4.b);
138
133
 
139
 
--echo # different tipes & group functions
 
134
# different tipes & group functions
140
135
drop table t1,t2,t3;
141
136
 
142
 
CREATE TABLE t3 (a varchar(20),b char(1) NOT NULL default '0');
 
137
CREATE TABLE t3 (a varchar(20),b char(1) NOT NULL default '0') ENGINE=MyISAM;
143
138
INSERT INTO t3 VALUES ('W','a'),('A','c'),('J','b');
144
 
CREATE TABLE t2 (a varchar(20),b int NOT NULL default '0');
 
139
CREATE TABLE t2 (a varchar(20),b int NOT NULL default '0') ENGINE=MyISAM;
145
140
INSERT INTO t2 VALUES ('W','1'),('A','3'),('J','2');
146
 
CREATE TABLE t1 (a varchar(20),b date NULL);
 
141
CREATE TABLE t1 (a varchar(20),b date NULL) ENGINE=MyISAM;
147
142
INSERT INTO t1 VALUES ('W','1732-02-22'),('A','1735-10-30'),('J','1743-04-13');
148
143
SELECT * FROM t1 WHERE b = (SELECT MIN(b) FROM t1);
149
144
SELECT * FROM t2 WHERE b = (SELECT MIN(b) FROM t2);
154
149
  `email` varchar(60) NOT NULL default '',
155
150
  PRIMARY KEY  (`pseudo`),
156
151
  UNIQUE KEY `email` (`email`)
157
 
);
 
152
) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
158
153
 
159
154
INSERT INTO t8 (pseudo,email) VALUES ('joce','test');
160
155
INSERT INTO t8 (pseudo,email) VALUES ('joce1','test1');
161
156
INSERT INTO t8 (pseudo,email) VALUES ('2joce1','2test1');
162
 
--replace_column 9 #
163
157
EXPLAIN EXTENDED SELECT pseudo,(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce')) FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce');
164
158
-- error 1241
165
159
SELECT pseudo FROM t8 WHERE pseudo=(SELECT pseudo,email FROM
173
167
 
174
168
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
175
169
 
176
 
--echo #searchconthardwarefr3 forumconthardwarefr7
177
 
CREATE TEMPORARY TABLE `t1` (
 
170
#searchconthardwarefr3 forumconthardwarefr7
 
171
CREATE TABLE `t1` (
178
172
  `topic` bigint NOT NULL default '0',
179
173
  `date` date NULL,
180
174
  `pseudo` varchar(35) NOT NULL default '',
193
187
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1=(SELECT 1 UNION SELECT 1);
194
188
drop table t1;
195
189
 
196
 
--echo #forumconthardwarefr7 searchconthardwarefr7
 
190
#forumconthardwarefr7 searchconthardwarefr7
197
191
CREATE TABLE `t1` (
198
192
  `numeropost` bigint NOT NULL auto_increment,
199
193
  `maxnumrep` int NOT NULL default '0',
200
194
  PRIMARY KEY  (`numeropost`),
201
195
  UNIQUE KEY `maxnumrep` (`maxnumrep`)
202
 
);
 
196
) ENGINE=MyISAM ROW_FORMAT=FIXED;
203
197
 
204
198
INSERT INTO t1 (numeropost,maxnumrep) VALUES (40143,1),(43506,2);
205
199
 
209
203
      `date` date NULL,
210
204
      `pseudo` varchar(35) NOT NULL default '',
211
205
       PRIMARY KEY  (`mot`,`pseudo`,`date`,`topic`)
212
 
    );
 
206
    ) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
213
207
 
214
208
INSERT INTO t2 (mot,topic,date,pseudo) VALUES ('joce','40143','2002-10-22','joce'), ('joce','43506','2002-10-22','joce');
215
209
select numeropost as a FROM t1 GROUP BY (SELECT 1 FROM t1 HAVING a=1);
236
230
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000) from t2;
237
231
drop table t1,t2;
238
232
 
239
 
--echo #forumconthardwarefr7
 
233
#forumconthardwarefr7
240
234
CREATE TABLE `t1` (
241
235
  `numeropost` bigint NOT NULL auto_increment,
242
236
  `maxnumrep` int NOT NULL default '0',
243
237
  PRIMARY KEY  (`numeropost`),
244
238
  UNIQUE KEY `maxnumrep` (`maxnumrep`)
245
 
);
 
239
) ENGINE=MyISAM ROW_FORMAT=FIXED;
246
240
 
247
241
INSERT INTO t1 (numeropost,maxnumrep) VALUES (1,0),(2,1);
248
242
-- error 1242
251
245
select numeropost as a FROM t1 ORDER BY (SELECT 1 FROM t1 HAVING a=1);
252
246
drop table t1;
253
247
 
254
 
create table t1 (a int);
 
248
create table t1 (a int) ENGINE=MyISAM;
255
249
insert into t1 values (1),(2),(3);
256
250
(select * from t1) union (select * from t1) order by (select a from t1 limit 1);
257
251
drop table t1;
258
252
 
259
 
--echo #iftest
260
 
CREATE TEMPORARY TABLE t1 (field char(1) NOT NULL DEFAULT 'b') ENGINE=MyISAM;
 
253
#iftest
 
254
CREATE TABLE t1 (field char(1) NOT NULL DEFAULT 'b') ENGINE=MyISAM;
261
255
INSERT INTO t1 VALUES ();
262
256
-- error 1242
263
257
SELECT field FROM t1 WHERE 1=(SELECT 1 UNION ALL SELECT 1 FROM (SELECT 1) a HAVING field='b');
264
258
drop table t1;
265
259
 
266
 
--echo # threadhardwarefr7
 
260
# threadhardwarefr7
267
261
CREATE TABLE `t1` (
268
262
  `numeropost` bigint NOT NULL default '0',
269
263
  `numreponse` int NOT NULL auto_increment,
271
265
  PRIMARY KEY  (`numeropost`,`numreponse`),
272
266
  UNIQUE KEY `numreponse` (`numreponse`),
273
267
  KEY `pseudo` (`pseudo`,`numeropost`)
274
 
);
 
268
) ENGINE=MyISAM;
275
269
-- error 1247
276
270
SELECT (SELECT numeropost FROM t1 HAVING numreponse=a),numreponse FROM (SELECT * FROM t1) as a;
277
271
-- error 1054
280
274
INSERT INTO t1 (numeropost,numreponse,pseudo) VALUES (1,1,'joce'),(1,2,'joce'),(1,3,'test');
281
275
-- error 1242
282
276
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT 1 FROM t1 WHERE numeropost='1');
283
 
--replace_column 9 #
284
277
EXPLAIN EXTENDED SELECT MAX(numreponse) FROM t1 WHERE numeropost='1';
285
 
--replace_column 9 #
286
278
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
287
279
drop table t1;
288
280
 
289
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
 
281
CREATE TABLE t1 (a int) ENGINE=MyISAM;
290
282
INSERT INTO t1 VALUES (1);
291
283
SELECT 1 FROM (SELECT a FROM t1) b HAVING (SELECT b.a)=1;
292
284
drop table t1;
293
285
 
294
 
--echo #update with subselects
295
 
create table t1 (a int NOT NULL, b int, primary key (a));
296
 
create table t2 (a int NOT NULL, b int, primary key (a));
 
286
#update with subselects
 
287
create table t1 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
 
288
create table t2 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
297
289
insert into t1 values (0, 10),(1, 11),(2, 12);
298
290
insert into t2 values (1, 21),(2, 22),(3, 23);
299
291
select * from t1;
305
297
select * from t1;
306
298
drop table t1, t2;
307
299
 
308
 
--echo #delete with subselects
309
 
create table t1 (a int NOT NULL, b int, primary key (a));
310
 
create table t2 (a int NOT NULL, b int, primary key (a));
 
300
#delete with subselects
 
301
create table t1 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
 
302
create table t2 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
311
303
insert into t1 values (0, 10),(1, 11),(2, 12);
312
304
insert into t2 values (1, 21),(2, 12),(3, 23);
313
305
select * from t1;
320
312
select * from t1;
321
313
drop table t1, t2;
322
314
 
323
 
--echo #insert with subselects
324
 
CREATE TABLE t1 (x int);
325
 
create table t2 (a int);
326
 
create table t3 (b int);
 
315
#multi-delete with subselects
 
316
 
 
317
create table t11 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
 
318
create table t12 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
 
319
create table t2 (a int NOT NULL, b int, primary key (a)) ENGINE=MyISAM;
 
320
insert into t11 values (0, 10),(1, 11),(2, 12);
 
321
insert into t12 values (33, 10),(22, 11),(2, 12);
 
322
insert into t2 values (1, 21),(2, 12),(3, 23);
 
323
select * from t11;
 
324
--sorted_result
 
325
select * from t12;
 
326
-- error 1093
 
327
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t12 where t11.a = t12.a);
 
328
-- error 1242
 
329
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2);
 
330
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b = (select b from t2 where t11.a = t2.a);
 
331
select * from t11;
 
332
--sorted_result
 
333
select * from t12;
 
334
drop table t11, t12, t2;
 
335
 
 
336
#insert with subselects
 
337
CREATE TABLE t1 (x int) ENGINE=MyISAM;
 
338
create table t2 (a int) ENGINE=MyISAM;
 
339
create table t3 (b int) ENGINE=MyISAM;
327
340
insert into t2 values (1);
328
341
insert into t3 values (1),(2);
329
342
-- error 1093
334
347
select * from t1;
335
348
insert into t2 values (1);
336
349
INSERT INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
 
350
-- sleep 1
337
351
select * from t1;
338
352
INSERT INTO t1 (x) select (SELECT SUM(a)+1 FROM t2) FROM t2;
339
353
select * from t1;
340
 
--echo # After this, only data based on old t1 records should have been added.
 
354
# After this, only data based on old t1 records should have been added.
341
355
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
342
356
select * from t1;
343
357
-- error 1054
344
358
INSERT INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
345
359
INSERT INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
 
360
-- sleep 1
346
361
select * from t1;
347
 
--echo #
348
 
--echo #TODO: should be uncommented after bug 380 fix pushed
349
 
--echo #INSERT INTO t1 (x) SELECT (SELECT SUM(a)+b FROM t2) from t3;
350
 
--echo #select * from t1;
 
362
#
 
363
#TODO: should be uncommented after bug 380 fix pushed
 
364
#INSERT INTO t1 (x) SELECT (SELECT SUM(a)+b FROM t2) from t3;
 
365
#select * from t1;
351
366
drop table t1, t2, t3;
352
367
 
353
 
--echo #replace with subselects
354
 
CREATE TABLE t1 (x int not null, y int, primary key (x));
355
 
create table t2 (a int);
356
 
create temporary table t3 (a int) ENGINE=MyISAM;
 
368
#replace with subselects
 
369
CREATE TABLE t1 (x int not null, y int, primary key (x)) ENGINE=MyISAM;
 
370
create table t2 (a int) ENGINE=MyISAM;
 
371
create table t3 (a int) ENGINE=MyISAM;
357
372
insert into t2 values (1);
358
373
insert into t3 values (1),(2);
359
374
select * from t1;
366
381
replace into t1 (x, y) VALUES ((SELECT a FROM t2), (SELECT a+2 FROM t2));
367
382
select * from t1;
368
383
replace into t1 (x, y) VALUES ((SELECT a+3 FROM t2), (SELECT a FROM t2));
 
384
-- sleep 1
369
385
--sorted_result
370
386
select * from t1;
371
387
replace into t1 (x, y) VALUES ((SELECT a+3 FROM t2), (SELECT a+1 FROM t2));
 
388
-- sleep 1
372
389
select * from t1;
373
390
replace into t1 (x, y) VALUES ((SELECT a+1 FROM t2), (SELECT a FROM t2));
374
391
--sorted_result
378
395
-- error 1096
379
396
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
380
397
 
381
 
CREATE TABLE t2 (id int default NULL, KEY id (id));
 
398
CREATE TABLE t2 (id int default NULL, KEY id (id)) ENGINE=MyISAM;
382
399
INSERT INTO t2 VALUES (1),(2);
383
400
SELECT * FROM t2 WHERE id IN (SELECT 1);
384
401
EXPLAIN EXTENDED SELECT * FROM t2 WHERE id IN (SELECT 1);
393
410
-- error 1093
394
411
INSERT INTO t2 VALUES ((SELECT id FROM t2));
395
412
SELECT * FROM t2;
396
 
CREATE TEMPORARY TABLE t1 (id int default NULL, KEY id (id)) ENGINE=MyISAM;
 
413
CREATE TABLE t1 (id int default NULL, KEY id (id)) ENGINE=MyISAM;
397
414
INSERT INTO t1 values (1),(1);
398
415
-- error 1242
399
416
UPDATE t2 SET id=(SELECT * FROM t1);
400
417
drop table t2, t1;
401
418
 
402
 
--echo #NULL test
403
 
create temporary table t1 (a int) ENGINE=MyISAM;
 
419
#NULL test
 
420
create table t1 (a int) ENGINE=MyISAM;
404
421
insert into t1 values (1),(2),(3);
405
422
select 1 IN (SELECT * from t1);
406
423
select 10 IN (SELECT * from t1);
414
431
select 1 > ANY (SELECT * from t1);
415
432
select 10 > ANY (SELECT * from t1);
416
433
drop table t1;
417
 
create temporary table t1 (a varchar(20)) ENGINE=MyISAM;
 
434
create table t1 (a varchar(20)) ENGINE=MyISAM;
418
435
insert into t1 values ('A'),('BC'),('DEF');
419
436
select 'A' IN (SELECT * from t1);
420
437
select 'XYZS' IN (SELECT * from t1);
428
445
select 'A' > ANY (SELECT * from t1);
429
446
select 'XYZS' > ANY (SELECT * from t1);
430
447
drop table t1;
431
 
create temporary table t1 (a float) ENGINE=MyISAM;
 
448
create table t1 (a float) ENGINE=MyISAM;
432
449
insert into t1 values (1.5),(2.5),(3.5);
433
450
select 1.5 IN (SELECT * from t1);
434
451
select 10.5 IN (SELECT * from t1);
446
463
select (select a+1) from t1;
447
464
drop table t1;
448
465
 
449
 
--echo #
450
 
--echo # Null with keys
451
 
--echo #
 
466
#
 
467
# Null with keys
 
468
#
452
469
 
453
 
CREATE TEMPORARY TABLE t1 (a int NOT NULL default '0', PRIMARY KEY  (a)) ENGINE=MyISAM;
454
 
CREATE TEMPORARY TABLE t2 (a int default '0', INDEX (a)) ENGINE=MyISAM;
 
470
CREATE TABLE t1 (a int NOT NULL default '0', PRIMARY KEY  (a)) ENGINE=MyISAM;
 
471
CREATE TABLE t2 (a int default '0', INDEX (a)) ENGINE=MyISAM;
455
472
INSERT INTO t1 VALUES (1),(2),(3),(4);
456
473
INSERT INTO t2 VALUES (1),(2),(3);
457
474
SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
458
475
explain extended SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
459
 
CREATE TEMPORARY TABLE t3 (a int default '0') ENGINE=MyISAM;
 
476
CREATE TABLE t3 (a int default '0') ENGINE=MyISAM;
460
477
INSERT INTO t3 VALUES (1),(2),(3);
461
478
SELECT t1.a, t1.a in (select t2.a from t2,t3 where t3.a=t2.a) FROM t1;
462
479
explain extended SELECT t1.a, t1.a in (select t2.a from t2,t3 where t3.a=t2.a) FROM t1;
463
480
drop table t1,t2,t3;
464
481
 
465
 
--echo #LIMIT is not supported now
466
 
--echo #create table t1 (a float) ENGINE=MyISAM;
467
 
--echo #-- error 1235
468
 
--echo #select 10.5 IN (SELECT * from t1 LIMIT 1);
469
 
--echo #-- error 1235
470
 
--echo #select 10.5 IN (SELECT * from t1 LIMIT 1 UNION SELECT 1.5);
471
 
--echo #drop table t1;
472
 
--echo #
473
 
--echo #create table t1 (a int, b int, c varchar(10)) ENGINE=MyISAM;
474
 
--echo #create table t2 (a int) ENGINE=MyISAM;
475
 
--echo #insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
476
 
--echo #insert into t2 values (1),(2),(NULL);
477
 
--echo #select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t1 where a=t2.a)  from t2;
478
 
--echo #select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
479
 
--echo #select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t1 where a=t2.a) from t2;
480
 
--echo #drop table t1,t2;
481
 
--echo #
482
 
--echo #create table t1 (a int, b real, c varchar(10)) ENGINE=MyISAM;
483
 
--echo #insert into t1 values (1, 1, 'a'), (2,2,'b'), (NULL, 2, 'b');
484
 
--echo #select ROW(1, 1, 'a') IN (select a,b,c from t1);
485
 
--echo #select ROW(1, 2, 'a') IN (select a,b,c from t1);
486
 
--echo #select ROW(1, 1, 'a') IN (select b,a,c from t1);
487
 
--echo #select ROW(1, 1, 'a') IN (select a,b,c from t1 where a is not null);
488
 
--echo #select ROW(1, 2, 'a') IN (select a,b,c from t1 where a is not null);
489
 
--echo #select ROW(1, 1, 'a') IN (select b,a,c from t1 where a is not null);
490
 
--echo #select ROW(1, 1, 'a') IN (select a,b,c from t1 where c='b' or c='a');
491
 
--echo #select ROW(1, 2, 'a') IN (select a,b,c from t1 where c='b' or c='a');
492
 
--echo #select ROW(1, 1, 'a') IN (select b,a,c from t1 where c='b' or c='a');
493
 
--echo #-- error 1235
494
 
--echo #select ROW(1, 1, 'a') IN (select b,a,c from t1 limit 2);
495
 
--echo #drop table t1;
 
482
#LIMIT is not supported now
 
483
#create table t1 (a float) ENGINE=MyISAM;
 
484
#-- error 1235
 
485
#select 10.5 IN (SELECT * from t1 LIMIT 1);
 
486
#-- error 1235
 
487
#select 10.5 IN (SELECT * from t1 LIMIT 1 UNION SELECT 1.5);
 
488
#drop table t1;
 
489
#
 
490
#create table t1 (a int, b int, c varchar(10)) ENGINE=MyISAM;
 
491
#create table t2 (a int) ENGINE=MyISAM;
 
492
#insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
 
493
#insert into t2 values (1),(2),(NULL);
 
494
#select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t1 where a=t2.a)  from t2;
 
495
#select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
 
496
#select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t1 where a=t2.a) from t2;
 
497
#drop table t1,t2;
 
498
#
 
499
#create table t1 (a int, b real, c varchar(10)) ENGINE=MyISAM;
 
500
#insert into t1 values (1, 1, 'a'), (2,2,'b'), (NULL, 2, 'b');
 
501
#select ROW(1, 1, 'a') IN (select a,b,c from t1);
 
502
#select ROW(1, 2, 'a') IN (select a,b,c from t1);
 
503
#select ROW(1, 1, 'a') IN (select b,a,c from t1);
 
504
#select ROW(1, 1, 'a') IN (select a,b,c from t1 where a is not null);
 
505
#select ROW(1, 2, 'a') IN (select a,b,c from t1 where a is not null);
 
506
#select ROW(1, 1, 'a') IN (select b,a,c from t1 where a is not null);
 
507
#select ROW(1, 1, 'a') IN (select a,b,c from t1 where c='b' or c='a');
 
508
#select ROW(1, 2, 'a') IN (select a,b,c from t1 where c='b' or c='a');
 
509
#select ROW(1, 1, 'a') IN (select b,a,c from t1 where c='b' or c='a');
 
510
#-- error 1235
 
511
#select ROW(1, 1, 'a') IN (select b,a,c from t1 limit 2);
 
512
#drop table t1;
496
513
 
497
 
--echo #test of uncacheable subqueries
498
 
CREATE TABLE t1 (a int);
 
514
#test of uncacheable subqueries
 
515
CREATE TABLE t1 (a int) ENGINE=MyISAM;
499
516
EXPLAIN EXTENDED SELECT (SELECT RAND() FROM t1) FROM t1;
500
517
EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
501
518
drop table t1;
502
519
 
503
520
 
504
 
CREATE TEMPORARY TABLE `t1` (
 
521
CREATE TABLE `t1` (
505
522
  `mot` varchar(30) NOT NULL default '',
506
523
  `topic` bigint NOT NULL default '0',
507
524
  `date` date NULL DEFAULT '2009-01-20',
511
528
  KEY `topic` (`topic`)
512
529
) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
513
530
 
514
 
CREATE TEMPORARY TABLE `t2` (
 
531
CREATE TABLE `t2` (
515
532
  `mot` varchar(30) NOT NULL default '',
516
533
  `topic` bigint NOT NULL default '0',
517
534
  `date` date NULL default '1997-08-29',
521
538
  KEY `topic` (`topic`)
522
539
) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
523
540
 
524
 
CREATE TEMPORARY TABLE `t3` (
 
541
CREATE TABLE `t3` (
525
542
  `numeropost` bigint NOT NULL auto_increment,
526
543
  `maxnumrep` int NOT NULL default '0',
527
544
  PRIMARY KEY  (`numeropost`),
543
560
drop table t1, t2, t3;
544
561
 
545
562
SELECT * FROM (SELECT 1 as a,(SELECT a)) a;
546
 
CREATE TEMPORARY TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT 1)) a;
547
 
SHOW CREATE TABLE t1;
548
 
drop table t1;
549
 
CREATE TEMPORARY TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT a)) a;
550
 
SHOW CREATE TABLE t1;
551
 
drop table t1;
552
 
CREATE TEMPORARY TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT a+0)) a;
553
 
SHOW CREATE TABLE t1;
554
 
drop table t1;
555
 
CREATE TEMPORARY TABLE t1 ENGINE=MyISAM SELECT (SELECT 1 as a UNION SELECT 1+1 limit 1,1) as a;
 
563
CREATE TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT 1)) a;
 
564
SHOW CREATE TABLE t1;
 
565
drop table t1;
 
566
CREATE TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT a)) a;
 
567
SHOW CREATE TABLE t1;
 
568
drop table t1;
 
569
CREATE TABLE t1 ENGINE=MyISAM SELECT * FROM (SELECT 1 as a,(SELECT a+0)) a;
 
570
SHOW CREATE TABLE t1;
 
571
drop table t1;
 
572
CREATE TABLE t1 ENGINE=MyISAM SELECT (SELECT 1 as a UNION SELECT 1+1 limit 1,1) as a;
556
573
select * from t1;
557
574
SHOW CREATE TABLE t1;
558
575
drop table t1;
559
576
 
560
 
create table t1 (a int);
 
577
create table t1 (a int) ENGINE=MyISAM;
561
578
insert into t1 values (1), (2), (3);
562
 
--replace_column 9 #
563
579
explain extended select a,(select (select rand() from t1 limit 1)  from t1 limit 1)
564
580
from t1;
565
581
drop table t1;
566
582
 
567
 
--echo #
568
 
--echo # error in IN
569
 
--echo #
 
583
#
 
584
# error in IN
 
585
#
570
586
-- error 1146
571
587
select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country  where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent);
572
588
 
573
 
--echo #
574
 
--echo # complex subquery
575
 
--echo #
 
589
#
 
590
# complex subquery
 
591
#
576
592
 
577
593
CREATE TABLE t1 (
578
594
  ID int NOT NULL auto_increment,
581
597
  District char(20) NOT NULL default '',
582
598
  Population int NOT NULL default '0',
583
599
  PRIMARY KEY  (ID)
584
 
);
 
600
) ENGINE=MyISAM;
585
601
 
586
602
INSERT INTO t1 VALUES (130,'Sydney','AUS','New South Wales',3276207);
587
603
INSERT INTO t1 VALUES (131,'Melbourne','AUS','Victoria',2865329);
604
620
  Capital int default NULL,
605
621
  Code2 char(2) NOT NULL default '',
606
622
  PRIMARY KEY  (Code)
607
 
);
 
623
) ENGINE=MyISAM;
608
624
 
609
625
INSERT INTO t2 VALUES ('AUS','Australia','Oceania','Australia and New Zealand',7741220.00,1901,18886000,79.8,351182.00,392911.00,'Australia','Constitutional Monarchy, Federation','Elisabeth II',135,'AU');
610
626
INSERT INTO t2 VALUES ('AZE','Azerbaijan','Asia','Middle East',86600.00,1991,7734000,62.9,4127.00,4100.00,'Azärbaycan','Federal Republic','Heydär Äliyev',144,'AZ');
613
629
 
614
630
drop table t1, t2;
615
631
 
616
 
--echo #
617
 
--echo # constants in IN
618
 
--echo #
619
 
CREATE TEMPORARY TABLE `t1` (
 
632
#
 
633
# constants in IN
 
634
#
 
635
CREATE TABLE `t1` (
620
636
  `id` bigint NOT NULL auto_increment,
621
637
  `pseudo` varchar(35) NOT NULL default '',
622
638
  PRIMARY KEY  (`id`),
623
639
  UNIQUE KEY `pseudo` (`pseudo`)
624
 
) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
 
640
) ENGINE=MyISAM PACK_KEYS=1 ROW_FORMAT=DYNAMIC;
625
641
INSERT INTO t1 (pseudo) VALUES ('test');
626
642
SELECT 0 IN (SELECT 1 FROM t1 a);
627
643
EXPLAIN EXTENDED SELECT 0 IN (SELECT 1 FROM t1 a);
630
646
EXPLAIN EXTENDED SELECT 0 IN (SELECT 1 FROM t1 a);
631
647
drop table t1;
632
648
 
633
 
CREATE TEMPORARY TABLE `t1` (
 
649
CREATE TABLE `t1` (
634
650
  `i` int NOT NULL default '0',
635
651
  PRIMARY KEY  (`i`)
636
652
) ENGINE=MyISAM;
643
659
select * from t1;
644
660
drop table t1;
645
661
 
646
 
--echo #
647
 
--echo # correct NULL in <CONSTANT> IN (SELECT ...)
648
 
--echo #
649
 
create temporary table t1 (a int, unique index indexa (a)) ENGINE=MyISAM; 
 
662
#
 
663
# Multi update test
 
664
#
 
665
CREATE TABLE t1 (
 
666
  id int default NULL
 
667
) ENGINE=MyISAM;
 
668
INSERT INTO t1 VALUES (1),(1),(2),(2),(1),(3);
 
669
CREATE TABLE t2 (
 
670
  id int default NULL,
 
671
  name varchar(15) default NULL
 
672
) ENGINE=MyISAM;
 
673
 
 
674
INSERT INTO t2 VALUES (4,'vita'), (1,'vita'), (2,'vita'), (1,'vita');
 
675
update t1, t2 set t2.name='lenka' where t2.id in (select id from t1);
 
676
select * from t2;
 
677
drop table t1,t2;
 
678
 
 
679
#
 
680
# correct NULL in <CONSTANT> IN (SELECT ...)
 
681
#
 
682
create table t1 (a int, unique index indexa (a)) ENGINE=MyISAM; 
650
683
insert into t1 values (-1), (-4), (-2), (NULL); 
651
684
select -10 IN (select a from t1 FORCE INDEX (indexa)); 
652
685
drop table t1;
653
686
 
654
 
--echo #
655
 
--echo # Test optimization for sub selects
656
 
--echo #
657
 
create table t1 (id int not null auto_increment primary key, salary int, key(salary));
 
687
#
 
688
# Test optimization for sub selects
 
689
#
 
690
create table t1 (id int not null auto_increment primary key, salary int, key(salary)) ENGINE=MyISAM;
658
691
insert into t1 (salary) values (100),(1000),(10000),(10),(500),(5000),(50000);
659
 
--replace_column 9 #
660
692
explain extended SELECT id FROM t1 where salary = (SELECT MAX(salary) FROM t1);
661
693
drop table t1;
662
694
 
669
701
  UNIQUE KEY t1_PK (ID,SUB_ID),
670
702
  KEY t1_FK (REF_ID,REF_SUB),
671
703
  KEY t1_REFID (REF_ID)
672
 
);
 
704
) ENGINE=MyISAM;
673
705
INSERT INTO t1 VALUES (1,0,NULL,NULL),(2,0,NULL,NULL);
674
706
SELECT DISTINCT REF_ID FROM t1 WHERE ID= (SELECT DISTINCT REF_ID FROM t1 WHERE ID=2);
675
707
DROP TABLE t1;
676
708
 
677
 
--echo #
678
 
--echo # uninterruptable update
679
 
--echo #
680
 
create temporary table t1 (a int, b int) ENGINE=MyISAM;
681
 
create temporary table t2 (a int, b int) ENGINE=MyISAM;
 
709
#
 
710
# uninterruptable update
 
711
#
 
712
create table t1 (a int, b int) ENGINE=MyISAM;
 
713
create table t2 (a int, b int) ENGINE=MyISAM;
682
714
 
683
715
insert into t1 values (1,0), (2,0), (3,0);
684
716
insert into t2 values (1,1), (2,1), (3,1), (2,2);
688
720
 
689
721
drop table t1, t2;
690
722
 
691
 
--echo #
692
 
--echo # reduced subselect in ORDER BY & GROUP BY clauses
693
 
--echo #
 
723
#
 
724
# reduced subselect in ORDER BY & GROUP BY clauses
 
725
#
694
726
 
695
 
CREATE TEMPORARY TABLE `t1` (
 
727
CREATE TABLE `t1` (
696
728
  `id` bigint NOT NULL auto_increment,
697
729
  `pseudo` varchar(35) NOT NULL default '',
698
730
  `email` varchar(60) NOT NULL default '',
699
731
  PRIMARY KEY  (`id`),
700
732
  UNIQUE KEY `email` (`email`),
701
733
  UNIQUE KEY `pseudo` (`pseudo`)
702
 
) ENGINE=MyISAM ROW_FORMAT=DYNAMIC;
 
734
) ENGINE=MyISAM PACK_KEYS=1 ROW_FORMAT=DYNAMIC;
703
735
INSERT INTO t1 (id,pseudo,email) VALUES (1,'test','test'),(2,'test1','test1');
704
736
SELECT pseudo as a, pseudo as b FROM t1 GROUP BY (SELECT a) ORDER BY (SELECT id*1);
705
737
drop table if exists t1;
706
738
 
707
739
(SELECT 1 as a) UNION (SELECT 1) ORDER BY (SELECT a+0);
708
740
 
709
 
--echo #
710
 
--echo # IN subselect optimization test
711
 
--echo #
712
 
create temporary table t1 (a int not null, b int, primary key (a)) ENGINE=MyISAM;
713
 
create temporary table t2 (a int not null, primary key (a)) ENGINE=MyISAM;
714
 
create temporary table t3 (a int not null, b int, primary key (a)) ENGINE=MyISAM;
 
741
#
 
742
# IN subselect optimization test
 
743
#
 
744
create table t1 (a int not null, b int, primary key (a)) ENGINE=MyISAM;
 
745
create table t2 (a int not null, primary key (a)) ENGINE=MyISAM;
 
746
create table t3 (a int not null, b int, primary key (a)) ENGINE=MyISAM;
715
747
insert into t1 values (1,10), (2,20), (3,30),  (4,40);
716
748
insert into t2 values (2), (3), (4), (5);
717
749
insert into t3 values (10,3), (20,4), (30,5);
722
754
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
723
755
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
724
756
drop table t1, t2, t3;
725
 
create temporary table t1 (a int, b int, index a (a,b)) ENGINE=MyISAM;
726
 
create temporary table t2 (a int, index a (a)) ENGINE=MyISAM;
727
 
create temporary table t3 (a int, b int, index a (a)) ENGINE=MyISAM;
 
757
create table t1 (a int, b int, index a (a,b)) ENGINE=MyISAM;
 
758
create table t2 (a int, index a (a)) ENGINE=MyISAM;
 
759
create table t3 (a int, b int, index a (a)) ENGINE=MyISAM;
728
760
insert into t1 values (1,10), (2,20), (3,30), (4,40);
729
761
disable_query_log;
730
 
--echo # making table large enough
 
762
# making table large enough
731
763
set autocommit=0;
732
764
begin;
733
765
let $1 = 10000;
753
785
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
754
786
drop table t1, t2, t3;
755
787
 
756
 
--echo #
757
 
--echo # alloc_group_fields() working
758
 
--echo #
759
 
create temporary table t1 (a int, b int) ENGINE=MyISAM;
760
 
create temporary table t2 (a int, b int) ENGINE=MyISAM;
761
 
create temporary table t3 (a int, b int) ENGINE=MyISAM;
 
788
#
 
789
# alloc_group_fields() working
 
790
#
 
791
create table t1 (a int, b int) ENGINE=MyISAM;
 
792
create table t2 (a int, b int) ENGINE=MyISAM;
 
793
create table t3 (a int, b int) ENGINE=MyISAM;
762
794
insert into t1 values (0,100),(1,2), (1,3), (2,2), (2,7), (2,-1), (3,10);
763
795
insert into t2 values (0,0), (1,1), (2,1), (3,1), (4,1);
764
796
insert into t3 values (3,3), (2,2), (1,1); 
765
797
select a,(select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 and t1.a <= t3.b group by t1.a order by sum limit 1) from t3;
766
798
drop table t1,t2,t3;
767
799
 
768
 
--echo #
769
 
--echo # aggregate functions in HAVING test
770
 
--echo #
771
 
create temporary table t1 (s1 int) ENGINE=MyISAM;
772
 
create temporary table t2 (s1 int) ENGINE=MyISAM;
 
800
#
 
801
# aggregate functions in HAVING test
 
802
#
 
803
create table t1 (s1 int) ENGINE=MyISAM;
 
804
create table t2 (s1 int) ENGINE=MyISAM;
773
805
insert into t1 values (1);
774
806
insert into t2 values (1);
775
807
select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1);
776
808
drop table t1,t2;
777
809
 
778
 
--echo #
779
 
--echo # update subquery with wrong field (to force name resolving
780
 
--echo # in UPDATE name space)
781
 
--echo #
782
 
create temporary table t1 (s1 int) ENGINE=MyISAM;
783
 
create temporary table t2 (s1 int) ENGINE=MyISAM;
 
810
#
 
811
# update subquery with wrong field (to force name resolving
 
812
# in UPDATE name space)
 
813
#
 
814
create table t1 (s1 int) ENGINE=MyISAM;
 
815
create table t2 (s1 int) ENGINE=MyISAM;
784
816
insert into t1 values (1);
785
817
insert into t2 values (1);
786
818
-- error 1054
787
819
update t1 set  s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A);
788
820
DROP TABLE t1, t2;
789
821
 
790
 
--echo #
791
 
--echo # collation test
792
 
--echo #
793
 
--echo #CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
794
 
--echo #                 s2 CHAR(5) COLLATE latin1_swedish_ci) ENGINE=MyISAM;
795
 
--echo #INSERT INTO t1 VALUES ('z','?');
796
 
--echo #-- error 1267
797
 
--echo #select * from t1 where s1 > (select max(s2) from t1);
798
 
--echo #-- error 1267
799
 
--echo #select * from t1 where s1 > any (select max(s2) from t1);
800
 
--echo #drop table t1;
 
822
#
 
823
# collation test
 
824
#
 
825
#CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
 
826
#                 s2 CHAR(5) COLLATE latin1_swedish_ci) ENGINE=MyISAM;
 
827
#INSERT INTO t1 VALUES ('z','?');
 
828
#-- error 1267
 
829
#select * from t1 where s1 > (select max(s2) from t1);
 
830
#-- error 1267
 
831
#select * from t1 where s1 > any (select max(s2) from t1);
 
832
#drop table t1;
801
833
 
802
 
--echo #
803
 
--echo # aggregate functions reinitialization
804
 
--echo #
805
 
create table t1(toid int,rd int);
806
 
create table t2(userid int,pmnew int,pmtotal int);
 
834
#
 
835
# aggregate functions reinitialization
 
836
#
 
837
create table t1(toid int,rd int) ENGINE=MyISAM;
 
838
create table t2(userid int,pmnew int,pmtotal int) ENGINE=MyISAM;
807
839
insert into t2 values(1,0,0),(2,0,0);
808
840
insert into t1 values(1,0),(1,0),(1,0),(1,12),(1,15),(1,123),(1,12312),(1,12312),(1,123),(2,0),(2,0),(2,1),(2,2);
809
841
select userid,pmtotal,pmnew, (select count(rd) from t1 where toid=t2.userid) calc_total, (select count(rd) from t1 where rd=0 and toid=t2.userid) calc_new from t2 where userid in (select distinct toid from t1);
810
842
drop table t1, t2;
811
843
 
812
 
--echo #
813
 
--echo # row union
814
 
--echo #
815
 
create table t1 (s1 char(5));
 
844
#
 
845
# row union
 
846
#
 
847
create table t1 (s1 char(5)) ENGINE=MyISAM;
816
848
-- error 1241
817
849
select (select 'a','b' from t1 union select 'a','b' from t1) from t1;
818
850
insert into t1 values ('tttt');
819
851
select * from t1 where ('a','b')=(select 'a','b' from t1 union select 'a','b' from t1);
820
 
--replace_column 9 #
821
852
explain extended (select * from t1);
822
853
(select * from t1);
823
854
drop table t1;
824
855
 
825
 
--echo #
826
 
--echo # IN optimisation test results
827
 
--echo #
828
 
create temporary table t1 (s1 char(5), index s1(s1)) ENGINE=MyISAM;
829
 
create temporary table t2 (s1 char(5), index s1(s1)) ENGINE=MyISAM;
 
856
#
 
857
# IN optimisation test results
 
858
#
 
859
create table t1 (s1 char(5), index s1(s1)) ENGINE=MyISAM;
 
860
create table t2 (s1 char(5), index s1(s1)) ENGINE=MyISAM;
830
861
insert into t1 values ('a1'),('a2'),('a3');
831
862
insert into t2 values ('a1'),('a2');
832
863
select s1, s1 NOT IN (SELECT s1 FROM t2) from t1;
839
870
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
840
871
drop table t1,t2;
841
872
 
842
 
--echo #
843
 
--echo # correct ALL optimisation
844
 
--echo #
845
 
create temporary table t2 (a int, b int) ENGINE=MyISAM;
846
 
create temporary table t3 (a int) ENGINE=MyISAM;
 
873
#
 
874
# correct ALL optimisation
 
875
#
 
876
create table t2 (a int, b int) ENGINE=MyISAM;
 
877
create table t3 (a int) ENGINE=MyISAM;
847
878
insert into t3 values (6),(7),(3);
848
879
select * from t3 where a >= all (select b from t2);
849
880
explain extended select * from t3 where a >= all (select b from t2);
861
892
explain extended select * from t3 where NULL >= some (select b from t2);
862
893
select * from t3 where NULL >= some (select b from t2 group by 1);
863
894
explain extended select * from t3 where NULL >= some (select b from t2 group by 1);
864
 
--echo #
865
 
--echo # optimized static ALL/ANY with grouping
866
 
--echo #
 
895
#
 
896
# optimized static ALL/ANY with grouping
 
897
#
867
898
insert into t2 values (2,2), (2,1), (3,3), (3,1);
868
899
select * from t3 where a > all (select max(b) from t2 group by a);
869
900
explain extended select * from t3 where a > all (select max(b) from t2 group by a);
870
901
drop table t2, t3;
871
902
 
872
 
--echo #
873
 
--echo # correct used_tables()
874
 
--echo #
 
903
#
 
904
# correct used_tables()
 
905
#
875
906
 
876
 
CREATE TEMPORARY TABLE `t1` ( `id` bigint NOT NULL auto_increment, `taskid` bigint NOT NULL default '0', `dbid` int NOT NULL default '0', `create_date` datetime, `last_update` datetime, PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=3 ;
 
907
CREATE TABLE `t1` ( `id` bigint NOT NULL auto_increment, `taskid` bigint NOT NULL default '0', `dbid` int NOT NULL default '0', `create_date` datetime, `last_update` datetime, PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=3 ;
877
908
INSERT INTO `t1` (`id`, `taskid`, `dbid`, `create_date`,`last_update`) VALUES (1, 1, 15, '2003-09-29 10:31:36', '2003-09-29 10:31:36'), (2, 1, 21, now(), now());
878
 
CREATE TEMPORARY TABLE `t2` (`db_id` int NOT NULL auto_increment,`name` varchar(200) NOT NULL default '',`primary_uid` int NOT NULL default '0',`secondary_uid` int NOT NULL default '0',PRIMARY KEY  (`db_id`),UNIQUE KEY `name_2` (`name`)) ENGINE=MyISAM AUTO_INCREMENT=2147483647;
 
909
CREATE TABLE `t2` (`db_id` int NOT NULL auto_increment,`name` varchar(200) NOT NULL default '',`primary_uid` int NOT NULL default '0',`secondary_uid` int NOT NULL default '0',PRIMARY KEY  (`db_id`),UNIQUE KEY `name_2` (`name`)) ENGINE=MyISAM AUTO_INCREMENT=2147483647;
879
910
INSERT INTO `t2` (`db_id`, `name`, `primary_uid`, `secondary_uid`) VALUES (18, 'Not Set 1', 0, 0),(19, 'Valid', 1, 2),(20, 'Valid 2', 1, 2),(21, 'Should Not Return', 1, 2),(26, 'Not Set 2', 0, 0),(-1, 'ALL DB\'S', 0, 0);
880
 
CREATE TEMPORARY TABLE `t3` (`taskgenid` bigint NOT NULL auto_increment,`dbid` int NOT NULL default '0',`taskid` int NOT NULL default '0',`mon` int NOT NULL default '1',`tues` int NOT NULL default '1',`wed` int NOT NULL default '1',`thur` int NOT NULL default '1',`fri` int NOT NULL default '1',`sat` int NOT NULL default '0',`sun` int NOT NULL default '0',`how_often` int NOT NULL default '1',`userid` int NOT NULL default '0',`active` int NOT NULL default '1',PRIMARY KEY  (`taskgenid`)) ENGINE=MyISAM AUTO_INCREMENT=2 ;
 
911
CREATE TABLE `t3` (`taskgenid` bigint NOT NULL auto_increment,`dbid` int NOT NULL default '0',`taskid` int NOT NULL default '0',`mon` int NOT NULL default '1',`tues` int NOT NULL default '1',`wed` int NOT NULL default '1',`thur` int NOT NULL default '1',`fri` int NOT NULL default '1',`sat` int NOT NULL default '0',`sun` int NOT NULL default '0',`how_often` int NOT NULL default '1',`userid` int NOT NULL default '0',`active` int NOT NULL default '1',PRIMARY KEY  (`taskgenid`)) ENGINE=MyISAM AUTO_INCREMENT=2 ;
881
912
INSERT INTO `t3` (`taskgenid`, `dbid`, `taskid`, `mon`, `tues`,`wed`, `thur`, `fri`, `sat`, `sun`, `how_often`, `userid`, `active`) VALUES (1,-1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1);
882
 
CREATE TEMPORARY TABLE `t4` (`task_id` int NOT NULL default '0',`description` varchar(200) NOT NULL default '') ENGINE=MyISAM;
 
913
CREATE TABLE `t4` (`task_id` int NOT NULL default '0',`description` varchar(200) NOT NULL default '') ENGINE=MyISAM;
883
914
INSERT INTO `t4` (`task_id`, `description`) VALUES (1, 'Daily Check List'),(2, 'Weekly Status');
884
915
select  dbid, name, (date_format(now() , '%Y-%m-%d') - INTERVAL how_often DAY) >= ifnull((SELECT date_format(max(create_date),'%Y-%m-%d') FROM t1 WHERE dbid = b.db_id AND taskid = a.taskgenid), '1950-01-01') from t3 a, t2 b, t4  WHERE dbid = - 1 AND primary_uid = '1' AND t4.task_id = taskid;
885
916
SELECT dbid, name FROM t3 a, t2 b, t4 WHERE dbid = - 1 AND primary_uid = '1' AND ((date_format(now() , '%Y-%m-%d') - INTERVAL how_often DAY) >= ifnull((SELECT date_format(max(create_date),'%Y-%m-%d') FROM t1 WHERE dbid = b.db_id AND taskid = a.taskgenid), '1950-01-01')) AND t4.task_id = taskid;
886
917
drop table t1,t2,t3,t4;
887
918
 
888
 
--echo #
889
 
--echo # cardinality check
890
 
--echo #
891
 
CREATE TEMPORARY TABLE t1 (id int default NULL) ENGINE=MyISAM;
 
919
#
 
920
# cardinality check
 
921
#
 
922
CREATE TABLE t1 (id int default NULL) ENGINE=MyISAM;
892
923
INSERT INTO t1 VALUES (1),(5);
893
 
CREATE TEMPORARY TABLE t2 (id int default NULL) ENGINE=MyISAM;
 
924
CREATE TABLE t2 (id int default NULL) ENGINE=MyISAM;
894
925
INSERT INTO t2 VALUES (2),(6);
895
926
-- error 1241
896
927
select * from t1 where (1,2,6) in (select * from t2);
897
928
DROP TABLE t1,t2;
898
929
 
899
 
--echo #
900
 
--echo # optimized ALL/ANY with union
901
 
--echo #
902
 
create table t1 (s1 char);
 
930
#
 
931
# optimized ALL/ANY with union
 
932
#
 
933
create table t1 (s1 char) ENGINE=MyISAM;
903
934
insert into t1 values ('e');
904
935
select * from t1 where 'f' > any (select s1 from t1);
905
936
select * from t1 where 'f' > any (select s1 from t1 union select s1 from t1);
906
 
--replace_column 9 #
907
937
explain extended select * from t1 where 'f' > any (select s1 from t1 union select s1 from t1);
908
938
drop table t1;
909
939
 
910
 
--echo #
911
 
--echo # filesort in subquery (restoring join_tab)
912
 
--echo #
913
 
CREATE TEMPORARY TABLE t1 (number char(11) NOT NULL default '') ENGINE=MyISAM;
 
940
#
 
941
# filesort in subquery (restoring join_tab)
 
942
#
 
943
CREATE TABLE t1 (number char(11) NOT NULL default '') ENGINE=MyISAM;
914
944
INSERT INTO t1 VALUES ('69294728265'),('18621828126'),('89356874041'),('95895001874');
915
 
CREATE TEMPORARY TABLE t2 (code char(5) NOT NULL default '',UNIQUE KEY code (code)) ENGINE=MyISAM;
 
945
CREATE TABLE t2 (code char(5) NOT NULL default '',UNIQUE KEY code (code)) ENGINE=MyISAM;
916
946
INSERT INTO t2 VALUES ('1'),('1226'),('1245'),('1862'),('18623'),('1874'),('1967'),('6');
917
947
select c.number as phone,(select p.code from t2 p where c.number like concat(p.code, '%') order by length(p.code) desc limit 1) as code from t1 c;
918
948
drop table t1, t2;
919
949
 
920
 
--echo #
921
 
--echo # unresolved field error
922
 
--echo #
923
 
create temporary table t1 (s1 int) ENGINE=MyISAM; 
924
 
create temporary table t2 (s1 int) ENGINE=MyISAM;
 
950
#
 
951
# unresolved field error
 
952
#
 
953
create table t1 (s1 int) ENGINE=MyISAM; 
 
954
create table t2 (s1 int) ENGINE=MyISAM;
925
955
-- error 1054
926
956
select * from t1 where (select count(*) from t2 where t1.s2) = 1;
927
957
-- error 1054
930
960
select count(*) from t2 group by t1.s2;
931
961
drop table t1, t2;
932
962
 
933
 
--echo #
934
 
--echo # fix_fields() in add_ref_to_table_cond()
935
 
--echo #
936
 
CREATE TEMPORARY TABLE t1(COLA FLOAT NOT NULL,COLB FLOAT NOT NULL,COLC VARCHAR(20) DEFAULT NULL,PRIMARY KEY (COLA, COLB)) ENGINE=MyISAM;
937
 
CREATE TEMPORARY TABLE t2(COLA FLOAT NOT NULL,COLB FLOAT NOT NULL,COLC CHAR(1) NOT NULL,PRIMARY KEY (COLA)) ENGINE=MyISAM;
 
963
#
 
964
# fix_fields() in add_ref_to_table_cond()
 
965
#
 
966
CREATE TABLE t1(COLA FLOAT NOT NULL,COLB FLOAT NOT NULL,COLC VARCHAR(20) DEFAULT NULL,PRIMARY KEY (COLA, COLB)) ENGINE=MyISAM;
 
967
CREATE TABLE t2(COLA FLOAT NOT NULL,COLB FLOAT NOT NULL,COLC CHAR(1) NOT NULL,PRIMARY KEY (COLA)) ENGINE=MyISAM;
938
968
INSERT INTO t1 VALUES (1,1,'1A3240'), (1,2,'4W2365');
939
969
INSERT INTO t2 VALUES (100, 200, 'C');
940
970
SELECT DISTINCT COLC FROM t1 WHERE COLA = (SELECT COLA FROM t2 WHERE COLB = 200 AND COLC ='C' LIMIT 1);
941
971
DROP TABLE t1, t2;
942
972
 
943
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
 
973
CREATE TABLE t1 (a int) ENGINE=MyISAM;
944
974
INSERT INTO t1 VALUES (1),(1),(1),(1),(1),(2),(3),(4),(5);
945
975
SELECT DISTINCT (SELECT a) FROM t1 LIMIT 100;
946
976
DROP TABLE t1;
947
977
 
948
 
--echo #
949
 
--echo # Bug 2479
950
 
--echo #
 
978
#
 
979
# Bug 2479
 
980
#
951
981
 
952
 
CREATE TEMPORARY TABLE `t1` (
 
982
CREATE TABLE `t1` (
953
983
  `id` int NOT NULL auto_increment,
954
984
  `id_cns` int NOT NULL default '0',
955
985
  `tipo` enum('','UNO','DUE') NOT NULL default '',
962
992
  UNIQUE KEY `idx_cns_par_anno` (`id_cns`,`anno_dep`,`tipo`,`particolare`,`bis`))
963
993
 ENGINE=MyISAM;
964
994
INSERT INTO `t1` VALUES (1,16,'UNO',1987,2048,9681,0),(2,50,'UNO',1987,1536,13987,0),(3,16,'UNO',1987,2432,14594,0),(4,16,'UNO',1987,1792,13422,0),(5,16,'UNO',1987,1025,10240,0),(6,16,'UNO',1987,1026,7089,0);
965
 
CREATE TEMPORARY TABLE `t2` (
 
995
CREATE TABLE `t2` (
966
996
  `id` int NOT NULL auto_increment,
967
997
  `max_anno_dep` int NOT NULL default '0',
968
998
  PRIMARY KEY  (`id`)) ENGINE=MyISAM;
972
1002
 
973
1003
DROP TABLE t1, t2;
974
1004
 
975
 
--echo #
976
 
--echo # GLOBAL LIMIT
977
 
--echo #
978
 
create temporary table t1 (a int) ENGINE=MyISAM;
 
1005
#
 
1006
# GLOBAL LIMIT
 
1007
#
 
1008
create table t1 (a int) ENGINE=MyISAM;
979
1009
insert into t1 values (1), (2), (3);
980
1010
SET SQL_SELECT_LIMIT=1;
981
1011
select sum(a) from (select * from t1) as a;
983
1013
SET SQL_SELECT_LIMIT=default;
984
1014
drop table t1;
985
1015
 
986
 
--echo #
987
 
--echo # Bug #3118: subselect + order by
988
 
--echo #
 
1016
#
 
1017
# Bug #3118: subselect + order by
 
1018
#
989
1019
 
990
 
CREATE TABLE t1 (a int, b int, INDEX (a));
 
1020
CREATE TABLE t1 (a int, b int, INDEX (a)) ENGINE=MyISAM;
991
1021
INSERT INTO t1 VALUES (1, 1), (1, 2), (1, 3);
992
1022
SELECT * FROM t1 WHERE a = (SELECT MAX(a) FROM t1 WHERE a = 1) ORDER BY b;
993
1023
DROP TABLE t1;
994
1024
 
995
 
--echo # Item_cond fix field
996
 
--echo #
997
 
create table t1(val varchar(10));
 
1025
# Item_cond fix field
 
1026
#
 
1027
create table t1(val varchar(10)) ENGINE=MyISAM;
998
1028
insert into t1 values ('aaa'), ('bbb'),('eee'),('mmm'),('ppp');
999
1029
select count(*) from t1 as w1 where w1.val in (select w2.val from t1 as w2 where w2.val like 'm%') and w1.val in (select w3.val from t1 as w3 where w3.val like 'e%');
1000
1030
drop table t1;
1001
1031
 
1002
 
--echo #
1003
 
--echo # ref_or_null replacing with ref
1004
 
--echo #
1005
 
create table t1 (id int not null, text varchar(20) not null default '', primary key (id));
 
1032
#
 
1033
# ref_or_null replacing with ref
 
1034
#
 
1035
create table t1 (id int not null, text varchar(20) not null default '', primary key (id)) ENGINE=MyISAM;
1006
1036
insert into t1 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text11'), (12, 'text12');
1007
1037
select * from t1 where id not in (select id from t1 where id < 8);
1008
1038
select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
1009
 
--replace_column 9 #
1010
1039
explain extended select * from t1 where id not in (select id from t1 where id < 8);
1011
 
--replace_column 9 #
1012
1040
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
1013
1041
insert into t1 (id, text) values (1000, 'text1000'), (1001, 'text1001');
1014
 
create temporary table t2 (id int not null, text varchar(20) not null default '', primary key (id)) ENGINE=MyISAM;
 
1042
create table t2 (id int not null, text varchar(20) not null default '', primary key (id)) ENGINE=MyISAM;
1015
1043
insert into t2 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text1'), (12, 'text2'), (13, 'text3'), (14, 'text4'), (15, 'text5'), (16, 'text6'), (17, 'text7'), (18, 'text8'), (19, 'text9'), (20, 'text10'),(21, 'text1'), (22, 'text2'), (23, 'text3'), (24, 'text4'), (25, 'text5'), (26, 'text6'), (27, 'text7'), (28, 'text8'), (29, 'text9'), (30, 'text10'), (31, 'text1'), (32, 'text2'), (33, 'text3'), (34, 'text4'), (35, 'text5'), (36, 'text6'), (37, 'text7'), (38, 'text8'), (39, 'text9'), (40, 'text10'), (41, 'text1'), (42, 'text2'), (43, 'text3'), (44, 'text4'), (45, 'text5'), (46, 'text6'), (47, 'text7'), (48, 'text8'), (49, 'text9'), (50, 'text10');
1016
1044
select * from t1 a left join t2 b on (a.id=b.id or b.id is null) join t1 c on (if(isnull(b.id), 1000, b.id)=c.id);
1017
 
--replace_column 9 #
1018
1045
explain extended select * from t1 a left join t2 b on (a.id=b.id or b.id is null) join t1 c on (if(isnull(b.id), 1000, b.id)=c.id);
1019
1046
drop table t1,t2;
1020
1047
 
1021
 
--echo #
1022
 
--echo # Static tables & rund() in subqueries
1023
 
--echo #
1024
 
create temporary table t1 (a int) ENGINE=MyISAM;
 
1048
#
 
1049
# Static tables & rund() in subqueries
 
1050
#
 
1051
create table t1 (a int) ENGINE=MyISAM;
1025
1052
insert into t1 values (1);
1026
1053
explain select benchmark(1000, (select a from t1 where a=rand()));
1027
1054
drop table t1;
1028
1055
 
1029
 
--echo #
1030
 
--echo # bug 3188
1031
 
--echo #
1032
 
create temporary table t1(id int) ENGINE=MyISAM;
1033
 
create temporary table t2(id int) ENGINE=MyISAM;
1034
 
create temporary table t3(flag int) ENGINE=MyISAM;
 
1056
#
 
1057
# bug 3188
 
1058
#
 
1059
create table t1(id int) ENGINE=MyISAM;
 
1060
create table t2(id int) ENGINE=MyISAM;
 
1061
create table t3(flag int) ENGINE=MyISAM;
1035
1062
-- error 1064
1036
1063
select (select * from t3 where id not null) from t1, t2;
1037
1064
drop table t1,t2,t3;
1038
1065
 
1039
 
--echo #
1040
 
--echo # aggregate functions (Bug #3505)
1041
 
--echo #
1042
 
CREATE TABLE t1 (id INT);
1043
 
CREATE TABLE t2 (id INT);
 
1066
#
 
1067
# aggregate functions (Bug #3505)
 
1068
#
 
1069
CREATE TABLE t1 (id INT) ENGINE=MyISAM;
 
1070
CREATE TABLE t2 (id INT) ENGINE=MyISAM;
1044
1071
INSERT INTO t1 VALUES (1), (2);
1045
1072
INSERT INTO t2 VALUES (1);
1046
1073
SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id);
1049
1076
SELECT id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id) ORDER BY id;
1050
1077
DROP TABLE t1,t2;
1051
1078
 
1052
 
--echo #
1053
 
--echo # ALL/ANY test
1054
 
--echo #
1055
 
CREATE TABLE t1 ( a int, b int );
 
1079
#
 
1080
# ALL/ANY test
 
1081
#
 
1082
CREATE TABLE t1 ( a int, b int ) ENGINE=MyISAM;
1056
1083
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
1057
1084
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
1058
1085
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
1066
1093
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
1067
1094
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
1068
1095
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
1069
 
--echo # with index
 
1096
# with index
1070
1097
ALTER TABLE t1 ADD INDEX (a);
1071
1098
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
1072
1099
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
1080
1107
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
1081
1108
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
1082
1109
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
1083
 
--echo # having clause test
 
1110
# having clause test
1084
1111
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 HAVING a = 2);
1085
1112
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 HAVING a = 2);
1086
1113
SELECT a FROM t1 WHERE a = ANY (SELECT a FROM t1 HAVING a = 2);
1093
1120
SELECT a FROM t1 WHERE a >= ALL (SELECT a FROM t1 HAVING a = 2);
1094
1121
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 HAVING a = 2);
1095
1122
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 HAVING a = 2);
1096
 
--echo # union test
 
1123
# union test
1097
1124
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1098
1125
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1099
1126
SELECT a FROM t1 WHERE a = ANY (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1106
1133
SELECT a FROM t1 WHERE a >= ALL (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1107
1134
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1108
1135
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 WHERE b = 2 UNION SELECT a FROM t1 WHERE b = 2);
1109
 
--echo # union + having test
 
1136
# union + having test
1110
1137
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1111
1138
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1112
1139
SELECT a FROM t1 WHERE a = ANY (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1119
1146
SELECT a FROM t1 WHERE a >= ALL (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1120
1147
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1121
1148
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 HAVING a = 2 UNION SELECT a FROM t1 HAVING a = 2);
1122
 
--echo # row tests
1123
 
--echo # < > >= <= and = ALL/ <> ANY do not support row operation
 
1149
# row tests
 
1150
# < > >= <= and = ALL/ <> ANY do not support row operation
1124
1151
-- error 1241
1125
1152
SELECT a FROM t1 WHERE (1,2) > ANY (SELECT a FROM t1 WHERE b = 2);
1126
1153
-- error 1241
1137
1164
SELECT a FROM t1 WHERE (1,2) = ALL (SELECT a,2 FROM t1 WHERE b = 2);
1138
1165
-- error 1241
1139
1166
SELECT a FROM t1 WHERE (1,2) <> ANY (SELECT a,2 FROM t1 WHERE b = 2);
1140
 
--echo # following should be converted to IN
 
1167
# following should be converted to IN
1141
1168
-- error 1241
1142
1169
SELECT a FROM t1 WHERE (1,2) = ANY (SELECT a FROM t1 WHERE b = 2);
1143
1170
-- error 1241
1156
1183
SELECT a FROM t1 WHERE (a,1) <> ALL (SELECT a,1 FROM t1 WHERE b = 2 UNION SELECT a,1 FROM t1 WHERE b = 2);
1157
1184
SELECT a FROM t1 WHERE (a,1) = ANY (SELECT a,1 FROM t1 HAVING a = 2 UNION SELECT a,1 FROM t1 HAVING a = 2);
1158
1185
SELECT a FROM t1 WHERE (a,1) <> ALL (SELECT a,1 FROM t1 HAVING a = 2 UNION SELECT a,1 FROM t1 HAVING a = 2);
1159
 
--echo # without optimisation
 
1186
# without optimisation
1160
1187
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 WHERE b = 2 group by a);
1161
1188
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 WHERE b = 2 group by a);
1162
1189
SELECT a FROM t1 WHERE a = ANY (SELECT a FROM t1 WHERE b = 2 group by a);
1169
1196
SELECT a FROM t1 WHERE a >= ALL (SELECT a FROM t1 WHERE b = 2 group by a);
1170
1197
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 WHERE b = 2 group by a);
1171
1198
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 WHERE b = 2 group by a);
1172
 
--echo # without optimisation + having
 
1199
# without optimisation + having
1173
1200
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 group by a HAVING a = 2);
1174
1201
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 group by a HAVING a = 2);
1175
1202
SELECT a FROM t1 WHERE a = ANY (SELECT a FROM t1 group by a HAVING a = 2);
1182
1209
SELECT a FROM t1 WHERE a >= ALL (SELECT a FROM t1 group by a HAVING a = 2);
1183
1210
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 group by a HAVING a = 2);
1184
1211
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 group by a HAVING a = 2);
1185
 
--echo # EXISTS in string contence
 
1212
# EXISTS in string contence
1186
1213
SELECT concat(EXISTS(SELECT a FROM t1 WHERE b = 2 and a.a > t1.a), '-') from t1 a;
1187
1214
SELECT concat(EXISTS(SELECT a FROM t1 WHERE b = 2 and a.a < t1.a), '-') from t1 a;
1188
1215
SELECT concat(EXISTS(SELECT a FROM t1 WHERE b = 2 and a.a = t1.a), '-') from t1 a;
1189
1216
DROP TABLE t1;
1190
 
CREATE TABLE t1 ( a double, b double );
 
1217
CREATE TABLE t1 ( a double, b double ) ENGINE=MyISAM;
1191
1218
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
1192
1219
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 WHERE b = 2e0);
1193
1220
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 WHERE b = 2e0);
1202
1229
SELECT a FROM t1 WHERE a <= ALL (SELECT a FROM t1 WHERE b = 2e0);
1203
1230
SELECT a FROM t1 WHERE a <> ALL (SELECT a FROM t1 WHERE b = 2e0);
1204
1231
DROP TABLE t1;
1205
 
CREATE TABLE t1 ( a char(1), b char(1));
 
1232
CREATE TABLE t1 ( a char(1), b char(1)) ENGINE=MyISAM;
1206
1233
INSERT INTO t1 VALUES ('1','1'),('2','2'),('3','3');
1207
1234
SELECT a FROM t1 WHERE a > ANY (SELECT a FROM t1 WHERE b = '2');
1208
1235
SELECT a FROM t1 WHERE a < ANY (SELECT a FROM t1 WHERE b = '2');
1219
1246
DROP TABLE t1;
1220
1247
 
1221
1248
 
1222
 
--echo #
1223
 
--echo # SELECT(EXISTS * ...)optimisation
1224
 
--echo #
1225
 
create table t1 (a int, b int);
 
1249
#
 
1250
# SELECT(EXISTS * ...)optimisation
 
1251
#
 
1252
create table t1 (a int, b int) ENGINE=MyISAM;
1226
1253
insert into t1 values (1,2),(3,4);
1227
1254
select * from t1 up where exists (select * from t1 where t1.a=up.a);
1228
 
--replace_column 9 #
1229
1255
explain extended select * from t1 up where exists (select * from t1 where t1.a=up.a);
1230
1256
drop table t1;
1231
1257
 
1232
 
--echo #
1233
 
--echo # Bug #4102: subselect in HAVING
1234
 
--echo #
 
1258
#
 
1259
# Bug #4102: subselect in HAVING
 
1260
#
1235
1261
 
1236
 
CREATE TEMPORARY TABLE t1 (t1_a int) ENGINE=MyISAM;
 
1262
CREATE TABLE t1 (t1_a int) ENGINE=MyISAM;
1237
1263
INSERT INTO t1 VALUES (1);
1238
 
CREATE TABLE t2 (t2_a int, t2_b int, PRIMARY KEY (t2_a, t2_b));
 
1264
CREATE TABLE t2 (t2_a int, t2_b int, PRIMARY KEY (t2_a, t2_b)) ENGINE=MyISAM;
1239
1265
INSERT INTO t2 VALUES (1, 1), (1, 2);
1240
1266
SELECT * FROM t1, t2 table2 WHERE t1_a = 1 AND table2.t2_a = 1
1241
1267
  HAVING table2.t2_b = (SELECT MAX(t2_b) FROM t2 WHERE t2_a = table2.t2_a);
1242
1268
DROP TABLE t1, t2;
1243
1269
 
1244
 
--echo #
1245
 
--echo # Test problem with NULL and derived tables (Bug #4097)
1246
 
--echo #
 
1270
#
 
1271
# Test problem with NULL and derived tables (Bug #4097)
 
1272
#
1247
1273
 
1248
 
CREATE TEMPORARY TABLE t1 (id int default NULL,name varchar(10) default NULL) ENGINE=MyISAM;
 
1274
CREATE TABLE t1 (id int default NULL,name varchar(10) default NULL) ENGINE=MyISAM;
1249
1275
INSERT INTO t1 VALUES (1,'Tim'),(2,'Rebecca'),(3,NULL);
1250
 
CREATE TEMPORARY TABLE t2 (id int default NULL, pet varchar(10) default NULL) ENGINE=MyISAM;
 
1276
CREATE TABLE t2 (id int default NULL, pet varchar(10) default NULL) ENGINE=MyISAM;
1251
1277
INSERT INTO t2 VALUES (1,'Fido'),(2,'Spot'),(3,'Felix');
1252
1278
SELECT a.*, b.* FROM (SELECT * FROM t1) AS a JOIN t2 as b on a.id=b.id;
1253
1279
drop table t1,t2;
1254
1280
 
1255
 
--echo #
1256
 
--echo # Aggregate function comparation with ALL/ANY/SOME subselect
1257
 
--echo #
1258
 
CREATE TEMPORARY TABLE `t1` ( `a` int default NULL) ENGINE=MyISAM;
 
1281
#
 
1282
# Aggregate function comparation with ALL/ANY/SOME subselect
 
1283
#
 
1284
CREATE TABLE `t1` ( `a` int default NULL) ENGINE=MyISAM;
1259
1285
insert into t1 values (1);
1260
 
CREATE TEMPORARY TABLE `t2` ( `b` int default NULL, `a` int default NULL) ENGINE=MyISAM;
 
1286
CREATE TABLE `t2` ( `b` int default NULL, `a` int default NULL) ENGINE=MyISAM;
1261
1287
insert into t2 values (1,2);
1262
1288
select t000.a, count(*) `C` FROM t1 t000 GROUP BY t000.a HAVING count(*) > ALL (SELECT count(*) FROM t2 t001 WHERE t001.a=1);
1263
1289
drop table t1,t2;
1264
1290
 
1265
 
--echo #
1266
 
--echo # BUG#5003 - like in subselect
1267
 
--echo #
1268
 
CREATE TABLE t1(`IZAVORGANG_ID` VARCHAR(11) COLLATE utf8_bin,`KUERZEL` VARCHAR(10) COLLATE utf8_bin,`IZAANALYSEART_ID` VARCHAR(11) COLLATE utf8_bin,`IZAPMKZ_ID` VARCHAR(11) COLLATE utf8_bin);
 
1291
#
 
1292
# BUG#5003 - like in subselect
 
1293
#
 
1294
CREATE TABLE t1(`IZAVORGANG_ID` VARCHAR(11) COLLATE utf8_bin,`KUERZEL` VARCHAR(10) COLLATE utf8_bin,`IZAANALYSEART_ID` VARCHAR(11) COLLATE utf8_bin,`IZAPMKZ_ID` VARCHAR(11) COLLATE utf8_bin) ENGINE=MyISAM;
1269
1295
CREATE INDEX AK01IZAVORGANG ON t1(izaAnalyseart_id,Kuerzel);
1270
1296
INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000001','601','D0000000001','I0000000001');
1271
1297
INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000002','602','D0000000001','I0000000001');
1274
1300
SELECT `IZAVORGANG_ID` FROM t1 WHERE `KUERZEL` IN(SELECT MIN(`KUERZEL`)`Feld1` FROM t1 WHERE `KUERZEL` LIKE'601%'And`IZAANALYSEART_ID`='D0000000001');
1275
1301
drop table t1;
1276
1302
 
1277
 
--echo #
1278
 
--echo # Optimized IN with compound index
1279
 
--echo #
1280
 
CREATE TEMPORARY TABLE `t1` ( `aid` int NOT NULL default '0', `bid` int NOT NULL default '0', PRIMARY KEY  (`aid`,`bid`)) ENGINE=MyISAM;
1281
 
CREATE TEMPORARY TABLE `t2` ( `aid` int NOT NULL default '0', `bid` int NOT NULL default '0', PRIMARY KEY  (`aid`,`bid`)) ENGINE=MyISAM;
 
1303
#
 
1304
# Optimized IN with compound index
 
1305
#
 
1306
CREATE TABLE `t1` ( `aid` int NOT NULL default '0', `bid` int NOT NULL default '0', PRIMARY KEY  (`aid`,`bid`)) ENGINE=MyISAM;
 
1307
CREATE TABLE `t2` ( `aid` int NOT NULL default '0', `bid` int NOT NULL default '0', PRIMARY KEY  (`aid`,`bid`)) ENGINE=MyISAM;
1282
1308
insert into t1 values (1,1),(1,2),(2,1),(2,2);
1283
1309
insert into t2 values (1,2),(2,2);
1284
1310
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
1290
1316
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
1291
1317
drop table t1,t2;
1292
1318
 
1293
 
--echo #
1294
 
--echo # resolving fields of grouped outer SELECT
1295
 
--echo #
1296
 
CREATE TABLE t1 (howmanyvalues bigint, avalue int);
 
1319
#
 
1320
# resolving fields of grouped outer SELECT
 
1321
#
 
1322
CREATE TABLE t1 (howmanyvalues bigint, avalue int) ENGINE=MyISAM;
1297
1323
INSERT INTO t1 VALUES (1, 1),(2, 1),(2, 2),(3, 1),(3, 2),(3, 3),(4, 1),(4, 2),(4, 3),(4, 4);
1298
1324
SELECT howmanyvalues, count(*) from t1 group by howmanyvalues;
1299
1325
SELECT a.howmanyvalues, (SELECT count(*) from t1 b where b.howmanyvalues = a.howmanyvalues) as mycount from t1 a group by a.howmanyvalues;
1303
1329
SELECT a.howmanyvalues, (SELECT count(*) from t1 b where b.howmanyvalues = a.avalue) as mycount from t1 a group by a.howmanyvalues;
1304
1330
drop table t1;
1305
1331
 
1306
 
create table t1 (x int);
 
1332
create table t1 (x int) ENGINE=MyISAM;
1307
1333
select  (select b.x from t1 as b where b.x=a.x) from t1 as a where a.x=2 group by a.x;
1308
1334
drop table t1;
1309
1335
 
1310
 
--echo #
1311
 
--echo # Test of correct maybe_null flag returning by subquwery for temporary table
1312
 
--echo # creation
1313
 
--echo #
1314
 
CREATE TEMPORARY TABLE `t1` ( `master` int NOT NULL default '0', `map` int NOT NULL default '0', `slave` int NOT NULL default '0', `access` int NOT NULL default '0', UNIQUE KEY `access_u` (`master`,`map`,`slave`)) ENGINE=MyISAM;
 
1336
#
 
1337
# Test of correct maybe_null flag returning by subquwery for temporary table
 
1338
# creation
 
1339
#
 
1340
CREATE TABLE `t1` ( `master` int NOT NULL default '0', `map` int NOT NULL default '0', `slave` int NOT NULL default '0', `access` int NOT NULL default '0', UNIQUE KEY `access_u` (`master`,`map`,`slave`)) ENGINE=MyISAM;
1315
1341
INSERT INTO `t1` VALUES (1,0,0,700),(1,1,1,400),(1,5,5,400),(1,12,12,400),(1,12,32,400),(4,12,32,400);
1316
 
CREATE TEMPORARY TABLE `t2` ( `id` int NOT NULL default '0', `pid` int NOT NULL default '0', `map` int NOT NULL default '0', `level` int NOT NULL default '0', `title` varchar(255) default NULL, PRIMARY KEY  (`id`,`pid`,`map`), KEY `level` (`level`), KEY `id` (`id`,`map`)) ENGINE=MyISAM ;
 
1342
CREATE TABLE `t2` ( `id` int NOT NULL default '0', `pid` int NOT NULL default '0', `map` int NOT NULL default '0', `level` int NOT NULL default '0', `title` varchar(255) default NULL, PRIMARY KEY  (`id`,`pid`,`map`), KEY `level` (`level`), KEY `id` (`id`,`map`)) ENGINE=MyISAM ;
1317
1343
INSERT INTO `t2` VALUES (6,5,12,7,'a'),(12,0,0,7,'a'),(12,1,0,7,'a'),(12,5,5,7,'a'),(12,5,12,7,'a');
1318
1344
-- error 1054
1319
1345
SELECT b.sc FROM (SELECT (SELECT a.access FROM t1 a WHERE a.map = op.map AND a.slave = op.pid AND a.master = 1) ac FROM t2 op WHERE op.id = 12 AND op.map = 0) b;
1320
1346
SELECT b.ac FROM (SELECT (SELECT a.access FROM t1 a WHERE a.map = op.map AND a.slave = op.pid AND a.master = 1) ac FROM t2 op WHERE op.id = 12 AND op.map = 0) b;
1321
1347
drop tables t1,t2;
1322
1348
 
1323
 
--echo #
1324
 
--echo # Subselect in non-select command just after connection
1325
 
--echo #
 
1349
#
 
1350
# Subselect in non-select command just after connection
 
1351
#
1326
1352
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
1327
1353
connection root;
1328
1354
set @got_val= (SELECT 1 FROM (SELECT 'A' as my_col) as T1 ) ;
1329
1355
 
1330
 
--echo #
1331
 
--echo # primary query with temporary table and subquery with groupping
1332
 
--echo #
1333
 
create temporary table t1 (a int, b int) ENGINE=MyISAM;
1334
 
create temporary table t2 (a int, b int) ENGINE=MyISAM;
 
1356
#
 
1357
# primary query with temporary table and subquery with groupping
 
1358
#
 
1359
create table t1 (a int, b int) ENGINE=MyISAM;
 
1360
create table t2 (a int, b int) ENGINE=MyISAM;
1335
1361
insert into t1 values (1,1),(1,2),(1,3),(2,4),(2,5);
1336
1362
insert into t2 values (1,3),(2,1);
1337
1363
select distinct a,b, (select max(b) from t2 where t1.b=t2.a) from t1 order by t1.b;
1338
1364
drop table t1, t2;
1339
1365
 
1340
 
--echo #
1341
 
--echo # Equal operation under row and empty subquery
1342
 
--echo #
1343
 
create table t1 (s1 int,s2 int);
 
1366
#
 
1367
# Equal operation under row and empty subquery
 
1368
#
 
1369
create table t1 (s1 int,s2 int) ENGINE=MyISAM;
1344
1370
insert into t1 values (20,15);
1345
1371
select * from t1 where  (('a',null) <=> (select 'a',s2 from t1 where s1 = 0));
1346
1372
drop table t1;
1347
1373
 
1348
 
--echo #
1349
 
--echo # ALL/ANY with NULL
1350
 
--echo #
1351
 
create table t1 (s1 int);
 
1374
#
 
1375
# ALL/ANY with NULL
 
1376
#
 
1377
create table t1 (s1 int) ENGINE=MyISAM;
1352
1378
insert into t1 values (1),(null);
1353
1379
select * from t1 where s1 < all (select s1 from t1);
1354
1380
select s1, s1 < all (select s1 from t1) from t1;
1355
1381
drop table t1;
1356
1382
 
1357
 
--echo #
1358
 
--echo # reference on changable fields from subquery
1359
 
--echo #
 
1383
#
 
1384
# reference on changable fields from subquery
 
1385
#
1360
1386
CREATE TABLE t1 (
1361
1387
  Code char(3) NOT NULL default '',
1362
1388
  Name char(52) NOT NULL default '',
1373
1399
  HeadOfState char(60) default NULL,
1374
1400
  Capital int default NULL,
1375
1401
  Code2 char(2) NOT NULL default ''
1376
 
);
 
1402
) ENGINE=MyISAM;
1377
1403
INSERT INTO t1 VALUES ('XXX','Xxxxx','Oceania','Xxxxxx',26.00,0,0,0,0,0,'Xxxxx','Xxxxx','Xxxxx',NULL,'XX');
1378
1404
INSERT INTO t1 VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,68000,75.1,334.00,NULL,'Amerika Samoa','US Territory','George W. Bush',54,'AS');
1379
1405
INSERT INTO t1 VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes françaises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
1384
1410
  Population < 200);
1385
1411
drop table t1;
1386
1412
 
1387
 
--echo #
1388
 
--echo # Test for BUG#7885: Server crash when 'any' subselect compared to
1389
 
--echo # non-existant field.
1390
 
--echo #
1391
 
create temporary table t1 (a1 int) ENGINE=MyISAM;
1392
 
create temporary table t2 (b1 int) ENGINE=MyISAM;
1393
 
--error ER_BAD_FIELD_ERROR
 
1413
#
 
1414
# Test for BUG#7885: Server crash when 'any' subselect compared to
 
1415
# non-existant field.
 
1416
#
 
1417
create table t1 (a1 int) ENGINE=MyISAM;
 
1418
create table t2 (b1 int) ENGINE=MyISAM;
 
1419
--error 1054
1394
1420
select * from t1 where a2 > any(select b1 from t2);
1395
1421
select * from t1 where a1 > any(select b1 from t2);
1396
1422
drop table t1,t2;
1397
1423
 
1398
1424
 
1399
 
--echo #
1400
 
--echo # Comparison subquery with * and row
1401
 
--echo #
1402
 
create temporary table t1 (a integer, b integer) ENGINE=MyISAM;
 
1425
#
 
1426
# Comparison subquery with * and row
 
1427
#
 
1428
create table t1 (a integer, b integer) ENGINE=MyISAM;
1403
1429
select (select * from t1) = (select 1,2);
1404
1430
select (select 1,2) = (select * from t1);
1405
 
--echo # queries whih can be converted to IN
 
1431
# queries whih can be converted to IN
1406
1432
select  row(1,2) = ANY (select * from t1);
1407
1433
select  row(1,2) != ALL (select * from t1);
1408
1434
drop table t1;
1409
1435
 
1410
 
--echo #
1411
 
--echo # Comparison subquery and row with nested rows
1412
 
--echo #
1413
 
create temporary table t1 (a integer, b integer) ENGINE=MyISAM;
 
1436
#
 
1437
# Comparison subquery and row with nested rows
 
1438
#
 
1439
create table t1 (a integer, b integer) ENGINE=MyISAM;
1414
1440
-- error 1241
1415
1441
select row(1,(2,2)) in (select * from t1 );
1416
1442
-- error 1241
1419
1445
select (select * from t1) = row(1,(2,2));
1420
1446
drop table t1;
1421
1447
 
1422
 
--echo #
1423
 
--echo # Forward reference detection
1424
 
--echo #
 
1448
#
 
1449
# Forward reference detection
 
1450
#
1425
1451
create  table t1 (a integer);
1426
1452
insert into t1 values (1);
1427
1453
-- error 1247
1433
1459
select 1 = ALL (select 1 from t1 where 1 = xx ), 1 as xx;
1434
1460
drop table t1;
1435
1461
 
1436
 
--echo #
1437
 
--echo # Test for BUG#8218
1438
 
--echo #
1439
 
CREATE TEMPORARY TABLE t1 (
 
1462
#
 
1463
# Test for BUG#8218
 
1464
#
 
1465
CREATE TABLE t1 (
1440
1466
  categoryId int NOT NULL,
1441
1467
  courseId int NOT NULL,
1442
1468
  startDate datetime NOT NULL,
1456
1482
(3,51,'2004-02-09','2010-01-01','2004-02-09','2004-02-09',''),
1457
1483
(5,12,'2004-02-18','2010-01-01','2004-02-18','2004-02-18','');
1458
1484
 
1459
 
CREATE TEMPORARY TABLE t2 (
 
1485
CREATE TABLE t2 (
1460
1486
  userId int NOT NULL,
1461
1487
  courseId int NOT NULL,
1462
1488
  date datetime NOT NULL)
1470
1496
(5141,89,'2004-10-22'),(5141,51,'2004-10-26');
1471
1497
 
1472
1498
 
1473
 
CREATE TEMPORARY TABLE t3 (
 
1499
CREATE TABLE t3 (
1474
1500
  groupId int NOT NULL,
1475
1501
  parentId int NOT NULL,
1476
1502
  startDate datetime NOT NULL,
1482
1508
 
1483
1509
INSERT INTO t3 VALUES (12,9,'1000-01-01','3999-12-31','2004-01-29','2004-01-29',NULL);
1484
1510
 
1485
 
CREATE TEMPORARY TABLE t4 (
 
1511
CREATE TABLE t4 (
1486
1512
  id int NOT NULL,
1487
1513
  groupTypeId int NOT NULL,
1488
1514
  groupKey varchar(50) NOT NULL,
1496
1522
INSERT INTO t4 VALUES (9,5,'stationer','stationer',0,'Stationer','2004-01-29','2004-01-29'),
1497
1523
(12,5,'group2','group2',0,'group2','2004-01-29','2004-01-29');
1498
1524
 
1499
 
CREATE TEMPORARY TABLE t5 (
 
1525
CREATE TABLE t5 (
1500
1526
  userId int NOT NULL,
1501
1527
  groupId int NOT NULL,
1502
1528
  createDate datetime NOT NULL,
1538
1564
 
1539
1565
drop table t1, t2, t3, t4, t5;
1540
1566
 
1541
 
--echo #
1542
 
--echo # Transformation in left expression of subquery (BUG#8888)
1543
 
--echo #
1544
 
create temporary table t1 (a int) ENGINE=MyISAM;
 
1567
#
 
1568
# Transformation in left expression of subquery (BUG#8888)
 
1569
#
 
1570
create table t1 (a int) ENGINE=MyISAM;
1545
1571
insert into t1 values (1), (2), (3);
1546
1572
SELECT 1 FROM t1 WHERE (SELECT 1) in (SELECT 1);
1547
1573
drop table t1;
1548
1574
 
1549
 
--echo #
1550
 
--echo # single row subqueries and row operations (code covarage improvement)
1551
 
--echo #
1552
 
create temporary table t1 (a int, b int) ENGINE=MyISAM;
 
1575
#
 
1576
# single row subqueries and row operations (code covarage improvement)
 
1577
#
 
1578
create table t1 (a int, b int) ENGINE=MyISAM;
1553
1579
insert into t1 values (1,2);
1554
1580
-- error 1241
1555
1581
select 1 = (select * from t1);
1565
1591
select (select * from t1) = (1,2,3);
1566
1592
drop table t1;
1567
1593
 
1568
 
--echo #
1569
 
--echo # Item_int_with_ref check (BUG#10020)
1570
 
--echo #
1571
 
--echo #CREATE TABLE `t1` (
1572
 
--echo #  `itemid` bigint NOT NULL auto_increment,
1573
 
--echo #  `sessionid` bigint default NULL,
1574
 
--echo #  `time` int NOT NULL default '0',
1575
 
--echo #  `data` text collate latin1_general_ci NOT NULL,
1576
 
--echo #  PRIMARY KEY  (`itemid`)
1577
 
--echo #);
1578
 
--echo #INSERT INTO `t1` VALUES (1, 1, 1, '');
1579
 
--echo #CREATE TABLE `t2` (
1580
 
--echo #  `sessionid` bigint NOT NULL auto_increment,
1581
 
--echo #  `pid` int NOT NULL default '0',
1582
 
--echo #  `date` int NOT NULL default '0',
1583
 
--echo #  `ip` varchar(15) collate latin1_general_ci NOT NULL default '',
1584
 
--echo #  PRIMARY KEY  (`sessionid`)
1585
 
--echo #);
1586
 
--echo #INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1');
1587
 
--echo #SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30;
1588
 
--echo #drop tables t1,t2;
 
1594
#
 
1595
# Item_int_with_ref check (BUG#10020)
 
1596
#
 
1597
#CREATE TABLE `t1` (
 
1598
#  `itemid` bigint NOT NULL auto_increment,
 
1599
#  `sessionid` bigint default NULL,
 
1600
#  `time` int NOT NULL default '0',
 
1601
#  `data` text collate latin1_general_ci NOT NULL,
 
1602
#  PRIMARY KEY  (`itemid`)
 
1603
#);
 
1604
#INSERT INTO `t1` VALUES (1, 1, 1, '');
 
1605
#CREATE TABLE `t2` (
 
1606
#  `sessionid` bigint NOT NULL auto_increment,
 
1607
#  `pid` int NOT NULL default '0',
 
1608
#  `date` int NOT NULL default '0',
 
1609
#  `ip` varchar(15) collate latin1_general_ci NOT NULL default '',
 
1610
#  PRIMARY KEY  (`sessionid`)
 
1611
#);
 
1612
#INSERT INTO `t2` VALUES (1, 1, 1, '10.10.10.1');
 
1613
#SELECT s.ip, count( e.itemid ) FROM `t1` e JOIN t2 s ON s.sessionid = e.sessionid WHERE e.sessionid = ( SELECT sessionid FROM t2 ORDER BY sessionid DESC LIMIT 1 ) GROUP BY s.ip HAVING count( e.itemid ) >0 LIMIT 0 , 30;
 
1614
#drop tables t1,t2;
1589
1615
 
1590
 
--echo # BUG#11821 : Select from subselect using aggregate function on an enum
1591
 
--echo # segfaults:
1592
 
create temporary table t1 (fld enum('0','1')) ENGINE=MyISAM;
 
1616
# BUG#11821 : Select from subselect using aggregate function on an enum
 
1617
# segfaults:
 
1618
create table t1 (fld enum('0','1')) ENGINE=MyISAM;
1593
1619
insert into t1 values ('1');
1594
1620
select * from (select max(fld) from t1) as foo;
1595
1621
drop table t1;
1596
1622
 
1597
 
--echo #
1598
 
--echo # Bug #11867: queries with ROW(,elems>) IN (SELECT DISTINCT <cols> FROM ...)
1599
 
--echo #
 
1623
#
 
1624
# Bug #11867: queries with ROW(,elems>) IN (SELECT DISTINCT <cols> FROM ...)
 
1625
#
1600
1626
 
1601
 
CREATE TABLE t1 (one int, two int, flag char(1));
1602
 
CREATE TABLE t2 (one int, two int, flag char(1));
 
1627
CREATE TABLE t1 (one int, two int, flag char(1)) ENGINE=MyISAM;
 
1628
CREATE TABLE t2 (one int, two int, flag char(1)) ENGINE=MyISAM;
1603
1629
INSERT INTO t1 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
1604
1630
INSERT INTO t2 VALUES(1,2,'Y'),(2,3,'Y'),(3,4,'Y'),(5,6,'N'),(7,8,'N');
1605
1631
 
1625
1651
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
1626
1652
DROP TABLE t1,t2;
1627
1653
 
1628
 
--echo #
1629
 
--echo # Bug #12392: where cond with IN predicate for rows and NULL values in table 
1630
 
--echo #
 
1654
#
 
1655
# Bug #12392: where cond with IN predicate for rows and NULL values in table 
 
1656
#
1631
1657
 
1632
 
CREATE TEMPORARY TABLE t1 (a char(5), b char(5)) ENGINE=MyISAM;
 
1658
CREATE TABLE t1 (a char(5), b char(5)) ENGINE=MyISAM;
1633
1659
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
1634
1660
 
1635
1661
SELECT * FROM t1 WHERE (a,b) IN (('aaa','aaa'), ('aaa','bbb'));
1636
1662
 
1637
1663
DROP TABLE t1;
1638
1664
 
1639
 
--echo #
1640
 
--echo # Bug #11479: subquery over left join with an empty inner table 
1641
 
--echo #
 
1665
#
 
1666
# Bug #11479: subquery over left join with an empty inner table 
 
1667
#
1642
1668
 
1643
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
1644
 
CREATE TEMPORARY TABLE t2 (a int, b int) ENGINE=MyISAM;
1645
 
CREATE TEMPORARY TABLE t3 (b int NOT NULL) ENGINE=MyISAM;
 
1669
CREATE TABLE t1 (a int) ENGINE=MyISAM;
 
1670
CREATE TABLE t2 (a int, b int) ENGINE=MyISAM;
 
1671
CREATE TABLE t3 (b int NOT NULL) ENGINE=MyISAM;
1646
1672
INSERT INTO t1 VALUES (1), (2), (3), (4);
1647
1673
INSERT INTO t2 VALUES (1,10), (3,30);
1648
1674
 
1654
1680
 
1655
1681
DROP TABLE t1,t2,t3;
1656
1682
 
1657
 
--echo #
1658
 
--echo # Bug#18503: Queries with a quantified subquery returning empty set may
1659
 
--echo # return a wrong result. 
1660
 
--echo #
1661
 
CREATE TEMPORARY TABLE t1 (f1 INT) ENGINE=MyISAM;
1662
 
CREATE TEMPORARY TABLE t2 (f2 INT) ENGINE=MyISAM;
 
1683
#
 
1684
# Bug#18503: Queries with a quantified subquery returning empty set may
 
1685
# return a wrong result. 
 
1686
#
 
1687
CREATE TABLE t1 (f1 INT) ENGINE=MyISAM;
 
1688
CREATE TABLE t2 (f2 INT) ENGINE=MyISAM;
1663
1689
INSERT INTO t1 VALUES (1);
1664
1690
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2);
1665
1691
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE 1=0);
1668
1694
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE f2=0);
1669
1695
DROP TABLE t1, t2;
1670
1696
 
1671
 
--echo # BUG#20975 Wrong query results for subqueries within NOT
1672
 
create table t1 (s1 char);
 
1697
# BUG#20975 Wrong query results for subqueries within NOT
 
1698
create table t1 (s1 char) ENGINE=MyISAM;
1673
1699
insert into t1 values (1),(2);
1674
1700
 
1675
1701
select * from t1 where (s1 < any (select s1 from t1));
1685
1711
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
1686
1712
drop table t1;
1687
1713
 
1688
 
--echo #
1689
 
--echo # Bug #16255: Subquery in where
1690
 
--echo #
 
1714
#
 
1715
# Bug #16255: Subquery in where
 
1716
#
1691
1717
create table t1 (
1692
1718
  retailerID varchar(8) NOT NULL,
1693
1719
  statusID   int NOT NULL,
1694
1720
  changed    datetime NOT NULL,
1695
 
  UNIQUE KEY retailerID (retailerID, statusID, changed));
 
1721
  UNIQUE KEY retailerID (retailerID, statusID, changed))
 
1722
  ENGINE=MyISAM;
1696
1723
 
1697
1724
INSERT INTO t1 VALUES("0026", "1", "2005-12-06 12:18:56");
1698
1725
INSERT INTO t1 VALUES("0026", "2", "2006-01-06 12:25:53");
1707
1734
          group by r2.retailerId);
1708
1735
drop table t1;
1709
1736
 
1710
 
--echo #
1711
 
--echo # Bug #21180: Subselect with index for both WHERE and ORDER BY 
1712
 
--echo #             produces empty result
1713
 
--echo #
1714
 
create table t1(a int, primary key (a));
 
1737
#
 
1738
# Bug #21180: Subselect with index for both WHERE and ORDER BY 
 
1739
#             produces empty result
 
1740
#
 
1741
create table t1(a int, primary key (a)) ENGINE=MyISAM;
1715
1742
insert into t1 values (10);
1716
1743
 
1717
 
create table t2 (a int primary key, b varchar(32), c int, unique key b(c, b));
 
1744
create table t2 (a int primary key, b varchar(32), c int, unique key b(c, b)) ENGINE=MyISAM;
1718
1745
insert into t2(a, c, b) values (1,10,'359'), (2,10,'35988'), (3,10,'35989');
1719
1746
 
1720
 
--replace_column 9 #
1721
1747
explain SELECT t1.a, r.a, r.b FROM t1 LEFT JOIN t2 r 
1722
1748
  ON r.a = (SELECT t2.a FROM t2 WHERE t2.c = t1.a AND t2.b <= '359899' 
1723
1749
             ORDER BY t2.c DESC, t2.b DESC LIMIT 1) WHERE t1.a = 10;
1734
1760
 
1735
1761
drop table t1,t2;
1736
1762
 
1737
 
--echo #
1738
 
--echo # Bug #21853: assert failure for a grouping query with
1739
 
--echo #             an ALL/ANY quantified subquery in HAVING 
1740
 
--echo #
 
1763
#
 
1764
# Bug #21853: assert failure for a grouping query with
 
1765
#             an ALL/ANY quantified subquery in HAVING 
 
1766
#
1741
1767
 
1742
 
CREATE TEMPORARY TABLE t1 (                  
 
1768
CREATE TABLE t1 (                  
1743
1769
  field1 int NOT NULL,                 
1744
1770
  field2 int NOT NULL,                 
1745
1771
  field3 int NOT NULL,                 
1746
1772
  PRIMARY KEY  (field1,field2,field3))
1747
1773
  ENGINE=MyISAM;
1748
1774
 
1749
 
CREATE TEMPORARY TABLE t2 (             
 
1775
CREATE TABLE t2 (             
1750
1776
  fieldA int NOT NULL,            
1751
1777
  fieldB int NOT NULL,            
1752
1778
  PRIMARY KEY  (fieldA,fieldB))
1772
1798
 
1773
1799
DROP TABLE t1, t2;
1774
1800
 
1775
 
--echo #
1776
 
--echo # Bug #23478: not top-level IN subquery returning a non-empty result set
1777
 
--echo #             with possible NULL values by index access from the outer query
1778
 
--echo #
 
1801
#
 
1802
# Bug #23478: not top-level IN subquery returning a non-empty result set
 
1803
#             with possible NULL values by index access from the outer query
 
1804
#
1779
1805
 
1780
 
CREATE TEMPORARY TABLE t1(a int, INDEX (a)) ENGINE=MyISAM;
 
1806
CREATE TABLE t1(a int, INDEX (a)) ENGINE=MyISAM;
1781
1807
INSERT INTO t1 VALUES (1), (3), (5), (7);
1782
1808
INSERT INTO t1 VALUES (NULL);
1783
1809
 
1784
 
CREATE TEMPORARY TABLE t2(a int) ENGINE=MyISAM;
 
1810
CREATE TABLE t2(a int) ENGINE=MyISAM;
1785
1811
INSERT INTO t2 VALUES (1),(2),(3);
1786
1812
 
1787
1813
EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2;
1789
1815
 
1790
1816
DROP TABLE t1,t2;
1791
1817
 
1792
 
--echo #
1793
 
--echo # Bug #11302: getObject() returns a String for a sub-query of type datetime
1794
 
--echo #
1795
 
CREATE TABLE t1 (a DATETIME);
 
1818
#
 
1819
# Bug #11302: getObject() returns a String for a sub-query of type datetime
 
1820
#
 
1821
CREATE TABLE t1 (a DATETIME) ENGINE=MyISAM;
1796
1822
INSERT INTO t1 VALUES ('1998-09-23'), ('2003-03-25');
1797
1823
 
1798
 
CREATE TEMPORARY TABLE t2 ENGINE=MyISAM AS SELECT 
 
1824
CREATE TABLE t2 ENGINE=MyISAM AS SELECT 
1799
1825
  (SELECT a FROM t1 WHERE a < '2000-01-01') AS sub_a 
1800
1826
   FROM t1 WHERE a > '2000-01-01';
1801
1827
SHOW CREATE TABLE t2;
1802
1828
 
1803
 
CREATE TEMPORARY TABLE t3 ENGINE=MyISAM AS (SELECT a FROM t1 WHERE a < '2000-01-01') UNION (SELECT a FROM t1 WHERE a > '2000-01-01'); 
 
1829
CREATE TABLE t3 ENGINE=MyISAM AS (SELECT a FROM t1 WHERE a < '2000-01-01') UNION (SELECT a FROM t1 WHERE a > '2000-01-01'); 
1804
1830
SHOW CREATE TABLE t3;
1805
1831
 
1806
1832
DROP TABLE t1,t2,t3;
1807
1833
 
1808
 
--echo #
1809
 
--echo # Bug 24653: sorting by expressions containing subselects
1810
 
--echo #            that return more than one row
1811
 
--echo #
 
1834
#
 
1835
# Bug 24653: sorting by expressions containing subselects
 
1836
#            that return more than one row
 
1837
#
1812
1838
 
1813
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
 
1839
CREATE TABLE t1 (a int) ENGINE=MyISAM;
1814
1840
INSERT INTO t1 VALUES (2), (4), (1), (3);
1815
1841
 
1816
 
CREATE TABLE t2 (b int, c int);
 
1842
CREATE TABLE t2 (b int, c int) ENGINE=MyISAM;
1817
1843
INSERT INTO t2 VALUES
1818
1844
  (2,1), (1,3), (2,1), (4,4), (2,2), (1,4);
1819
1845
 
1820
1846
SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2 );
1821
 
--error ER_SUBQUERY_NO_1_ROW
 
1847
--error 1242
1822
1848
SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1);
1823
1849
SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2), a;
1824
 
--error ER_SUBQUERY_NO_1_ROW
 
1850
--error 1242
1825
1851
SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1), a;
1826
1852
 
1827
1853
SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 2);
1828
 
--error ER_SUBQUERY_NO_1_ROW
 
1854
--error 1242
1829
1855
SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 1);
1830
1856
 
1831
1857
 
1832
1858
SELECT a FROM t1 GROUP BY a
1833
1859
  HAVING IFNULL((SELECT b FROM t2 WHERE b > 2),
1834
1860
                (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
1835
 
--error ER_SUBQUERY_NO_1_ROW
 
1861
--error 1242
1836
1862
SELECT a FROM t1 GROUP BY a
1837
1863
  HAVING IFNULL((SELECT b FROM t2 WHERE b > 1),
1838
1864
                (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
1840
1866
SELECT a FROM t1 GROUP BY a
1841
1867
  HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
1842
1868
                (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
1843
 
--error ER_SUBQUERY_NO_1_ROW
 
1869
--error 1242
1844
1870
SELECT a FROM t1 GROUP BY a
1845
1871
  HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
1846
1872
                (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)) > 3;
1848
1874
SELECT a FROM t1
1849
1875
  ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 2),
1850
1876
                  (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
1851
 
--error ER_SUBQUERY_NO_1_ROW
 
1877
--error 1242
1852
1878
SELECT a FROM t1
1853
1879
  ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 1),
1854
1880
                  (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
1856
1882
SELECT a FROM t1
1857
1883
  ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
1858
1884
                  (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
1859
 
--error ER_SUBQUERY_NO_1_ROW
 
1885
--error 1242
1860
1886
SELECT a FROM t1
1861
1887
  ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
1862
1888
                  (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
1863
1889
 
1864
1890
DROP TABLE t1,t2;
1865
1891
 
1866
 
--echo # End of 4.1 tests
 
1892
# End of 4.1 tests
1867
1893
 
1868
 
--echo #
1869
 
--echo #decimal-related tests
1870
 
--echo #
1871
 
create table t1 (df decimal(5,1));
 
1894
#
 
1895
#decimal-related tests
 
1896
#
 
1897
create table t1 (df decimal(5,1)) ENGINE=MyISAM;
1872
1898
insert into t1 values(1.1);
1873
1899
insert into t1 values(2.2);
1874
1900
 
1876
1902
select * from t1 where df >= all (select avg(df) from t1 group by df);
1877
1903
drop table t1;
1878
1904
 
1879
 
create temporary table t1 (df decimal(5,1)) ENGINE=MyISAM;
 
1905
create table t1 (df decimal(5,1)) ENGINE=MyISAM;
1880
1906
insert into t1 values(1.1);
1881
1907
select 1.1 * exists(select * from t1);
1882
1908
drop table t1;
1883
1909
 
1884
 
CREATE TEMPORARY TABLE t1 (
 
1910
CREATE TABLE t1 (
1885
1911
  grp int default NULL,
1886
1912
  a decimal(10,2) default NULL) ENGINE=MyISAM;
1887
1913
 
1890
1916
select min(a) from t1 group by grp;
1891
1917
drop table t1;
1892
1918
 
1893
 
--echo #
1894
 
--echo # Test for bug #9338: lame substitution of c1 instead of c2 
1895
 
--echo #
 
1919
#
 
1920
# Test for bug #9338: lame substitution of c1 instead of c2 
 
1921
#
1896
1922
 
1897
 
CREATE temporary table t1 ( c1 integer ) ENGINE=MyISAM;
 
1923
CREATE table t1 ( c1 integer ) ENGINE=MyISAM;
1898
1924
INSERT INTO t1 VALUES ( 1 );
1899
1925
INSERT INTO t1 VALUES ( 2 );
1900
1926
INSERT INTO t1 VALUES ( 3 );
1901
1927
 
1902
 
CREATE TABLE t2 ( c2 integer );
 
1928
CREATE TABLE t2 ( c2 integer ) ENGINE=MyISAM;
1903
1929
INSERT INTO t2 VALUES ( 1 );
1904
1930
INSERT INTO t2 VALUES ( 4 );
1905
1931
INSERT INTO t2 VALUES ( 5 );
1911
1937
 
1912
1938
DROP TABLE t1,t2;
1913
1939
 
1914
 
--echo #
1915
 
--echo # Test for bug #9516: wrong evaluation of not_null_tables attribute in SQ 
1916
 
--echo #
1917
 
CREATE TEMPORARY TABLE t1 ( c1 integer ) ENGINE=MyISAM;
 
1940
#
 
1941
# Test for bug #9516: wrong evaluation of not_null_tables attribute in SQ 
 
1942
#
 
1943
CREATE TABLE t1 ( c1 integer ) ENGINE=MyISAM;
1918
1944
INSERT INTO t1 VALUES ( 1 );
1919
1945
INSERT INTO t1 VALUES ( 2 );
1920
1946
INSERT INTO t1 VALUES ( 3 );
1921
1947
INSERT INTO t1 VALUES ( 6 ); 
1922
1948
 
1923
 
CREATE TEMPORARY TABLE t2 ( c2 integer ) ENGINE=MyISAM;
 
1949
CREATE TABLE t2 ( c2 integer ) ENGINE=MyISAM;
1924
1950
INSERT INTO t2 VALUES ( 1 );
1925
1951
INSERT INTO t2 VALUES ( 4 );
1926
1952
INSERT INTO t2 VALUES ( 5 );
1927
1953
INSERT INTO t2 VALUES ( 6 );
1928
1954
 
1929
 
CREATE TEMPORARY TABLE t3 ( c3 integer ) ENGINE=MyISAM;
 
1955
CREATE TABLE t3 ( c3 integer ) ENGINE=MyISAM;
1930
1956
INSERT INTO t3 VALUES ( 7 );
1931
1957
INSERT INTO t3 VALUES ( 8 );
1932
1958
 
1935
1961
 
1936
1962
DROP TABLE t1,t2,t3;
1937
1963
 
1938
 
--echo #
1939
 
--echo # Correct building of equal fields list (do not include outer
1940
 
--echo # fields) (BUG#6384)
1941
 
--echo #
1942
 
CREATE TEMPORARY TABLE t1 (EMPNUM   CHAR(3)) ENGINE=MyISAM;
1943
 
CREATE TEMPORARY TABLE t2 (EMPNUM   CHAR(3) ) ENGINE=MyISAM;
 
1964
#
 
1965
# Correct building of equal fields list (do not include outer
 
1966
# fields) (BUG#6384)
 
1967
#
 
1968
CREATE TABLE t1 (EMPNUM   CHAR(3)) ENGINE=MyISAM;
 
1969
CREATE TABLE t2 (EMPNUM   CHAR(3) ) ENGINE=MyISAM;
1944
1970
INSERT INTO t1 VALUES ('E1'),('E2');
1945
1971
INSERT INTO t2 VALUES ('E1');
1946
1972
DELETE FROM t1
1951
1977
select * from t1;
1952
1978
DROP TABLE t1,t2;
1953
1979
 
1954
 
--echo #
1955
 
--echo # Test for bug #11487: range access in a subquery
1956
 
--echo #
 
1980
#
 
1981
# Test for bug #11487: range access in a subquery
 
1982
#
1957
1983
 
1958
 
CREATE TEMPORARY TABLE t1(select_id BIGINT, values_id BIGINT) ENGINE=MyISAM;
 
1984
CREATE TABLE t1(select_id BIGINT, values_id BIGINT) ENGINE=MyISAM;
1959
1985
INSERT INTO t1 VALUES (1, 1);
1960
 
CREATE TEMPORARY TABLE t2 (select_id BIGINT, values_id BIGINT, 
 
1986
CREATE TABLE t2 (select_id BIGINT, values_id BIGINT, 
1961
1987
                 PRIMARY KEY(select_id,values_id)) ENGINE=MyISAM;
1962
1988
INSERT INTO t2 VALUES (0, 1), (0, 2), (0, 3), (1, 5);
1963
1989
 
1973
1999
 
1974
2000
DROP TABLE t1, t2;
1975
2001
 
1976
 
--echo # BUG#11821 : Select from subselect using aggregate function on an enum
1977
 
--echo # segfaults:
1978
 
create temporary table t1 (fld enum('0','1')) ENGINE=MyISAM;
 
2002
# BUG#11821 : Select from subselect using aggregate function on an enum
 
2003
# segfaults:
 
2004
create table t1 (fld enum('0','1')) ENGINE=MyISAM;
1979
2005
insert into t1 values ('1');
1980
2006
select * from (select max(fld) from t1) as foo;
1981
2007
drop table t1;
1982
2008
 
1983
 
--echo #
1984
 
--echo # Test for bug #11762: subquery with an aggregate function in HAVING
1985
 
--echo #
 
2009
#
 
2010
# Test for bug #11762: subquery with an aggregate function in HAVING
 
2011
#
1986
2012
 
1987
 
CREATE TEMPORARY TABLE t1 (a int, b int) ENGINE=MyISAM;
1988
 
CREATE TEMPORARY TABLE t2 (c int, d int) ENGINE=MyISAM;
1989
 
CREATE TEMPORARY TABLE t3 (e int) ENGINE=MyISAM;
 
2013
CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
 
2014
CREATE TABLE t2 (c int, d int) ENGINE=MyISAM;
 
2015
CREATE TABLE t3 (e int) ENGINE=MyISAM;
1990
2016
 
1991
2017
INSERT INTO t1 VALUES 
1992
2018
  (1,10), (2,10), (1,20), (2,20), (3,20), (2,30), (4,40);
2064
2090
 
2065
2091
DROP TABLE t1,t2,t3;
2066
2092
 
2067
 
--echo #
2068
 
--echo # Test for bug #16603: GROUP BY in a row subquery with a quantifier 
2069
 
--echo #                      when an index is defined on the grouping field
 
2093
#
 
2094
# Test for bug #16603: GROUP BY in a row subquery with a quantifier 
 
2095
#                      when an index is defined on the grouping field
2070
2096
 
2071
 
CREATE TABLE t1 (a varchar(5), b varchar(10));
 
2097
CREATE TABLE t1 (a varchar(5), b varchar(10)) ENGINE=MyISAM;
2072
2098
INSERT INTO t1 VALUES
2073
2099
  ('AAA', 5), ('BBB', 4), ('BBB', 1), ('CCC', 2),
2074
2100
  ('CCC', 7), ('AAA', 2), ('AAA', 4), ('BBB', 3), ('AAA', 8);
2075
2101
 
2076
2102
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
2077
 
--replace_column 9 #
2078
2103
EXPLAIN
2079
2104
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
2080
2105
 
2081
2106
ALTER TABLE t1 ADD INDEX(a);
2082
2107
 
2083
2108
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
2084
 
--replace_column 9 #
2085
2109
EXPLAIN
2086
2110
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
2087
2111
 
2088
2112
DROP TABLE t1;
2089
2113
 
2090
 
--echo #
2091
 
--echo # Bug#17366: Unchecked Item_int results in server crash
2092
 
--echo #
2093
 
create table t1( f1 int,f2 int);
 
2114
#
 
2115
# Bug#17366: Unchecked Item_int results in server crash
 
2116
#
 
2117
create table t1( f1 int,f2 int) ENGINE=MyISAM;
2094
2118
insert into t1 values (1,1),(2,2);
2095
2119
select tt.t from (select 'crash1' as t, f2 from t1) as tt left join t1 on tt.t = 'crash2' and tt.f2 = t1.f2 where tt.t = 'crash1';
2096
2120
drop table t1;
2097
2121
 
2098
 
--echo #
2099
 
--echo # Bug #18306: server crash on delete using subquery.
2100
 
--echo #
 
2122
#
 
2123
# Bug #18306: server crash on delete using subquery.
 
2124
#
2101
2125
 
2102
 
create temporary table t1 (c int, key(c)) ENGINE=MyISAM;                              
 
2126
create table t1 (c int, key(c)) ENGINE=MyISAM;                              
2103
2127
insert into t1 values (1142477582), (1142455969);
2104
 
create temporary table t2 (a int, b int) ENGINE=MyISAM;
 
2128
create table t2 (a int, b int) ENGINE=MyISAM;
2105
2129
insert into t2 values (2, 1), (1, 0);
2106
2130
delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
2107
2131
drop table t1, t2;
2108
2132
 
2109
 
--echo #
2110
 
--echo # Bug#19077: A nested materialized derived table is used before being populated.
2111
 
--echo #
2112
 
create table t1 (i int, j bigint);
 
2133
#
 
2134
# Bug#19077: A nested materialized derived table is used before being populated.
 
2135
#
 
2136
create table t1 (i int, j bigint) ENGINE=MyISAM;
2113
2137
insert into t1 values (1, 2), (2, 2), (3, 2);
2114
2138
select * from (select min(i) from t1 where j=(select * from (select min(j) from t1) t2)) t3;
2115
2139
drop table t1;
2116
2140
 
2117
 
--echo # 
2118
 
--echo # Bug#19700: subselect returning BIGINT always returned it as SIGNED
2119
 
--echo #
2120
 
CREATE TEMPORARY TABLE t1 (i BIGINT) ENGINE=MyISAM;
 
2141
 
2142
# Bug#19700: subselect returning BIGINT always returned it as SIGNED
 
2143
#
 
2144
CREATE TABLE t1 (i BIGINT) ENGINE=MyISAM;
2121
2145
INSERT INTO t1 VALUES (10000000000000000); # > MAX SIGNED BIGINT 9323372036854775807
2122
2146
INSERT INTO t1 VALUES (1);
2123
2147
 
2124
 
CREATE TEMPORARY TABLE t2 (i BIGINT) ENGINE=MyISAM;
 
2148
CREATE TABLE t2 (i BIGINT) ENGINE=MyISAM;
2125
2149
INSERT INTO t2 VALUES (10000000000000000); # same as first table
2126
2150
INSERT INTO t2 VALUES (1);
2127
2151
 
2137
2161
DROP TABLE t1;
2138
2162
DROP TABLE t2;
2139
2163
 
2140
 
--echo # 
2141
 
--echo # Bug#20519: subselect with LIMIT M, N
2142
 
--echo #
 
2164
 
2165
# Bug#20519: subselect with LIMIT M, N
 
2166
#
2143
2167
 
2144
 
CREATE TEMPORARY TABLE t1 (
 
2168
CREATE TABLE t1 (
2145
2169
  id bigint NOT NULL auto_increment,
2146
2170
  name varchar(255) NOT NULL,
2147
2171
  PRIMARY KEY  (id))
2154
2178
  id bigint NOT NULL auto_increment,
2155
2179
  mid bigint NOT NULL,
2156
2180
  date date NOT NULL,
2157
 
  PRIMARY KEY  (id));
 
2181
  PRIMARY KEY  (id))
 
2182
  ENGINE=MyISAM;
2158
2183
 
2159
2184
INSERT INTO t2 VALUES 
2160
2185
  (1, 1, '2006-03-30'), (2, 2, '2006-04-06'), (3, 3, '2006-04-13'),
2178
2203
  FROM t1;
2179
2204
DROP TABLE t1,t2;
2180
2205
 
2181
 
--echo #
2182
 
--echo # Bug#20869: subselect with range access by DESC
2183
 
--echo #
 
2206
#
 
2207
# Bug#20869: subselect with range access by DESC
 
2208
#
2184
2209
 
2185
2210
CREATE TABLE t1 (
2186
2211
  i1 int NOT NULL default '0',
2187
2212
  i2 int NOT NULL default '0',
2188
2213
  t datetime,
2189
 
  PRIMARY KEY  (i1,i2,t));
 
2214
  PRIMARY KEY  (i1,i2,t))
 
2215
  ENGINE=MyISAM;
2190
2216
 
2191
2217
INSERT INTO t1 VALUES 
2192
2218
(24,1,'2005-03-03 16:31:31'),(24,1,'2005-05-27 12:40:07'),
2200
2226
  i1 int NOT NULL default '0',
2201
2227
  i2 int NOT NULL default '0',
2202
2228
  t datetime default NULL,
2203
 
  PRIMARY KEY  (i1));
 
2229
  PRIMARY KEY  (i1))
 
2230
  ENGINE=MyISAM;
2204
2231
 
2205
2232
INSERT INTO t2 VALUES (24,1,'2006-06-20 12:29:40');
2206
2233
 
2216
2243
 
2217
2244
DROP TABLE t1, t2;
2218
2245
 
2219
 
--echo #
2220
 
--echo # Bug#14654 : Cannot select from the same table twice within a UNION
2221
 
--echo # statement 
2222
 
--echo #
2223
 
CREATE TABLE t1 (i INT);
 
2246
#
 
2247
# Bug#14654 : Cannot select from the same table twice within a UNION
 
2248
# statement 
 
2249
#
 
2250
CREATE TABLE t1 (i INT) ENGINE=MyISAM;
2224
2251
 
2225
2252
(SELECT i FROM t1) UNION (SELECT i FROM t1);
2226
2253
SELECT * FROM t1 WHERE NOT EXISTS 
2229
2256
   (SELECT i FROM t1)
2230
2257
  );
2231
2258
 
2232
 
--echo #TODO:not supported
 
2259
#TODO:not supported
2233
2260
--error ER_PARSE_ERROR
2234
2261
SELECT * FROM t1 
2235
2262
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
2236
2263
 
2237
 
--echo #TODO:not supported
2238
 
--error ER_PARSE_ERROR
 
2264
#TODO:not supported
 
2265
--error 1064
2239
2266
explain select ((select t11.i from t1 t11) union (select t12.i from t1 t12))
2240
2267
  from t1;
2241
2268
 
2242
 
--replace_column 9 #
2243
2269
explain select * from t1 where not exists 
2244
2270
  ((select t11.i from t1 t11) union (select t12.i from t1 t12));
2245
2271
 
2246
2272
DROP TABLE t1;
2247
2273
 
2248
 
--echo #
2249
 
--echo # Bug #21540: Subqueries with no from and aggregate functions return 
2250
 
--echo #              wrong results
2251
 
CREATE TABLE t1 (a INT, b INT);
2252
 
CREATE TABLE t2 (a INT);
 
2274
#
 
2275
# Bug #21540: Subqueries with no from and aggregate functions return 
 
2276
#              wrong results
 
2277
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
 
2278
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
2253
2279
INSERT INTO t2 values (1);
2254
2280
INSERT INTO t1 VALUES (1,1),(1,2),(2,3),(3,4);
2255
2281
SELECT (SELECT COUNT(DISTINCT t1.b) from t2) FROM t1 GROUP BY t1.a;
2267
2293
GROUP BY t2.a;
2268
2294
DROP TABLE t1,t2;  
2269
2295
 
2270
 
--echo #
2271
 
--echo # Bug #21727: Correlated subquery that requires filesort:
2272
 
--echo #             slow with big sort_buffer_size 
2273
 
--echo #
 
2296
#
 
2297
# Bug #21727: Correlated subquery that requires filesort:
 
2298
#             slow with big sort_buffer_size 
 
2299
#
2274
2300
 
2275
 
CREATE TEMPORARY TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b)) ENGINE=MyISAM;
2276
 
CREATE TEMPORARY TABLE t2 (x int auto_increment, y int, z int,
 
2301
CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b)) ENGINE=MyISAM;
 
2302
CREATE TABLE t2 (x int auto_increment, y int, z int,
2277
2303
                 PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b)) ENGINE=MyISAM;
2278
2304
disable_query_log;
2279
2305
set autocommit=0;
2307
2333
 
2308
2334
DROP TABLE t2,t1;
2309
2335
 
2310
 
--echo #
2311
 
--echo # Bug #25219: EXIST subquery with UNION over a mix of
2312
 
--echo #             correlated and uncorrelated selects
2313
 
--echo #
 
2336
#
 
2337
# Bug #25219: EXIST subquery with UNION over a mix of
 
2338
#             correlated and uncorrelated selects
 
2339
#
2314
2340
 
2315
 
CREATE TABLE t1 (id char(4) PRIMARY KEY, c int);
2316
 
CREATE TABLE t2 (c int);
 
2341
CREATE TABLE t1 (id char(4) PRIMARY KEY, c int) ENGINE=MyISAM;
 
2342
CREATE TABLE t2 (c int) ENGINE=MyISAM;
2317
2343
 
2318
2344
INSERT INTO t1 VALUES ('aa', 1);
2319
2345
INSERT INTO t2 VALUES (1);
2331
2357
                SELECT c from t2 WHERE c=t1.c);
2332
2358
 
2333
2359
INSERT INTO t2 VALUES (2);
2334
 
CREATE TEMPORARY TABLE t3 (c int) ENGINE=MyISAM;
 
2360
CREATE TABLE t3 (c int) ENGINE=MyISAM;
2335
2361
INSERT INTO t3 VALUES (1);
2336
2362
 
2337
2363
SELECT * FROM t1
2341
2367
 
2342
2368
DROP TABLE t1,t2,t3;
2343
2369
 
2344
 
--echo #
2345
 
--echo # Bug#21904 (parser problem when using IN with a double "(())")
2346
 
--echo #
 
2370
#
 
2371
# Bug#21904 (parser problem when using IN with a double "(())")
 
2372
#
2347
2373
 
2348
2374
--disable_warnings
2349
2375
DROP TABLE IF EXISTS t1;
2351
2377
DROP TABLE IF EXISTS t1xt2;
2352
2378
--enable_warnings
2353
2379
 
2354
 
CREATE TEMPORARY TABLE t1 (
 
2380
CREATE TABLE t1 (
2355
2381
  id_1 int NOT NULL,
2356
2382
  t varchar(4) DEFAULT NULL)
2357
2383
  ENGINE=MyISAM;
2358
2384
 
2359
 
CREATE TEMPORARY TABLE t2 (
 
2385
CREATE TABLE t2 (
2360
2386
  id_2 int NOT NULL,
2361
2387
  t varchar(4) DEFAULT NULL)
2362
2388
  ENGINE=MyISAM;
2363
2389
 
2364
 
CREATE TEMPORARY TABLE t1xt2 (
 
2390
CREATE TABLE t1xt2 (
2365
2391
  id_1 int NOT NULL,
2366
2392
  id_2 int NOT NULL)
2367
2393
  ENGINE=MyISAM;
2372
2398
 
2373
2399
INSERT INTO t1xt2 VALUES (2, 2), (3, 3), (4, 4);
2374
2400
 
2375
 
--echo # subselect returns 0 rows
 
2401
# subselect returns 0 rows
2376
2402
 
2377
2403
SELECT DISTINCT t1.id_1 FROM t1 WHERE
2378
2404
(12 IN (SELECT t1xt2.id_2 FROM t1xt2 WHERE t1.id_1 = t1xt2.id_1));
2394
2420
 
2395
2421
insert INTO t1xt2 VALUES (1, 12);
2396
2422
 
2397
 
--echo # subselect returns 1 row
 
2423
# subselect returns 1 row
2398
2424
 
2399
2425
SELECT DISTINCT t1.id_1 FROM t1 WHERE
2400
2426
(12 IN (SELECT t1xt2.id_2 FROM t1xt2 WHERE t1.id_1 = t1xt2.id_1));
2416
2442
 
2417
2443
insert INTO t1xt2 VALUES (2, 12);
2418
2444
 
2419
 
--echo # subselect returns more than 1 row
 
2445
# subselect returns more than 1 row
2420
2446
 
2421
2447
SELECT DISTINCT t1.id_1 FROM t1 WHERE
2422
2448
(12 IN (SELECT t1xt2.id_2 FROM t1xt2 WHERE t1.id_1 = t1xt2.id_1));
2440
2466
DROP TABLE t2;
2441
2467
DROP TABLE t1xt2;
2442
2468
 
2443
 
--echo #
2444
 
--echo # Bug #26728: derived table with concatanation of literals in select list
2445
 
--echo #  
 
2469
#
 
2470
# Bug #26728: derived table with concatanation of literals in select list
 
2471
#  
2446
2472
 
2447
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
 
2473
CREATE TABLE t1 (a int) ENGINE=MyISAM;
2448
2474
INSERT INTO t1 VALUES (3), (1), (2);           
2449
2475
 
2450
2476
SELECT 'this is ' 'a test.' AS col1, a AS col2 FROM t1;
2452
2478
 
2453
2479
DROP table t1;
2454
2480
 
2455
 
--echo #
2456
 
--echo # Bug #27257: COUNT(*) aggregated in outer query
2457
 
--echo #  
 
2481
#
 
2482
# Bug #27257: COUNT(*) aggregated in outer query
 
2483
#  
2458
2484
 
2459
 
CREATE TEMPORARY TABLE t1 (a int, b int) ENGINE=MyISAM;
2460
 
CREATE TEMPORARY TABLE t2 (m int, n int) ENGINE=MyISAM;
 
2485
CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
 
2486
CREATE TABLE t2 (m int, n int) ENGINE=MyISAM;
2461
2487
INSERT INTO t1 VALUES (2,2), (2,2), (3,3), (3,3), (3,3), (4,4);
2462
2488
INSERT INTO t2 VALUES (1,11), (2,22), (3,32), (4,44), (4,44);
2463
2489
 
2475
2501
 
2476
2502
DROP TABLE t1,t2;
2477
2503
 
2478
 
--echo #
2479
 
--echo # Bug #27229: GROUP_CONCAT in subselect with COUNT() as an argument 
2480
 
--echo #  
 
2504
#
 
2505
# Bug #27229: GROUP_CONCAT in subselect with COUNT() as an argument 
 
2506
#  
2481
2507
 
2482
 
CREATE TEMPORARY TABLE t1 (a int, b int) ENGINE=MyISAM;
2483
 
CREATE TEMPORARY TABLE t2 (m int, n int) ENGINE=MyISAM;
 
2508
CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
 
2509
CREATE TABLE t2 (m int, n int) ENGINE=MyISAM;
2484
2510
INSERT INTO t1 VALUES (2,2), (2,2), (3,3), (3,3), (3,3), (4,4);
2485
2511
INSERT INTO t2 VALUES (1,11), (2,22), (3,32), (4,44), (4,44);
2486
2512
 
2494
2520
 
2495
2521
DROP table t1,t2;
2496
2522
 
2497
 
--echo #
2498
 
--echo # Bug#27321: Wrong subquery result in a grouping select
2499
 
--echo #
2500
 
CREATE TABLE t1 (a int, b INT, d INT, c CHAR(10) NOT NULL, PRIMARY KEY (a, b));
 
2523
#
 
2524
# Bug#27321: Wrong subquery result in a grouping select
 
2525
#
 
2526
CREATE TABLE t1 (a int, b INT, d INT, c CHAR(10) NOT NULL, PRIMARY KEY (a, b)) ENGINE=MyISAM;
2501
2527
INSERT INTO t1 VALUES (1,1,0,'a'), (1,2,0,'b'), (1,3,0,'c'), (1,4,0,'d'),
2502
2528
(1,5,0,'e'), (2,1,0,'f'), (2,2,0,'g'), (2,3,0,'h'), (3,4,0,'i'), (3,3,0,'j'),
2503
2529
(3,2,0,'k'), (3,1,0,'l'), (1,9,0,'m'), (1,0,10,'n'), (2,0,5,'o'), (3,0,7,'p');
2531
2557
 
2532
2558
DROP TABLE t1;
2533
2559
 
2534
 
--echo #
2535
 
--echo # Bug #27363: nested aggregates in outer, subquery / sum(select
2536
 
--echo # count(outer))
2537
 
--echo #
2538
 
CREATE TABLE t1 (a INT); INSERT INTO t1 values (1),(1),(1),(1);
2539
 
CREATE TEMPORARY TABLE t2 (x INT) ENGINE=MyISAM; INSERT INTO t1 values (1000),(1001),(1002);
 
2560
#
 
2561
# Bug #27363: nested aggregates in outer, subquery / sum(select
 
2562
# count(outer))
 
2563
#
 
2564
CREATE TABLE t1 (a INT) ENGINE=MyISAM; INSERT INTO t1 values (1),(1),(1),(1);
 
2565
CREATE TABLE t2 (x INT) ENGINE=MyISAM; INSERT INTO t1 values (1000),(1001),(1002);
2540
2566
 
2541
2567
--error ER_INVALID_GROUP_FUNC_USE
2542
2568
SELECT SUM( (SELECT COUNT(a) FROM t2) ) FROM t1;
2555
2581
 
2556
2582
DROP TABLE t1,t2;
2557
2583
 
2558
 
--echo #
2559
 
--echo # Bug #27807: Server crash when executing subquery with EXPLAIN
2560
 
--echo #  
2561
 
CREATE TABLE t1 (a int, b int, KEY (a)); 
 
2584
#
 
2585
# Bug #27807: Server crash when executing subquery with EXPLAIN
 
2586
#  
 
2587
CREATE TABLE t1 (a int, b int, KEY (a)) ENGINE=MyISAM; 
2562
2588
INSERT INTO t1 VALUES (1,1),(2,1);
2563
2589
EXPLAIN SELECT 1 FROM t1 WHERE a = (SELECT COUNT(*) FROM t1 GROUP BY b);
2564
2590
DROP TABLE t1;
2565
2591
 
2566
 
--echo #
2567
 
--echo # Bug #28377: grouping query with a correlated subquery in WHERE condition
2568
 
--echo #  
 
2592
#
 
2593
# Bug #28377: grouping query with a correlated subquery in WHERE condition
 
2594
#  
2569
2595
 
2570
 
CREATE TABLE t1 (id int NOT NULL, st CHAR(2), INDEX idx(id));
 
2596
CREATE TABLE t1 (id int NOT NULL, st CHAR(2), INDEX idx(id)) ENGINE=MyISAM;
2571
2597
INSERT INTO t1 VALUES
2572
2598
  (3,'FL'), (2,'GA'), (4,'FL'), (1,'GA'), (5,'NY'), (7,'FL'), (6,'NY');
2573
 
CREATE TEMPORARY TABLE t2 (id int NOT NULL, INDEX idx(id)) ENGINE=MyISAM;
 
2599
CREATE TABLE t2 (id int NOT NULL, INDEX idx(id)) ENGINE=MyISAM;
2574
2600
INSERT INTO t2 VALUES (7), (5), (1), (3);
2575
2601
 
2576
2602
SELECT id, st FROM t1 
2587
2613
 
2588
2614
DROP TABLE t1,t2;
2589
2615
 
2590
 
--echo #
2591
 
--echo # Bug #28728: crash with EXPLAIN EXTENDED for a query with a derived table
2592
 
--echo #             over a grouping subselect
2593
 
--echo # 
 
2616
#
 
2617
# Bug #28728: crash with EXPLAIN EXTENDED for a query with a derived table
 
2618
#             over a grouping subselect
 
2619
2594
2620
 
2595
 
CREATE TEMPORARY TABLE t1 (a int) ENGINE=MyISAM;
 
2621
CREATE TABLE t1 (a int) ENGINE=MyISAM;
2596
2622
 
2597
2623
INSERT INTO t1 VALUES (1), (2);
2598
2624
 
2601
2627
 
2602
2628
DROP TABLE t1;
2603
2629
 
2604
 
--echo #
2605
 
--echo # Bug #28811: crash for query containing subquery with ORDER BY and LIMIT 1 
2606
 
--echo #
 
2630
#
 
2631
# Bug #28811: crash for query containing subquery with ORDER BY and LIMIT 1 
 
2632
#
2607
2633
 
2608
2634
CREATE TABLE t1 (
2609
2635
  a varchar(255) default NULL,
2610
2636
  b timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2611
 
  INDEX idx(a,b));
 
2637
  INDEX idx(a,b))
 
2638
  ENGINE=MyISAM;
2612
2639
 
2613
2640
CREATE TABLE t2 (
2614
 
  a varchar(255) default NULL);
 
2641
  a varchar(255) default NULL)
 
2642
  ENGINE=MyISAM;
2615
2643
 
2616
2644
INSERT INTO t1 VALUES ('abcdefghijk','2007-05-07 06:00:24');
2617
2645
INSERT INTO t1 SELECT * FROM t1;
2633
2661
DROP TABLE t1,t2;
2634
2662
 
2635
2663
 
2636
 
--echo #
2637
 
--echo # Bug #27333: subquery grouped for aggregate of outer query / no aggregate
2638
 
--echo # of subquery
2639
 
--echo #
2640
 
CREATE TEMPORARY TABLE t1 (a INTEGER, b INTEGER) ENGINE=MyISAM;
2641
 
CREATE TEMPORARY TABLE t2 (x INTEGER) ENGINE=MyISAM;
 
2664
#
 
2665
# Bug #27333: subquery grouped for aggregate of outer query / no aggregate
 
2666
# of subquery
 
2667
#
 
2668
CREATE TABLE t1 (a INTEGER, b INTEGER) ENGINE=MyISAM;
 
2669
CREATE TABLE t2 (x INTEGER) ENGINE=MyISAM;
2642
2670
INSERT INTO t1 VALUES (1,11), (2,22), (2,22);
2643
2671
INSERT INTO t2 VALUES (1), (2);
2644
2672
 
2645
 
--echo # wasn't failing, but should
 
2673
# wasn't failing, but should
2646
2674
--error ER_SUBQUERY_NO_1_ROW
2647
2675
SELECT a, COUNT(b), (SELECT COUNT(b) FROM t2) FROM t1 GROUP BY a;
2648
2676
 
2649
 
--echo # fails as it should
 
2677
# fails as it should
2650
2678
--error ER_SUBQUERY_NO_1_ROW
2651
2679
SELECT a, COUNT(b), (SELECT COUNT(b)+0 FROM t2) FROM t1 GROUP BY a;
2652
2680
 
2653
2681
SELECT (SELECT SUM(t1.a)/AVG(t2.x) FROM t2) FROM t1;
2654
2682
DROP TABLE t1,t2;
2655
2683
 
2656
 
--echo # second test case from 27333
2657
 
CREATE TABLE t1 (a INT, b INT);
 
2684
# second test case from 27333
 
2685
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
2658
2686
INSERT INTO t1 VALUES (1, 2), (1,3), (1,4), (2,1), (2,2);
2659
2687
 
2660
 
--echo # returns no rows, when it should
 
2688
# returns no rows, when it should
2661
2689
SELECT a1.a, COUNT(*) FROM t1 a1 WHERE a1.a = 1
2662
2690
AND EXISTS( SELECT a2.a FROM t1 a2 WHERE a2.a = a1.a)
2663
2691
GROUP BY a1.a;
2664
2692
DROP TABLE t1;
2665
2693
 
2666
 
--echo #test cases from 29297
2667
 
CREATE TEMPORARY TABLE t1 (a INT) ENGINE=MyISAM;
2668
 
CREATE TEMPORARY TABLE t2 (a INT) ENGINE=MyISAM;
 
2694
#test cases from 29297
 
2695
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 
2696
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
2669
2697
INSERT INTO t1 VALUES (1),(2);
2670
2698
INSERT INTO t2 VALUES (1),(2);
2671
2699
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=0) FROM t1;
2674
2702
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=1) FROM t1;
2675
2703
DROP TABLE t1,t2;
2676
2704
 
2677
 
--echo #
2678
 
--echo # Bug #31884: Assertion + crash in subquery in the SELECT clause.
2679
 
--echo #
 
2705
#
 
2706
# Bug #31884: Assertion + crash in subquery in the SELECT clause.
 
2707
#
2680
2708
 
2681
 
CREATE TEMPORARY TABLE t1 (a1 INT, a2 INT) ENGINE=MyISAM;
2682
 
CREATE TEMPORARY TABLE t2 (b1 INT, b2 INT) ENGINE=MyISAM;
 
2709
CREATE TABLE t1 (a1 INT, a2 INT) ENGINE=MyISAM;
 
2710
CREATE TABLE t2 (b1 INT, b2 INT) ENGINE=MyISAM;
2683
2711
 
2684
2712
INSERT INTO t1 VALUES (100, 200);
2685
2713
INSERT INTO t1 VALUES (101, 201);
2689
2717
SELECT ((a1,a2) IN (SELECT * FROM t2 WHERE b2 > 0)) IS NULL FROM t1;
2690
2718
DROP TABLE t1, t2;
2691
2719
 
2692
 
--echo #
2693
 
--echo # Bug #30788: Inconsistent retrieval of char/varchar
2694
 
--echo #
 
2720
#
 
2721
# Bug #30788: Inconsistent retrieval of char/varchar
 
2722
#
2695
2723
 
2696
 
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
 
2724
CREATE TABLE t1 (a CHAR(1), b VARCHAR(10)) ENGINE=MyISAM;
2697
2725
INSERT INTO t1 VALUES ('a', 'aa');
2698
2726
INSERT INTO t1 VALUES ('a', 'aaa');
2699
2727
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
2700
2728
CREATE INDEX I1 ON t1 (a);
2701
2729
CREATE INDEX I2 ON t1 (b);
2702
 
--replace_column 9 #
2703
2730
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
2704
2731
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
2705
2732
 
2706
 
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
 
2733
CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10)) ENGINE=MyISAM;
2707
2734
INSERT INTO t2 SELECT * FROM t1;
2708
2735
CREATE INDEX I1 ON t2 (a);
2709
2736
CREATE INDEX I2 ON t2 (b);
2710
 
--replace_column 9 #
2711
2737
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
2712
2738
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
2713
 
--replace_column 9 #
2714
2739
EXPLAIN
2715
2740
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
2716
2741
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
2717
2742
 
2718
2743
DROP TABLE t1,t2;
2719
2744
 
2720
 
--echo #
2721
 
--echo # Bug #32400: Complex SELECT query returns correct result only on some
2722
 
--echo # occasions
2723
 
--echo #
 
2745
#
 
2746
# Bug #32400: Complex SELECT query returns correct result only on some
 
2747
# occasions
 
2748
#
2724
2749
 
2725
 
CREATE TABLE t1(a INT, b INT);
 
2750
CREATE TABLE t1(a INT, b INT) ENGINE=MyISAM;
2726
2751
INSERT INTO t1 VALUES (1,1), (1,2), (2,3), (2,4);
2727
2752
 
2728
2753
--error ER_BAD_FIELD_ERROR
2736
2761
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
2737
2762
GROUP BY a;
2738
2763
 
2739
 
--replace_column 9 #
2740
2764
EXPLAIN 
2741
2765
SELECT a AS out_a, MIN(b) FROM t1 t1_outer
2742
2766
WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
2749
2773
DROP TABLE t1;
2750
2774
 
2751
2775
 
2752
 
--echo #
2753
 
--echo # Bug #32036: EXISTS within a WHERE clause with a UNION crashes MySQL 5.122
2754
 
--echo #
 
2776
#
 
2777
# Bug #32036: EXISTS within a WHERE clause with a UNION crashes MySQL 5.122
 
2778
#
2755
2779
 
2756
 
CREATE TEMPORARY TABLE t1 (a INT) ENGINE=MyISAM;
2757
 
CREATE TABLE t2 (a INT);
 
2780
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 
2781
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
2758
2782
 
2759
2783
INSERT INTO t1 VALUES (1),(2);
2760
2784
INSERT INTO t2 VALUES (1),(2);
2764
2788
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
2765
2789
 
2766
2790
 
2767
 
--replace_column 9 #
2768
2791
EXPLAIN EXTENDED
2769
2792
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION 
2770
2793
                               (SELECT 1 FROM t2 WHERE t1.a = t2.a));
2771
2794
 
2772
2795
DROP TABLE t1,t2;
2773
2796
 
2774
 
--echo #
2775
 
--echo # BUG#33794 "MySQL crashes executing specific query on specific dump"
2776
 
--echo #
2777
 
CREATE TEMPORARY TABLE t4 (
 
2797
#
 
2798
# BUG#33794 "MySQL crashes executing specific query on specific dump"
 
2799
#
 
2800
CREATE TABLE t4 (
2778
2801
  f7 varchar(32) collate utf8_bin NOT NULL default '',
2779
2802
  f10 varchar(32) collate utf8_bin default NULL,
2780
2803
  PRIMARY KEY  (f7))
2787
2810
  f2 varchar(50) collate utf8_bin default NULL,
2788
2811
  f3 varchar(10) collate utf8_bin default NULL,
2789
2812
  PRIMARY KEY  (f4),
2790
 
  UNIQUE KEY uk1 (f2));
 
2813
  UNIQUE KEY uk1 (f2))
 
2814
  ENGINE=MyISAM;
2791
2815
 
2792
2816
INSERT INTO t2 VALUES(1,1,null), (2,2,null);
2793
2817
 
2794
 
CREATE TEMPORARY TABLE t1  (
 
2818
CREATE TABLE t1  (
2795
2819
  f8 varchar(32) collate utf8_bin NOT NULL default '',
2796
2820
  f1 varchar(10) collate utf8_bin default NULL,
2797
2821
  f9 varchar(32) collate utf8_bin default NULL,
2800
2824
 
2801
2825
INSERT INTO t1 VALUES (1,'P',1), (2,'P',1), (3,'R',2);
2802
2826
 
2803
 
CREATE TEMPORARY TABLE t3 (
 
2827
CREATE TABLE t3 (
2804
2828
  f6 varchar(32) collate utf8_bin NOT NULL default '',
2805
2829
  f5 varchar(50) collate utf8_bin default NULL,
2806
2830
  PRIMARY KEY (f6))
2830
2854
 
2831
2855
--echo End of 5.0 tests.
2832
2856
 
2833
 
--echo #
2834
 
--echo #  Test [NOT] IN truth table (both as top-level and general predicate).
2835
 
--echo #
 
2857
#
 
2858
#  Test [NOT] IN truth table (both as top-level and general predicate).
 
2859
#
2836
2860
 
2837
 
create temporary table t_out (subcase char(3),
 
2861
create table t_out (subcase char(3),
2838
2862
                    a1 char(2), b1 char(2), c1 char(2)) ENGINE=MyISAM;
2839
 
create table t_in  (a2 char(2), b2 char(2), c2 char(2));
 
2863
create table t_in  (a2 char(2), b2 char(2), c2 char(2)) ENGINE=MyISAM;
2840
2864
 
2841
2865
insert into t_out values ('A.1','2a', NULL, '2a');
2842
 
--echo #------------------------- A.2 - impossible
 
2866
#------------------------- A.2 - impossible
2843
2867
insert into t_out values ('A.3', '2a', NULL, '2a');
2844
2868
insert into t_out values ('A.4', '2a', NULL, 'xx');
2845
2869
insert into t_out values ('B.1', '2a', '2a', '2a');
2927
2951
select case when count(*) > 0 then 'T' else 'F' end as not_pred_in from t_out
2928
2952
where subcase = 'A.3' and
2929
2953
      NOT((a1, b1, c1) IN (select * from t_in));
2930
 
--echo # test non-top level result indirectly
 
2954
# test non-top level result indirectly
2931
2955
select case when count(*) > 0 then 'N' else 'wrong result' end as pred_in from t_out
2932
2956
where subcase = 'A.3' and
2933
2957
      ((a1, b1, c1) IN (select * from t_in)) is NULL and
2984
3008
select case when count(*) > 0 then 'T' else 'F' end as not_pred_in from t_out
2985
3009
where subcase = 'B.3' and
2986
3010
      NOT((a1, b1, c1) IN (select * from t_in));
2987
 
--echo # test non-top level result indirectly
 
3011
# test non-top level result indirectly
2988
3012
select case when count(*) > 0 then 'N' else 'wrong result' end as pred_in from t_out
2989
3013
where subcase = 'B.3' and
2990
3014
      ((a1, b1, c1) IN (select * from t_in)) is NULL and
3007
3031
drop table t_in;
3008
3032
 
3009
3033
 
3010
 
--echo #
3011
 
--echo # Bug#20835 (literal string with =any values)
3012
 
--echo #
3013
 
CREATE TABLE t1 (s1 char(1));
 
3034
#
 
3035
# Bug#20835 (literal string with =any values)
 
3036
#
 
3037
CREATE TABLE t1 (s1 char(1)) ENGINE=MyISAM;
3014
3038
INSERT INTO t1 VALUES ('a');
3015
3039
SELECT * FROM t1 WHERE 'a' = ANY (SELECT s1 FROM t1);
3016
3040
DROP TABLE t1;
3017
3041
 
3018
 
--echo #
3019
 
--echo # Bug#33204: INTO is allowed in subselect, causing inconsistent results
3020
 
--echo #
3021
 
CREATE TABLE t1( a INT );
 
3042
#
 
3043
# Bug#33204: INTO is allowed in subselect, causing inconsistent results
 
3044
#
 
3045
CREATE TABLE t1( a INT ) ENGINE=MyISAM;
3022
3046
INSERT INTO t1 VALUES (1),(2);
3023
3047
 
3024
 
CREATE TABLE t2( a INT, b INT );
 
3048
CREATE TABLE t2( a INT, b INT ) ENGINE=MyISAM;
3025
3049
 
3026
3050
--error ER_PARSE_ERROR
3027
3051
SELECT * 
3070
3094
  SELECT a FROM t1 WHERE a = 2 
3071
3095
) t1a;
3072
3096
 
3073
 
--echo # This was not allowed previously. Possibly, it should be allowed on the future.
3074
 
--echo # For now, the intent is to keep the fix as non-intrusive as possible.
 
3097
# This was not allowed previously. Possibly, it should be allowed on the future.
 
3098
# For now, the intent is to keep the fix as non-intrusive as possible.
3075
3099
--error ER_PARSE_ERROR
3076
3100
SELECT * FROM ((SELECT 1 a) UNION SELECT 1 a);
3077
3101
SELECT * FROM (SELECT 1 a UNION (SELECT 1 a)) alias;
3102
3126
SELECT * FROM (SELECT 1 a UNION SELECT 1 a LIMIT 1) t1a;
3103
3127
SELECT * FROM (SELECT 1 a UNION SELECT 1 a ORDER BY a LIMIT 1) t1a;
3104
3128
 
3105
 
--echo # Test of rule
3106
 
--echo # table_factor:  '(' get_select_lex query_expression_body ')' opt_table_alias
3107
 
--echo # UNION should not be allowed inside the parentheses, nor should
3108
 
--echo # aliases after.
3109
 
--echo # 
 
3129
# Test of rule
 
3130
# table_factor:  '(' get_select_lex query_expression_body ')' opt_table_alias
 
3131
# UNION should not be allowed inside the parentheses, nor should
 
3132
# aliases after.
 
3133
3110
3134
SELECT * FROM t1 JOIN  (SELECT 1 UNION SELECT 1) alias ON 1;
3111
3135
--error ER_PARSE_ERROR
3112
3136
SELECT * FROM t1 JOIN ((SELECT 1 UNION SELECT 1)) ON 1;
3119
3143
--error ER_PARSE_ERROR
3120
3144
SELECT * FROM t1 JOIN ((t1 t1a)) t1a ON 1;
3121
3145
 
3122
 
--sorted_result
3123
3146
SELECT * FROM t1 JOIN  (t1 t1a)  ON 1;
3124
3147
SELECT * FROM t1 JOIN ((t1 t1a)) ON 1;
3125
3148
 
3132
3155
SELECT * FROM t1 JOIN  (SELECT 1 a)  a ON 1;
3133
3156
SELECT * FROM t1 JOIN ((SELECT 1 a)) a ON 1;
3134
3157
 
3135
 
--echo # For the join, TABLE_LIST::select_lex == NULL
3136
 
--echo # Check that we handle this.
 
3158
# For the join, TABLE_LIST::select_lex == NULL
 
3159
# Check that we handle this.
3137
3160
--error ER_PARSE_ERROR
3138
3161
SELECT * FROM (t1 JOIN (SELECT 1) t1a1 ON 1) t1a2;
3139
3162
 
3178
3201
--error ER_PARSE_ERROR
3179
3202
SELECT ( SELECT 1 UNION SELECT 1 INTO DUMPFILE 'file' );
3180
3203
 
3181
 
--echo # Make sure context is popped when we leave the nested select
 
3204
# Make sure context is popped when we leave the nested select
3182
3205
SELECT ( SELECT a FROM t1 WHERE a = 1 ), a FROM t1;
3183
3206
SELECT ( SELECT a FROM t1 WHERE a = 1 UNION SELECT 1 ), a FROM t1;
3184
3207
 
3185
 
--echo # Make sure we have feature F561 (see .yy file)
 
3208
# Make sure we have feature F561 (see .yy file)
3186
3209
SELECT * FROM t2 WHERE (a, b) IN (SELECT a, b FROM t2);
3187
3210
 
3188
 
--echo # Make sure the parser does not allow nested UNIONs anywhere
 
3211
# Make sure the parser does not allow nested UNIONs anywhere
3189
3212
 
3190
3213
--error ER_PARSE_ERROR
3191
3214
SELECT 1 UNION ( SELECT 1 UNION SELECT 1 );