~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
# Initialise
2
--disable_warnings
3
drop table if exists t1,t2,t3;
4
--enable_warnings
5
6
#
7
# Simple test without tables
8
9
-- error 1111
10
SELECT 1 FROM (SELECT 1) as a  GROUP BY SUM(1);
11
12
#
13
# Test of group (Failed for Lars Hoss <lh@pbm.de>)
14
#
15
16
CREATE TABLE t1 (
17
  spID int,
520.1.18 by Brian Aker
A bunch more test fixes.
18
  userID int,
19
  score int,
20
  lsg char(40),
1 by brian
clean slate
21
  date date
22
);
23
24
INSERT INTO t1 VALUES (1,1,1,'','0000-00-00');
25
INSERT INTO t1 VALUES (2,2,2,'','0000-00-00');
26
INSERT INTO t1 VALUES (2,1,1,'','0000-00-00');
27
INSERT INTO t1 VALUES (3,3,3,'','0000-00-00');
28
29
CREATE TABLE t2 (
30
  userID int NOT NULL auto_increment,
520.1.18 by Brian Aker
A bunch more test fixes.
31
  niName char(15),
1 by brian
clean slate
32
  passwd char(8),
33
  mail char(50),
34
  isAukt enum('N','Y') DEFAULT 'N',
35
  vName char(30),
36
  nName char(40),
37
  adr char(60),
38
  plz char(5),
39
  ort char(35),
40
  land char(20),
41
  PRIMARY KEY (userID)
42
);
43
44
INSERT INTO t2 VALUES (1,'name','pass','mail','Y','v','n','adr','1','1','1');
45
INSERT INTO t2 VALUES (2,'name','pass','mail','Y','v','n','adr','1','1','1');
46
INSERT INTO t2 VALUES (3,'name','pass','mail','Y','v','n','adr','1','1','1');
47
INSERT INTO t2 VALUES (4,'name','pass','mail','Y','v','n','adr','1','1','1');
48
INSERT INTO t2 VALUES (5,'name','pass','mail','Y','v','n','adr','1','1','1');
49
50
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID GROUP BY t2.userid;
51
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID GROUP BY t2.userid ORDER BY NULL;
52
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid;
53
SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid;
54
SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid ORDER BY NULL;
55
EXPLAIN SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid ORDER BY NULL;
56
drop table t1,t2;
57
58
#
59
# Bug in GROUP BY, by Nikki Chumakov <nikki@saddam.cityline.ru>
60
#
61
62
CREATE TABLE t1 (
63
  PID int NOT NULL auto_increment,
520.1.18 by Brian Aker
A bunch more test fixes.
64
  payDate date DEFAULT '0000-00-00' NOT NULL,
1 by brian
clean slate
65
  recDate datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
66
  URID int DEFAULT '0' NOT NULL,
520.1.18 by Brian Aker
A bunch more test fixes.
67
  CRID int DEFAULT '0' NOT NULL,
68
  amount int DEFAULT '0' NOT NULL,
69
  operator int,
70
  method enum('unknown','cash','dealer','check','card','lazy','delayed','test') DEFAULT 'unknown' NOT NULL,
1 by brian
clean slate
71
  DIID int,
520.1.18 by Brian Aker
A bunch more test fixes.
72
  reason char(1) binary DEFAULT '' NOT NULL,
1 by brian
clean slate
73
  code_id int,
520.1.18 by Brian Aker
A bunch more test fixes.
74
  qty int DEFAULT '0' NOT NULL,
75
  PRIMARY KEY (PID),
1 by brian
clean slate
76
  KEY URID (URID),
77
  KEY reason (reason),
78
  KEY method (method),
79
  KEY payDate (payDate)
80
);
81
82
INSERT INTO t1 VALUES (1,'1970-01-01','1997-10-17 00:00:00',2529,1,21000,11886,'check',0,'F',16200,6);
83
84
--error 1056
85
SELECT COUNT(P.URID),SUM(P.amount),P.method, MIN(PP.recdate+0) > 19980501000000   AS IsNew FROM t1 AS P JOIN t1 as PP WHERE P.URID = PP.URID GROUP BY method,IsNew;
86
87
drop table t1;
88
89
#
90
# Problem with GROUP BY + ORDER BY when no match
91
# Tested with locking
92
#
93
94
CREATE TABLE t1 (
95
  cid int NOT NULL auto_increment,
520.1.18 by Brian Aker
A bunch more test fixes.
96
  firstname varchar(32) DEFAULT '' NOT NULL,
1 by brian
clean slate
97
  surname varchar(32) DEFAULT '' NOT NULL,
98
  PRIMARY KEY (cid)
99
);
100
INSERT INTO t1 VALUES (1,'That','Guy');
101
INSERT INTO t1 VALUES (2,'Another','Gent');
102
103
CREATE TABLE t2 (
104
  call_id int NOT NULL auto_increment,
520.1.18 by Brian Aker
A bunch more test fixes.
105
  contact_id int DEFAULT '0' NOT NULL,
106
  PRIMARY KEY (call_id),
1 by brian
clean slate
107
  KEY contact_id (contact_id)
108
);
109
110
lock tables t1 read,t2 write;
111
112
INSERT INTO t2 VALUES (10,2);
113
INSERT INTO t2 VALUES (18,2);
114
INSERT INTO t2 VALUES (62,2);
115
INSERT INTO t2 VALUES (91,2);
116
INSERT INTO t2 VALUES (92,2);
117
118
SELECT cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid;
119
SELECT cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid ORDER BY NULL;
120
SELECT HIGH_PRIORITY cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid ORDER BY surname, firstname;
121
122
drop table t2;
123
unlock tables;
124
drop table t1;
125
126
# Test needs to be rewritten
520.1.18 by Brian Aker
A bunch more test fixes.
127
##
128
## Test of group by bug in bugzilla
129
##
130
#
131
#CREATE TABLE t1 (
132
#  bug_id int NOT NULL auto_increment,
133
#  groupset bigint DEFAULT '0' NOT NULL,
134
#  assigned_to int DEFAULT '0' NOT NULL,
135
#  bug_file_loc text,
136
#  bug_severity enum('blocker','critical','major','normal','minor','trivial','enhancement') DEFAULT 'blocker' NOT NULL,
137
#  bug_status enum('','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED') DEFAULT 'NEW' NOT NULL,
138
#  creation_ts datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
139
#  delta_ts timestamp,
140
#  short_desc mediumtext,
141
#  long_desc mediumtext,
142
#  op_sys enum('All','Windows 3.1','Windows 95','Windows 98','Windows NT','Windows 2000','Linux','other') DEFAULT 'All' NOT NULL,
143
#  priority enum('P1','P2','P3','P4','P5') DEFAULT 'P1' NOT NULL,
144
#  product varchar(64) DEFAULT '' NOT NULL,
145
#  rep_platform enum('All','PC','VTD-8','Other'),
146
#  reporter int DEFAULT '0' NOT NULL,
147
#  version varchar(16) DEFAULT '' NOT NULL,
148
#  component varchar(50) DEFAULT '' NOT NULL,
149
#  resolution enum('','FIXED','INVALID','WONTFIX','LATER','REMIND','DUPLICATE','WORKSFORME') DEFAULT '' NOT NULL,
150
#  target_milestone varchar(20) DEFAULT '' NOT NULL,
151
#  qa_contact int DEFAULT '0' NOT NULL,
152
#  status_whiteboard mediumtext NOT NULL,
153
#  votes int DEFAULT '0' NOT NULL,
154
#  PRIMARY KEY (bug_id),
155
#  KEY assigned_to (assigned_to),
156
#  KEY creation_ts (creation_ts),
157
#  KEY delta_ts (delta_ts),
158
#  KEY bug_severity (bug_severity),
159
#  KEY bug_status (bug_status),
160
#  KEY op_sys (op_sys),
161
#  KEY priority (priority),
162
#  KEY product (product),
163
#  KEY reporter (reporter),
164
#  KEY version (version),
165
#  KEY component (component),
166
#  KEY resolution (resolution),
167
#  KEY target_milestone (target_milestone),
168
#  KEY qa_contact (qa_contact),
169
#  KEY votes (votes)
170
#);
171
#
172
#--error 1265
173
#INSERT INTO t1 VALUES (1,0,0,'','normal','','2000-02-10 09:25:12',20000321114747,'','','Linux','P1','TestProduct','PC',3,'other','TestComponent','','M1',0,'',0);
174
#INSERT INTO t1 VALUES (9,0,0,'','enhancement','','2000-03-10 11:49:36',20000321114747,'','','All','P5','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - conversion','','',0,'',0);
175
#INSERT INTO t1 VALUES (10,0,0,'','enhancement','','2000-03-10 18:10:16',20000321114747,'','','All','P4','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - conversion','','',0,'',0);
176
#INSERT INTO t1 VALUES (7,0,0,'','critical','','2000-03-09 10:50:21',20000321114747,'','','All','P1','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - generic','','',0,'',0);
177
#INSERT INTO t1 VALUES (6,0,0,'','normal','','2000-03-09 10:42:44',20000321114747,'','','All','P2','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
178
#INSERT INTO t1 VALUES (8,0,0,'','major','','2000-03-09 11:32:14',20000321114747,'','','All','P3','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
179
#INSERT INTO t1 VALUES (5,0,0,'','enhancement','','2000-03-09 10:38:59',20000321114747,'','','All','P5','CCC/CCCCCC','PC',5,'7.00','Administration','','',0,'',0);
180
#INSERT INTO t1 VALUES (4,0,0,'','normal','','2000-03-08 18:32:14',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent2','','',0,'',0);
181
#INSERT INTO t1 VALUES (3,0,0,'','normal','','2000-03-08 18:30:52',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent','','',0,'',0);
182
#INSERT INTO t1 VALUES (2,0,0,'','enhancement','','2000-03-08 18:24:51',20000321114747,'','','All','P2','TestProduct','Other',4,'other','TestComponent2','','',0,'',0);
183
#INSERT INTO t1 VALUES (11,0,0,'','blocker','','2000-03-13 09:43:41',20000321114747,'','','All','P2','CCC/CCCCCC','PC',5,'7.00','DDDDDDDDD','','',0,'',0);
184
#INSERT INTO t1 VALUES (12,0,0,'','normal','','2000-03-13 16:14:31',20000321114747,'','','All','P2','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
185
#INSERT INTO t1 VALUES (13,0,0,'','normal','','2000-03-15 16:20:44',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent','','',0,'',0);
186
#INSERT INTO t1 VALUES (14,0,0,'','blocker','','2000-03-15 18:13:47',20000321114747,'','','All','P1','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - generic','','',0,'',0);
187
#INSERT INTO t1 VALUES (15,0,0,'','minor','','2000-03-16 18:03:28',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','DDDDDDDDD','','',0,'',0);
188
#INSERT INTO t1 VALUES (16,0,0,'','normal','','2000-03-16 18:33:41',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
189
#INSERT INTO t1 VALUES (17,0,0,'','normal','','2000-03-16 18:34:18',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
190
#INSERT INTO t1 VALUES (18,0,0,'','normal','','2000-03-16 18:34:56',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
191
#INSERT INTO t1 VALUES (19,0,0,'','enhancement','','2000-03-16 18:35:34',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
192
#INSERT INTO t1 VALUES (20,0,0,'','enhancement','','2000-03-16 18:36:23',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
193
#INSERT INTO t1 VALUES (21,0,0,'','enhancement','','2000-03-16 18:37:23',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
194
#INSERT INTO t1 VALUES (22,0,0,'','enhancement','','2000-03-16 18:38:16',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
195
#INSERT INTO t1 VALUES (23,0,0,'','normal','','2000-03-16 18:58:12',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','DDDDDDDDD','','',0,'',0);
196
#INSERT INTO t1 VALUES (24,0,0,'','normal','','2000-03-17 11:08:10',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
197
#INSERT INTO t1 VALUES (25,0,0,'','normal','','2000-03-17 11:10:45',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
198
#INSERT INTO t1 VALUES (26,0,0,'','normal','','2000-03-17 11:15:47',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
199
#INSERT INTO t1 VALUES (27,0,0,'','normal','','2000-03-17 17:45:41',20000321114747,'','','All','P2','CCC/CCCCCC','PC',5,'7.00','DDDDDDDDD','','',0,'',0);
200
#INSERT INTO t1 VALUES (28,0,0,'','normal','','2000-03-20 09:51:45',20000321114747,'','','Windows NT','P2','TestProduct','PC',8,'other','TestComponent','','',0,'',0);
201
#INSERT INTO t1 VALUES (29,0,0,'','normal','','2000-03-20 11:15:09',20000321114747,'','','All','P5','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
202
#CREATE TABLE t2 (
203
#  value text,
204
#  program varchar(64),
205
#  initialowner text NOT NULL,
206
#  initialqacontact text NOT NULL,
207
#  description text NOT NULL
208
#);
209
#
210
#INSERT INTO t2 VALUES ('TestComponent','TestProduct','id0001','','');
211
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - conversion','AAAAA','id0001','','');
212
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - generic','AAAAA','id0001','','');
213
#INSERT INTO t2 VALUES ('TestComponent2','TestProduct','id0001','','');
214
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - eeeeeeeee','AAAAA','id0001','','');
215
#INSERT INTO t2 VALUES ('kkkkkkkkkkk lllllllllll','AAAAA','id0001','','');
216
#INSERT INTO t2 VALUES ('Test Procedures','AAAAA','id0001','','');
217
#INSERT INTO t2 VALUES ('Documentation','AAAAA','id0003','','');
218
#INSERT INTO t2 VALUES ('DDDDDDDDD','CCC/CCCCCC','id0002','','');
219
#INSERT INTO t2 VALUES ('Eeeeeeee Lite','CCC/CCCCCC','id0002','','');
220
#INSERT INTO t2 VALUES ('Eeeeeeee Full','CCC/CCCCCC','id0002','','');
221
#INSERT INTO t2 VALUES ('Administration','CCC/CCCCCC','id0002','','');
222
#INSERT INTO t2 VALUES ('Distribution','CCC/CCCCCC','id0002','','');
223
#INSERT INTO t2 VALUES ('Setup','CCC/CCCCCC','id0002','','');
224
#INSERT INTO t2 VALUES ('Unspecified','CCC/CCCCCC','id0002','','');
225
#INSERT INTO t2 VALUES ('Web Interface','AAAAAAAA-AAA','id0001','','');
226
#INSERT INTO t2 VALUES ('Host communication','AAAAA','id0001','','');
227
#select value,description,bug_id from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA";
228
#select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value;
229
#select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value having COUNT(bug_id) IN (0,2);
230
#
231
#drop table t1,t2;
232
1 by brian
clean slate
233
#
234
# Problem with functions and group functions when no matching rows
235
#
236
237
create table t1 (foo int);
238
insert into t1 values (1);
239
select 1+1, "a",count(*) from t1 where foo in (2);
240
insert into t1 values (1);
241
select 1+1,"a",count(*) from t1 where foo in (2);
242
drop table t1;
243
244
#
245
# Test GROUP BY DESC
246
247
CREATE TABLE t1 (
248
  spID int,
520.1.18 by Brian Aker
A bunch more test fixes.
249
  userID int,
250
  score int,
251
  key (spid),
1 by brian
clean slate
252
  key (score)
253
);
254
255
INSERT INTO t1 VALUES (1,1,1),(2,2,2),(2,1,1),(3,3,3),(4,3,3),(5,3,3),(6,3,3),(7,3,3);
256
explain select userid,count(*) from t1 group by userid desc;
257
explain select userid,count(*) from t1 group by userid desc order by null;
258
select userid,count(*) from t1 group by userid desc;
259
select userid,count(*) from t1 group by userid desc having (count(*)+1) IN (4,3);
260
select userid,count(*) from t1 group by userid desc having 3  IN (1,COUNT(*));
261
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
262
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid;
263
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid order by null;
264
select spid,count(*) from t1 where spid between 1 and 2 group by spid;
265
select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
266
explain extended select sql_big_result spid,sum(userid) from t1 group by spid desc;
267
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
268
select sql_big_result spid,sum(userid) from t1 group by spid desc;
269
explain select sql_big_result score,count(*) from t1 group by score desc;
270
explain select sql_big_result score,count(*) from t1 group by score desc order by null;
271
select sql_big_result score,count(*) from t1 group by score desc;
272
drop table t1;
273
274
# not purely group_by bug, but group_by is involved...
275
276
create table t1 (a date default null, b date default null);
277
insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01');
278
select a,min(b) c,count(distinct rand()) from t1 group by a having c<a + interval 1 day;
279
drop table t1;
280
281
# Compare with hash keys
282
283
CREATE TABLE t1 (a char(1));
284
INSERT INTO t1 VALUES ('A'),('B'),('A'),('B'),('A'),('B'),(NULL),('a'),('b'),(NULL),('A'),('B'),(NULL);
285
SELECT a FROM t1 GROUP BY a;
286
SELECT a,count(*) FROM t1 GROUP BY a;
287
SELECT a FROM t1 GROUP BY binary a;
288
SELECT a,count(*) FROM t1 GROUP BY binary a;
289
SELECT binary a FROM t1 GROUP BY 1;
290
SELECT binary a,count(*) FROM t1 GROUP BY 1;
291
# Do the same tests with MyISAM temporary tables
292
SELECT a FROM t1 GROUP BY a;
293
SELECT a,count(*) FROM t1 GROUP BY a;
294
SELECT a FROM t1 GROUP BY binary a;
295
SELECT a,count(*) FROM t1 GROUP BY binary a;
296
SELECT binary a FROM t1 GROUP BY 1;
297
SELECT binary a,count(*) FROM t1 GROUP BY 1;
298
drop table t1;
299
300
#
301
# Test of key >= 256 bytes
302
#
303
304
CREATE TABLE t1 (
305
  `a` char(193) default NULL,
306
  `b` char(63) default NULL
307
);
308
INSERT INTO t1 VALUES ('abc','def'),('hij','klm');
309
SELECT CONCAT(a, b) FROM t1 GROUP BY 1;
310
SELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;
311
SELECT CONCAT(a, b),count(distinct a) FROM t1 GROUP BY 1;
312
SELECT 1 FROM t1 GROUP BY CONCAT(a, b);
313
INSERT INTO t1 values ('hij','klm');
314
SELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;
315
DROP TABLE t1;
316
317
#
318
# Test problem with ORDER BY on a SUM() column
319
#
320
321
create table t1 (One int, Two int, Three int, Four int);
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
322
insert into t1 values (1,2,1,4),(1,2,2,4),(1,2,3,4),(1,2,4,4),(1,1,1,4),(1,1,2,4),(1,1,3,4),(1,1,4,4),(1,3,1,4),(1,3,2,4),(1,3,3,4),(1,3,4,4);
1 by brian
clean slate
323
select One, Two, sum(Four) from t1 group by One,Two;
324
drop table t1;
325
326
create table t1 (id integer primary key not null auto_increment, gender char(1));
327
insert into t1 values (NULL, 'M'), (NULL, 'F'),(NULL, 'F'),(NULL, 'F'),(NULL, 'M');
328
create table t2 (user_id integer not null, date date);
329
insert into t2 values (1, '2002-06-09'),(2, '2002-06-09'),(1, '2002-06-09'),(3, '2002-06-09'),(4, '2002-06-09'),(4, '2002-06-09');
330
select u.gender as gender, count(distinct  u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender;
331
select u.gender as  gender, count(distinct  u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender  order by percentage;
332
drop table t1,t2;
333
334
#
335
# The GROUP BY returned rows in wrong order in 3.23.51
336
#
337
338
CREATE TABLE t1 (ID1 int, ID2 int, ID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID
339
));
340
insert into t1 values (1,244,NULL),(2,243,NULL),(134,223,NULL),(185,186,NULL);
341
select S.ID as xID, S.ID1 as xID1 from t1 as S left join t1 as yS  on S.ID1 between yS.ID1 and yS.ID2;
342
select S.ID as xID, S.ID1 as xID1, repeat('*',count(distinct yS.ID)) as Level from t1 as S left join t1 as yS  on S.ID1 between yS.ID1 and yS.ID2 group by xID order by xID1;
343
drop table t1;
344
345
#
346
# Problem with MAX and LEFT JOIN
347
#
348
349
CREATE TABLE t1 (
350
  pid int NOT NULL default '0',
520.1.18 by Brian Aker
A bunch more test fixes.
351
  c1id int default NULL,
352
  c2id int default NULL,
353
  value int NOT NULL default '0',
354
  UNIQUE KEY pid2 (pid,c1id,c2id),
1 by brian
clean slate
355
  UNIQUE KEY pid (pid,value)
356
) ENGINE=MyISAM;
357
358
INSERT INTO t1 VALUES (1, 1, NULL, 1),(1, 2, NULL, 2),(1, NULL, 3, 3),(1, 4, NULL, 4),(1, 5, NULL, 5);
359
360
CREATE TABLE t2 (
361
  id int NOT NULL default '0',
520.1.18 by Brian Aker
A bunch more test fixes.
362
  active enum('Yes','No') NOT NULL default 'Yes',
1 by brian
clean slate
363
  PRIMARY KEY  (id)
364
) ENGINE=MyISAM;
365
366
INSERT INTO t2 VALUES (1, 'Yes'),(2, 'No'),(4, 'Yes'),(5, 'No');
367
368
CREATE TABLE t3 (
369
  id int NOT NULL default '0',
520.1.18 by Brian Aker
A bunch more test fixes.
370
  active enum('Yes','No') NOT NULL default 'Yes',
1 by brian
clean slate
371
  PRIMARY KEY  (id)
372
);
373
INSERT INTO t3 VALUES (3, 'Yes');
374
375
select * from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = 
376
c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND 
377
c2.active = 'Yes' WHERE m.pid=1  AND (c1.id IS NOT NULL OR c2.id IS NOT NULL);
378
select max(value) from t1 AS m LEFT JOIN t2 AS c1 ON 
379
m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = 
380
c2.id AND c2.active = 'Yes' WHERE m.pid=1  AND (c1.id IS NOT NULL OR c2.id IS 
381
NOT NULL);
382
drop table t1,t2,t3;
383
384
#
385
# Test bug in GROUP BY on BLOB that is NULL or empty
386
#
387
388
create table t1 (a blob null);
389
insert into t1 values (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(""),(""),(""),("b");
390
select a,count(*) from t1 group by a;
391
select a,count(*) from t1 group by a;
392
drop table t1;
393
394
#
395
# Test of GROUP BY ... ORDER BY NULL optimization
396
#
397
398
create table t1 (a int not null, b int not null);
399
insert into t1 values (1,1),(1,2),(3,1),(3,2),(2,2),(2,1);
400
create table t2 (a int not null, b int not null, key(a));
401
insert into t2 values (1,3),(3,1),(2,2),(1,1);
402
select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;
403
select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;
404
explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;
405
explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;
406
drop table t1,t2;
407
408
#
409
# group function arguments in some functions
410
#
411
412
create table t1 (a int, b int);
413
insert into t1 values (1, 4),(10, 40),(1, 4),(10, 43),(1, 4),(10, 41),(1, 4),(10, 43),(1, 4);
414
select a, MAX(b), INTERVAL (MAX(b), 1,3,10,30,39,40,50,60,100,1000) from t1 group by a;
415
select a, MAX(b), CASE MAX(b) when 4 then 4 when 43 then 43 else 0 end from t1 group by a;
416
select a, MAX(b), FIELD(MAX(b), '43', '4', '5') from t1 group by a;
417
select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a;
418
select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a;
419
select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a;
420
drop table t1;
421
422
#
423
# Problem with group by and alias
424
#
425
426
create table t1 (id int not null, qty int not null);
427
insert into t1 values (1,2),(1,3),(2,4),(2,5);
428
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and cqty>1;
429
select id, sum(qty) as sqty from t1 group by id having sqty>2 and count(qty)>1;
430
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sqty>2 and cqty>1;
431
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and count(qty)>1;
432
select count(*), case interval(qty,2,3,4,5,6,7,8) when -1 then NULL when 0 then "zero" when 1 then "one" when 2 then "two" end as category from t1 group by category;
433
select count(*), interval(qty,2,3,4,5,6,7,8) as category from t1 group by category;
434
drop table t1;
435
#
436
# Tests for bug #1355: 'Using filesort' is missing in EXPLAIN when ORDER BY
437
# NULL is used.
438
#
439
CREATE TABLE t1 (
440
  userid int,
520.1.18 by Brian Aker
A bunch more test fixes.
441
  score int,
442
  key (score)
1 by brian
clean slate
443
);
444
INSERT INTO t1 VALUES (1,1),(2,2),(1,1),(3,3),(3,3),(3,3),(3,3),(3,3);
445
# Here we select unordered GROUP BY into a temporary talbe, 
446
# and then sort it with filesort (GROUP BY in MySQL 
447
# implies sorted order of results)
448
SELECT userid,count(*) FROM t1 GROUP BY userid DESC;
449
EXPLAIN SELECT userid,count(*) FROM t1 GROUP BY userid DESC;
450
DROP TABLE t1;
451
CREATE TABLE t1 (
452
  i int default NULL,
520.1.18 by Brian Aker
A bunch more test fixes.
453
  j int default NULL
454
);
1 by brian
clean slate
455
INSERT INTO t1 VALUES (1,2),(2,3),(4,5),(3,5),(1,5),(23,5);
456
SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
457
explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
458
DROP TABLE t1;
459
460
#Test for BUG#6976: Aggregate functions have incorrect NULL-ness
461
create table t1 (a int);
462
insert into t1 values(null);
463
select min(a) is null from t1;
464
select min(a) is null or null from t1;
465
select 1 and min(a) is null from t1;
466
drop table t1;
467
468
# Test for BUG#5400: GROUP_CONCAT returns everything twice.
469
create table t1 ( col1 int, col2 int );
470
insert into t1 values (1,1),(1,2),(1,3),(2,1),(2,2);
471
select group_concat( distinct col1 ) as alias from t1
472
  group by col2 having alias like '%';
473
474
drop table t1;
475
476
#
477
# Test BUG#8216 when referring in HAVING to n alias which is rand() function
478
#
479
480
create table t1 (a integer, b integer, c integer);
481
insert into t1 (a,b) values (1,2),(1,3),(2,5);
482
select a, 0.1*0+1 r2, sum(1) r1 from t1 where a = 1 group  by a having r1>1 and r2=1;
483
# rand(100)*10 will be < 2 only for the first row (of 6)
484
select a, round(rand(100)*10) r2, sum(1) r1 from t1 where a = 1 group  by a having r1>1 and r2<=2;
485
select a,sum(b) from t1 where a=1 group by c;
486
select a*sum(b) from t1 where a=1 group by c;
487
select sum(a)*sum(b) from t1 where a=1 group by c;
488
select a,sum(b) from t1 where a=1 group by c having a=1;
489
select a as d,sum(b) from t1 where a=1 group by c having d=1;
490
select sum(a)*sum(b) as d from t1 where a=1 group by c having d > 0;
491
drop table t1;
492
493
# Test for BUG#9213 GROUP BY query on utf-8 key returns wrong results
494
create table t1(a int);
495
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(8),(9);
496
create table t2 (
497
  a int,
498
  b varchar(200) NOT NULL,
499
  c varchar(50) NOT NULL,
500
  d varchar(100) NOT NULL,
501
  primary key (a,b(132),c,d),
502
  key a (a,b)
503
);
520.1.18 by Brian Aker
A bunch more test fixes.
504
1 by brian
clean slate
505
insert into t2 select 
506
   x3.a,  -- 3
507
   concat('val-', x3.a + 3*x4.a), -- 12
508
   concat('val-', @a:=x3.a + 3*x4.a + 12*C.a), -- 120
509
   concat('val-', @a + 120*D.a)
510
from t1 x3, t1 x4, t1 C, t1 D where x3.a < 3 and x4.a < 4 and D.a < 4;
511
512
delete from t2  where a = 2 and b = 'val-2' order by a,b,c,d limit 30;
513
514
explain select c from t2 where a = 2 and b = 'val-2' group by c;
515
select c from t2 where a = 2 and b = 'val-2' group by c;
516
drop table t1,t2;
517
518
# Test for BUG#9298 "Wrong handling of int4 columns in GROUP functions"
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
519
# (the actual problem was with protocol code, not GROUP BY)
1 by brian
clean slate
520
create table t1 (b int4 not null);
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
521
insert into t1 values(300000);
520.1.18 by Brian Aker
A bunch more test fixes.
522
select * from t1;
1 by brian
clean slate
523
select min(b) from t1;
524
drop table t1;
525
526
#
527
# Test for bug #11088: GROUP BY a BLOB column with COUNT(DISTINCT column1) 
528
#
529
530
CREATE TABLE t1 (id int PRIMARY KEY, user_id int, hostname longtext);
531
532
INSERT INTO t1 VALUES
533
  (1, 7, 'cache-dtc-af05.proxy.aol.com'),
534
  (2, 3, 'what.ever.com'),
535
  (3, 7, 'cache-dtc-af05.proxy.aol.com'),
536
  (4, 7, 'cache-dtc-af05.proxy.aol.com');
537
538
SELECT hostname, COUNT(DISTINCT user_id) as no FROM t1
539
  WHERE hostname LIKE '%aol%'
540
    GROUP BY hostname;
541
542
DROP TABLE t1;
543
544
#
545
# Test for bug #8614: GROUP BY 'const' with DISTINCT  
546
#
547
548
CREATE TABLE t1 (a  int, b int);
549
INSERT INTO t1 VALUES (1,2), (1,3);
550
SELECT a, b FROM t1 GROUP BY 'const';
551
SELECT DISTINCT a, b FROM t1 GROUP BY 'const';
552
553
DROP TABLE t1;
554
555
#
556
# Test for bug #11385: GROUP BY for datetime converted to decimals  
557
#
558
559
CREATE TABLE t1 (id INT, dt DATETIME);
560
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
561
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
562
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
563
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
564
SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f;
565
566
DROP TABLE t1;
567
568
#
569
# Test for bug #11295: GROUP BY a BLOB column with COUNT(DISTINCT column1) 
570
#                      when the BLOB column takes NULL values
571
# 
572
573
CREATE TABLE t1 (id varchar(20) NOT NULL);
574
INSERT INTO t1 VALUES ('trans1'), ('trans2');
575
CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
576
INSERT INTO t2 VALUES ('trans1', 'a problem');
577
SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment
578
  FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment;
579
580
DROP TABLE t1, t2;
581
582
#
583
# Bug #12266 GROUP BY expression on DATE column produces result with
584
#            reduced length
585
#
586
create table t1 (f1 date);
587
insert into t1 values('2005-06-06');
588
insert into t1 values('2005-06-06'); 
589
select date(left(f1+0,8)) from t1 group by 1;
590
drop table t1;
591
592
#
593
# Test for bug #11414: crash on Windows for a simple GROUP BY query 
594
#  
595
                    
596
CREATE TABLE t1 (n int);
597
INSERT INTO t1 VALUES (1);
598
SELECT n+1 AS n FROM t1 GROUP BY n;
599
DROP TABLE t1;
600
601
#
602
# BUG#12695: Item_func_isnull::update_used_tables
603
# did not update const_item_cache
604
#
605
create table t1(f1 varchar(5) key);
606
insert into t1 values (1),(2);
607
select sql_buffer_result max(f1) is null from t1;
608
select sql_buffer_result max(f1)+1 from t1;
609
drop table t1;
610
611
#
612
# BUG#14019-4.1-opt
613
#
614
CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1),(2);
615
616
SELECT a FROM t1 GROUP BY 'a';
617
SELECT a FROM t1 GROUP BY "a";
618
SELECT a FROM t1 GROUP BY `a`;
619
620
SELECT a FROM t1 GROUP BY "a";
621
SELECT a FROM t1 GROUP BY 'a';
622
SELECT a FROM t1 GROUP BY `a`;
623
624
SELECT a FROM t1 HAVING 'a' > 1;
625
SELECT a FROM t1 HAVING "a" > 1;
626
SELECT a FROM t1 HAVING `a` > 1;
627
628
SELECT a FROM t1 ORDER BY 'a' DESC;
629
SELECT a FROM t1 ORDER BY "a" DESC;
630
SELECT a FROM t1 ORDER BY `a` DESC;
631
DROP TABLE t1;
632
633
#
634
# Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself
635
# returns empty
636
# 
637
CREATE TABLE t1 (
638
    f1 int NOT NULL auto_increment primary key,
520.1.18 by Brian Aker
A bunch more test fixes.
639
    f2 varchar(100) NOT NULL default ''
1 by brian
clean slate
640
);
641
CREATE TABLE t2 (
642
    f1 varchar(10) NOT NULL default '',
643
    f2 char(3) NOT NULL default '',
644
    PRIMARY KEY  (`f1`),
645
    KEY `k1` (`f2`,`f1`)
646
);
647
648
INSERT INTO t1 values(NULL, '');
649
INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT');
650
SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1;
651
SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1;
652
DROP TABLE t1, t2;
653
654
655
# End of 4.1 tests
656
657
#
658
# Bug#11211: Ambiguous column reference in GROUP BY.
659
#
660
661
create table t1 (c1 char(3), c2 char(3));
662
create table t2 (c3 char(3), c4 char(3));
663
insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2');
664
insert into t2 values ('aaa', 'bb1'), ('aaa', 'bb2');
665
666
# query with ambiguous column reference 'c2'
667
select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4
668
group by c2;
669
show warnings;
670
671
# this query has no ambiguity
672
select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4
673
group by t1.c1;
674
675
show warnings;
676
drop table t1, t2;
677
678
#
679
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
680
#
681
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, key (b));
682
683
INSERT INTO t1 VALUES (1,      1);
684
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20) FROM t1;
685
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20) FROM t1;
686
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20) FROM t1;
687
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20) FROM t1;
688
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20) FROM t1;
689
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20) FROM t1;
690
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20) FROM t1;
691
692
SELECT MIN(b), MAX(b) from t1;
693
694
EXPLAIN SELECT b, sum(1) FROM t1 GROUP BY b;
695
EXPLAIN SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
696
SELECT b, sum(1) FROM t1 GROUP BY b;
697
SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
698
DROP TABLE t1;
699
700
#
701
# Bug #23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode
702
#
703
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
704
INSERT INTO t1 VALUES (1,1),(2,1),(3,2),(4,2),(5,3),(6,3);
705
706
SELECT MAX(a)-MIN(a) FROM t1 GROUP BY b;
707
SELECT CEILING(MIN(a)) FROM t1 GROUP BY b;
708
SELECT CASE WHEN AVG(a)>=0 THEN 'Positive' ELSE 'Negative' END FROM t1 
709
 GROUP BY b;
710
SELECT a + 1 FROM t1 GROUP BY a;
711
SELECT a + b FROM t1 GROUP BY b;
712
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1) 
713
  FROM t1 AS t1_outer;
714
SELECT 1 FROM t1 as t1_outer GROUP BY a 
715
  HAVING (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1);
716
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner LIMIT 1) 
717
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
718
--error ER_BAD_FIELD_ERROR 
719
SELECT 1 FROM t1 as t1_outer GROUP BY a 
720
  HAVING (SELECT t1_outer.b FROM t1 AS t1_inner LIMIT 1);
721
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1) 
722
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
723
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1)
724
  FROM t1 AS t1_outer;
725
SELECT (SELECT SUM(t1_outer.a) FROM t1 AS t1_inner LIMIT 1) 
726
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
727
728
SELECT 1 FROM t1 as t1_outer 
729
  WHERE (SELECT t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1);
730
731
SELECT b FROM t1 GROUP BY b HAVING CEILING(b) > 0;
732
733
SELECT 1 FROM t1 GROUP BY b HAVING b = 2 OR b = 3 OR SUM(a) > 12;
734
SELECT 1 FROM t1 GROUP BY b HAVING ROW (b,b) = ROW (1,1);
735
736
--error ER_BAD_FIELD_ERROR
737
SELECT 1 FROM t1 GROUP BY b HAVING a = 2;
738
--error ER_INVALID_GROUP_FUNC_USE
739
SELECT 1 FROM t1 GROUP BY SUM(b);
740
SELECT b FROM t1 AS t1_outer GROUP BY a HAVING t1_outer.a IN 
741
  (SELECT SUM(t1_inner.b)+t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.a
742
   HAVING SUM(t1_inner.b)+t1_outer.b > 5);
743
DROP TABLE t1;
744
#
745
# Bug#27874: Non-grouped columns are allowed by * in ONLY_FULL_GROUP_BY mode.
746
#
747
create table t1(f1 int, f2 int);
748
select * from t1 group by f1;
749
select * from t1 group by f2;
750
select * from t1 group by f1, f2;
751
select t1.f1,t.* from t1, t1 t group by 1;
752
drop table t1;
753
754
#
755
# Bug #32202: ORDER BY not working with GROUP BY
756
#
757
758
CREATE TABLE t1(
759
  id INT AUTO_INCREMENT PRIMARY KEY, 
760
  c1 INT NOT NULL, 
761
  c2 INT NOT NULL,
762
  UNIQUE KEY (c2,c1));
763
764
INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
765
766
# Show that the test cases from the bug report pass
767
SELECT * FROM t1 ORDER BY c1;
768
SELECT * FROM t1 GROUP BY id ORDER BY c1;
769
770
# Show that DESC is handled correctly
771
SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
772
773
# Show that results are correctly ordered when ORDER BY fields
774
# are a subset of GROUP BY ones
775
SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
776
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
777
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
778
779
# Show that results are correctly ordered when GROUP BY fields
780
# are a subset of ORDER BY ones
781
SELECT * FROM t1 GROUP BY c2  ORDER BY c2, c1;
782
SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1;
783
SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1 DESC;
784
785
DROP TABLE t1;
786
787
788
--echo #
789
--echo # Bug#27219: Aggregate functions in ORDER BY.  
790
--echo #
791
CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 0);
792
INSERT INTO t1 (a, b) VALUES (3,3), (2,2), (3,3), (2,2), (3,3), (4,4);
793
CREATE TABLE t2 SELECT * FROM t1;
794
795
SELECT 1 FROM t1 ORDER BY COUNT(*);
796
SELECT 1 FROM t1 ORDER BY COUNT(*) + 1;
797
SELECT 1 FROM t1 ORDER BY COUNT(*) + a;
798
SELECT 1 FROM t1 ORDER BY COUNT(*), 1;
799
SELECT 1 FROM t1 ORDER BY COUNT(*), a;
800
801
SELECT 1 FROM t1 ORDER BY SUM(a);
802
SELECT 1 FROM t1 ORDER BY SUM(a + 1);
803
SELECT 1 FROM t1 ORDER BY SUM(a) + 1;
804
SELECT 1 FROM t1 ORDER BY SUM(a), b;
805
806
SELECT a FROM t1 ORDER BY COUNT(b);
807
808
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2);
809
810
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2 ORDER BY t2.a);
811
SELECT t1.a FROM t1 ORDER BY (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
812
813
SELECT t1.a FROM t1
814
  WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
815
SELECT t1.a FROM t1 GROUP BY t1.a
816
  HAVING t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
817
818
SELECT t1.a FROM t1 GROUP BY t1.a
819
  HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
820
SELECT t1.a FROM t1 GROUP BY t1.a
821
  HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
822
SELECT t1.a FROM t1 GROUP BY t1.a
823
  HAVING t1.a > ANY (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
824
825
SELECT t1.a FROM t1
826
  WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
827
828
SELECT 1 FROM t1 GROUP BY t1.a
829
  HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
830
SELECT 1 FROM t1 GROUP BY t1.a
831
  HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
832
SELECT 1 FROM t1 GROUP BY t1.a
833
  HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
834
835
SELECT 1 FROM t1 GROUP BY t1.a
836
  HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY t2.a LIMIT 1);
837
SELECT 1 FROM t1 GROUP BY t1.a
838
  HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
839
SELECT 1 FROM t1 GROUP BY t1.a
840
  HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
841
842
# Both SUMs are aggregated in the subquery, no mixture:
843
SELECT t1.a FROM t1 
844
  WHERE t1.a = (SELECT t2.a FROM t2 GROUP BY t2.a
845
                  ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1);
846
847
# SUM(t1.b) is aggregated in the subquery, no mixture:
848
SELECT t1.a, SUM(t1.b) FROM t1 
849
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2 GROUP BY t2.a
850
                  ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1)
851
  GROUP BY t1.a;
852
853
# 2nd SUM(t1.b) is aggregated in the subquery, no mixture:
854
SELECT t1.a, SUM(t1.b) FROM t1 
855
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2
856
                  ORDER BY SUM(t2.b) + SUM(t1.b) LIMIT 1)
857
  GROUP BY t1.a;
858
859
# SUM(t2.b + t1.a) is aggregated in the subquery, no mixture:
860
SELECT t1.a, SUM(t1.b) FROM t1 
861
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2
862
                  ORDER BY SUM(t2.b + t1.a) LIMIT 1)
863
  GROUP BY t1.a;
864
865
SELECT t1.a FROM t1 GROUP BY t1.a
866
    HAVING (1, 1) = (SELECT SUM(t1.a), t1.a FROM t2 LIMIT 1);
867
868
select avg (
869
  (select
870
    (select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
871
   from t1 as outr order by outr.a limit 1))
872
from t1 as most_outer;
873
874
select avg (
875
  (select (
876
    (select sum(outr.a + innr.a) from t1 as innr limit 1)) as tt
877
   from t1 as outr order by count(outr.a) limit 1)) as tt
878
from t1 as most_outer;
879
880
select (select sum(outr.a + t1.a) from t1 limit 1) as tt from t1 as outr order by outr.a;
881
882
DROP TABLE t1, t2;
883
884
--echo End of 5.0 tests
885
# Bug #21174: Index degrades sort performance and 
886
#             optimizer does not honor IGNORE INDEX.
887
#             a.k.a WL3527.
888
#
889
CREATE TABLE t1 (a INT, b INT,
890
                 PRIMARY KEY (a),
891
                 KEY i2(a,b));
892
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);
893
INSERT INTO t1 SELECT a + 8,b FROM t1;
894
INSERT INTO t1 SELECT a + 16,b FROM t1;
895
INSERT INTO t1 SELECT a + 32,b FROM t1;
896
INSERT INTO t1 SELECT a + 64,b FROM t1;
897
INSERT INTO t1 SELECT a + 128,b FROM t1 limit 16;
898
ANALYZE TABLE t1;
899
EXPLAIN SELECT a FROM t1 WHERE a < 2;
900
EXPLAIN SELECT a FROM t1 WHERE a < 2 ORDER BY a;
901
EXPLAIN SELECT a FROM t1 WHERE a < 2 GROUP BY a;
902
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY,i2);
903
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR JOIN (PRIMARY,i2);
904
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
905
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
906
SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
907
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY)
908
  IGNORE INDEX FOR GROUP BY (i2) GROUP BY a;
909
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY) IGNORE INDEX FOR ORDER BY (i2);
910
EXPLAIN SELECT a FROM t1 FORCE INDEX (i2);
911
EXPLAIN SELECT a FROM t1 USE INDEX ();
912
EXPLAIN SELECT a FROM t1 USE INDEX () USE INDEX (i2);
913
--error ER_WRONG_USAGE
914
EXPLAIN SELECT a FROM t1 
915
  FORCE INDEX (PRIMARY) 
916
  IGNORE INDEX FOR GROUP BY (i2)
917
  IGNORE INDEX FOR ORDER BY (i2)
918
  USE INDEX (i2);
919
EXPLAIN SELECT a FROM t1 USE INDEX (i2) USE INDEX ();
920
--error ER_PARSE_ERROR
921
EXPLAIN SELECT a FROM t1 FORCE INDEX ();
922
--error ER_PARSE_ERROR
923
EXPLAIN SELECT a FROM t1 IGNORE INDEX ();
924
# disable the columns irrelevant to this test here. On some systems 
925
# without support for large files the rowid is shorter and its size affects 
926
# the cost calculations. This causes the optimizer to choose loose index
927
# scan over normal index access.
928
--replace_column 4 # 7 # 9 # 10 #
929
EXPLAIN SELECT a FROM t1 USE INDEX FOR JOIN (i2) 
930
  USE INDEX FOR GROUP BY (i2) GROUP BY a;
931
EXPLAIN SELECT a FROM t1 FORCE INDEX FOR JOIN (i2) 
932
  FORCE INDEX FOR GROUP BY (i2) GROUP BY a;
933
EXPLAIN SELECT a FROM t1 USE INDEX () IGNORE INDEX (i2);
934
EXPLAIN SELECT a FROM t1 IGNORE INDEX (i2) USE INDEX ();
935
936
EXPLAIN SELECT a FROM t1 
937
  USE INDEX FOR GROUP BY (i2) 
938
  USE INDEX FOR ORDER BY (i2)
939
  USE INDEX FOR JOIN (i2);
940
941
EXPLAIN SELECT a FROM t1 
942
  USE INDEX FOR JOIN (i2) 
943
  USE INDEX FOR JOIN (i2) 
944
  USE INDEX FOR JOIN (i2,i2);
945
946
EXPLAIN SELECT 1 FROM t1 WHERE a IN
947
  (SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
948
949
CREATE TABLE t2 (a INT, b INT, KEY(a));
950
INSERT INTO t2 VALUES (1, 1), (2, 2), (3,3), (4,4);
951
EXPLAIN SELECT a, SUM(b) FROM t2 GROUP BY a LIMIT 2; 
952
EXPLAIN SELECT a, SUM(b) FROM t2 IGNORE INDEX (a) GROUP BY a LIMIT 2;
953
954
EXPLAIN SELECT 1 FROM t2 WHERE a IN
955
  (SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
956
957
SHOW VARIABLES LIKE 'old';  
958
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
959
SET @@old = off;  
960
961
DROP TABLE t1, t2;
962
963
#
964
# Bug#30596: GROUP BY optimization gives wrong result order
965
#
966
CREATE TABLE t1(
967
  a INT, 
968
  b INT NOT NULL, 
969
  c INT NOT NULL, 
970
  d INT, 
971
  UNIQUE KEY (c,b)
972
);
973
974
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
975
976
CREATE TABLE t2(
977
  a INT,
978
  b INT,
979
  UNIQUE KEY(a,b)
980
);
981
982
INSERT INTO t2 VALUES (NULL, NULL), (NULL, NULL), (NULL, 1), (1, NULL), (1, 1), (1,2);
983
984
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
985
SELECT c,b,d FROM t1 GROUP BY c,b,d;
986
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
987
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
988
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
989
SELECT c,b,d FROM t1 ORDER BY c,b,d;
990
991
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
992
SELECT c,b,d FROM t1 GROUP BY c,b;
993
EXPLAIN SELECT c,b   FROM t1 GROUP BY c,b;
994
SELECT c,b   FROM t1 GROUP BY c,b;
995
996
EXPLAIN SELECT a,b from t2 ORDER BY a,b;
997
SELECT a,b from t2 ORDER BY a,b;
998
EXPLAIN SELECT a,b from t2 GROUP BY a,b;
999
SELECT a,b from t2 GROUP BY a,b;
1000
EXPLAIN SELECT a from t2 GROUP BY a;
1001
SELECT a from t2 GROUP BY a;
1002
EXPLAIN SELECT b from t2 GROUP BY b;
1003
SELECT b from t2 GROUP BY b;
1004
1005
DROP TABLE t1;
1006
1007
#
1008
# Bug #31797: error while parsing subqueries -- WHERE is parsed as HAVING
1009
#
1010
CREATE TABLE t1 ( a INT, b INT );
1011
1012
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1013
FROM t1;
1014
1015
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1016
FROM t1 
1017
HAVING b = 10;
1018
1019
--error ER_ILLEGAL_REFERENCE
1020
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
1021
FROM t1 
1022
HAVING b = 10;
1023
1024
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1025
FROM t1;
1026
1027
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1028
FROM t1 
1029
HAVING b = 10;
1030
1031
--error ER_ILLEGAL_REFERENCE
1032
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
1033
FROM t1 
1034
HAVING b = 10;
1035
1036
INSERT INTO t1 VALUES (1, 1);
1037
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1038
FROM t1;
1039
1040
INSERT INTO t1 VALUES (2, 1);
1041
--error ER_SUBQUERY_NO_1_ROW
1042
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1043
FROM t1;
1044
1045
DROP TABLE t1;
1046
1047
1048
1049