~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/func_gconcat.test

  • Committer: Brian Aker
  • Date: 2008-08-16 15:41:14 UTC
  • mto: This revision was merged to the branch mainline in revision 346.
  • Revision ID: brian@tangent.org-20080816154114-eufmwf31p6ie1nd6
Cleaned up depend in Proto utils. Modified int to bool. Put TmpTable class
into play.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#
2
 
# simple test of group_concat function
3
 
#
4
 
--disable_warnings
5
 
drop table if exists t1, t2;
6
 
--enable_warnings
7
 
 
8
 
create table t1 (grp int, a bigint, c char(10) not null, d char(10) not null);
9
 
insert into t1 values (1,1,"a","a");
10
 
insert into t1 values (2,2,"b","a");
11
 
insert into t1 values (2,3,"c","b");
12
 
insert into t1 values (3,4,"E","a");
13
 
insert into t1 values (3,5,"C","b");
14
 
insert into t1 values (3,6,"D","b");
15
 
insert into t1 values (3,7,"d","d");
16
 
insert into t1 values (3,8,"d","d");
17
 
insert into t1 values (3,9,"D","c");
18
 
 
19
 
# Test of MySQL simple request
20
 
select grp,group_concat(c) from t1 group by grp;
21
 
explain extended select grp,group_concat(c) from t1 group by grp;
22
 
select grp,group_concat(a,c) from t1 group by grp;
23
 
select grp,group_concat("(",a,":",c,")") from t1 group by grp;
24
 
 
25
 
# Test of MySQL with options
26
 
select grp,group_concat(c separator ",") from t1 group by grp;
27
 
select grp,group_concat(c separator "---->") from t1 group by grp;
28
 
select grp,group_concat(c order by c) from t1 group by grp;
29
 
select grp,group_concat(c order by c desc) from t1 group by grp;
30
 
select grp,group_concat(d order by a) from t1 group by grp;
31
 
select grp,group_concat(d order by a desc) from t1 group by grp;
32
 
--disable_warnings
33
 
select grp,group_concat(a order by a,d+c-ascii(c)-a) from t1 group by grp;
34
 
select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
35
 
--enable_warnings
36
 
select grp,group_concat(c order by 1) from t1 group by grp;
37
 
select grp,group_concat(distinct c order by c) from t1 group by grp;
38
 
select grp,group_concat(distinct c order by c desc) from t1 group by grp;
39
 
explain extended select grp,group_concat(distinct c order by c desc) from t1 group by grp;
40
 
select grp,group_concat(c order by c separator ",") from t1 group by grp;
41
 
select grp,group_concat(c order by c desc separator ",") from t1 group by grp;
42
 
select grp,group_concat(distinct c order by c separator ",") from t1 group by grp;
43
 
explain extended select grp,group_concat(distinct c order by c separator ",") from t1 group by grp;
44
 
select grp,group_concat(distinct c order by c desc separator ",") from t1 group by grp;
45
 
 
46
 
# Test of SQL_LIST objects
47
 
select grp,group_concat(c order by grp desc) from t1 group by grp order by grp;
48
 
 
49
 
 
50
 
# Test transfer to real values
51
 
 
52
 
select grp, group_concat(a separator "")+0 from t1 group by grp;
53
 
select grp, group_concat(a separator "")+0.0 from t1 group by grp;
54
 
select grp, ROUND(group_concat(a separator "")) from t1 group by grp;
55
 
drop table t1;
56
 
 
57
 
# Test NULL values
58
 
 
59
 
create table t1 (grp int, c char(10));
60
 
insert into t1 values (1,NULL),(2,"b"),(2,NULL),(3,"E"),(3,NULL),(3,"D"),(3,NULL),(3,NULL),(3,"D"),(4,""),(5,NULL);
61
 
select grp,group_concat(c order by c) from t1 group by grp;
62
 
 
63
 
# Test warnings
64
 
 
65
 
set group_concat_max_len = 4;
66
 
select grp,group_concat(c) from t1 group by grp;
67
 
show warnings;
68
 
set group_concat_max_len = 1024;
69
 
 
70
 
# Test errors
71
 
 
72
 
--error 1111
73
 
select group_concat(sum(c)) from t1 group by grp;
74
 
--error 1054
75
 
select grp,group_concat(c order by 2) from t1 group by grp;
76
 
 
77
 
drop table t1;
78
 
 
79
 
# Test variable length
80
 
 
81
 
create table t1 ( URL_ID int, URL varchar(80));
82
 
create table t2 ( REQ_ID int, URL_ID int);
83
 
insert into t1 values (4,'www.host.com'), (5,'www.google.com'),(5,'www.help.com');
84
 
insert into t2 values (1,4), (5,4), (5,5);
85
 
# Make this order independent
86
 
--replace_result www.help.com X www.host.com X www.google.com X
87
 
select REQ_ID, Group_Concat(URL) as URL from t1, t2 where
88
 
t2.URL_ID = t1.URL_ID group by REQ_ID;
89
 
# check min/max function
90
 
--replace_result www.help.com X www.host.com X www.google.com X
91
 
select REQ_ID, Group_Concat(URL) as URL, Min(t1.URL_ID) urll,
92
 
Max(t1.URL_ID) urlg from t1, t2 where t2.URL_ID = t1.URL_ID group by REQ_ID;
93
 
 
94
 
drop table t1;
95
 
drop table t2;
96
 
 
97
 
create table t1 (id int, name varchar(16));
98
 
insert into t1 values (1,'longername'),(1,'evenlongername');
99
 
select ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'without distinct: how it should be' from t1;
100
 
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
101
 
drop table t1;
102
 
 
103
 
# check zero rows (bug#836)
104
 
create table t1(id int);
105
 
create table t2(id int);
106
 
insert into t1 values(0),(1);
107
 
select group_concat(t1.id) FROM t1,t2;
108
 
drop table t1;
109
 
drop table t2;
110
 
 
111
 
# check having
112
 
create table t1 (bar varchar(32));
113
 
insert into t1 values('test1'),('test2');
114
 
select group_concat(bar order by concat(bar,bar)) from t1;
115
 
select group_concat(bar order by concat(bar,bar) desc) from t1;
116
 
select bar from t1 having group_concat(bar)='';
117
 
select bar from t1 having instr(group_concat(bar), "test") > 0;
118
 
select bar from t1 having instr(group_concat(bar order by concat(bar,bar) desc), "test2,test1") > 0;
119
 
drop table t1;
120
 
 
121
 
# ORDER BY fix_fields()
122
 
create table t1 (a int, a1 varchar(10));
123
 
create table t2 (a0 int);
124
 
insert into t1 values (0,"a"),(0,"b"),(1,"c");
125
 
insert into t2 values (1),(2),(3);
126
 
select  group_concat(a1 order by (t1.a IN (select a0 from t2))) from t1;
127
 
select  group_concat(a1 order by (t1.a)) from t1;
128
 
drop table t1, t2;
129
 
 
130
 
#
131
 
# Problem with GROUP BY (Bug #2695)
132
 
#
133
 
 
134
 
CREATE TABLE t1 (id1 int NOT NULL, id2 int NOT NULL);
135
 
INSERT INTO t1 VALUES (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),(2, 1),(2, 2),(2, 3);
136
 
CREATE TABLE t2 (id1 int NOT NULL);
137
 
INSERT INTO t2 VALUES (1),(2),(3),(4),(5);
138
 
SELECT t1.id1, GROUP_CONCAT(t1.id2 ORDER BY t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 AND t1.id1=1 GROUP BY t1.id1;
139
 
SELECT t1.id1, GROUP_CONCAT(t1.id2 ORDER BY t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
140
 
SELECT t1.id1, GROUP_CONCAT(t1.id2 ORDER BY t1.id2 DESC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
141
 
SELECT t1.id1, GROUP_CONCAT(t1.id2 ORDER BY 6-t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
142
 
 
143
 
# The following failed when it was run twice:
144
 
SELECT t1.id1, GROUP_CONCAT(t1.id2,6-t1.id2 ORDER BY 6-t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
145
 
SELECT t1.id1, GROUP_CONCAT(t1.id2,6-t1.id2 ORDER BY 6-t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
146
 
 
147
 
SELECT t1.id1, GROUP_CONCAT(t1.id2,"/",6-t1.id2 ORDER BY 1+0,6-t1.id2,t1.id2 ASC) AS concat_id FROM t1, t2 WHERE t1.id1 = t2.id1 GROUP BY t1.id1;
148
 
drop table t1,t2;
149
 
 
150
 
#
151
 
# Problem with distinct (Bug #3381)
152
 
#
153
 
 
154
 
create table t1 (s1 char(10), s2 int not null);
155
 
insert into t1 values ('a',2),('b',2),('c',1),('a',3),('b',4),('c',4);
156
 
select distinct s1 from t1 order by s2,s1;
157
 
select group_concat(distinct s1) from t1;
158
 
select group_concat(distinct s1 order by s2) from t1 where s2 < 4;
159
 
# The following is wrong and needs to be fixed ASAP
160
 
select group_concat(distinct s1 order by s2) from t1;
161
 
drop table t1;
162
 
 
163
 
#
164
 
# Test with subqueries (Bug #3319)
165
 
#
166
 
 
167
 
create table t1 (a int, c int);
168
 
insert into t1 values (1, 2), (2, 3), (2, 4), (3, 5);
169
 
create table t2 (a int, c int);
170
 
insert into t2 values (1, 5), (2, 4), (3, 3), (3,3);
171
 
select group_concat(c) from t1;
172
 
select group_concat(c order by (select c from t2 where t2.a=t1.a limit 1)) as grp from t1;
173
 
select group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a)) as grp from t1;
174
 
select group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a) desc) as grp from t1;
175
 
select t1.a, group_concat(c order by (select c from t2 where t2.a=t1.a limit 1)) as grp from t1 group by 1;
176
 
select t1.a, group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a)) as grp from t1 group by 1;
177
 
select t1.a, group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a) desc) as grp from t1 group by 1;
178
 
 
179
 
# The following returns random results as we are sorting on blob addresses
180
 
select group_concat(c order by (select concat(5-t1.c,group_concat(c order by a)) from t2 where t2.a=t1.a)) as grp from t1;
181
 
select group_concat(c order by (select concat(t1.c,group_concat(c)) from t2 where a=t1.a)) as grp from t1;
182
 
 
183
 
select a,c,(select group_concat(c order by a) from t2 where a=t1.a) as grp from t1 order by grp;
184
 
drop table t1,t2;
185
 
 
186
 
#
187
 
# group_concat of expression with GROUP BY and external GROUP BY
188
 
#
189
 
CREATE TABLE t1 ( a int );
190
 
CREATE TABLE t2 ( a int );
191
 
INSERT INTO t1 VALUES (1), (2);
192
 
INSERT INTO t2 VALUES (1), (2);
193
 
SELECT GROUP_CONCAT(t1.a*t2.a ORDER BY t2.a) FROM t1, t2 GROUP BY t1.a;
194
 
DROP TABLE t1, t2;
195
 
 
196
 
#
197
 
# Bug #4035: group_concat() and HAVING
198
 
#
199
 
 
200
 
CREATE TABLE t1 (a char(4));
201
 
INSERT INTO t1 VALUES ('John'), ('Anna'), ('Bill');
202
 
SELECT GROUP_CONCAT(a SEPARATOR '||') AS names FROM t1 
203
 
  HAVING names LIKE '%An%';
204
 
SELECT GROUP_CONCAT(a SEPARATOR '###') AS names FROM t1 
205
 
  HAVING LEFT(names, 1) ='J';
206
 
DROP TABLE t1;
207
 
 
208
 
#
209
 
# check blobs
210
 
#
211
 
 
212
 
CREATE TABLE t1 ( a int, b TEXT );
213
 
INSERT INTO t1 VALUES (1,'First Row'), (2,'Second Row');
214
 
SELECT GROUP_CONCAT(b ORDER BY b) FROM t1 GROUP BY a;
215
 
DROP TABLE t1;
216
 
 
217
 
#
218
 
# check null values #2
219
 
#
220
 
 
221
 
CREATE TABLE t1 (A_ID INT NOT NULL,A_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID));
222
 
INSERT INTO t1 VALUES (1,'ABC'), (2,'EFG'), (3,'HIJ');
223
 
CREATE TABLE t2 (A_ID INT NOT NULL,B_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID,B_DESC));
224
 
INSERT INTO t2 VALUES (1,'A'),(1,'B'),(3,'F');
225
 
SELECT t1.A_ID, GROUP_CONCAT(t2.B_DESC) AS B_DESC FROM t1 LEFT JOIN t2 ON t1.A_ID=t2.A_ID GROUP BY t1.A_ID ORDER BY t1.A_DESC;
226
 
DROP TABLE t1;
227
 
DROP TABLE t2;
228
 
 
229
 
#
230
 
# blobs
231
 
#
232
 
 
233
 
create table t1 (a int, b text);
234
 
insert into t1 values (1, 'bb'), (1, 'ccc'), (1, 'a'), (1, 'bb'), (1, 'ccc');
235
 
insert into t1 values (2, 'BB'), (2, 'CCC'), (2, 'A'), (2, 'BB'), (2, 'CCC');
236
 
select group_concat(b) from t1 group by a;
237
 
select group_concat(distinct b) from t1 group by a;
238
 
select group_concat(b order by b) from t1 group by a;
239
 
select group_concat(distinct b order by b) from t1 group by a;
240
 
set local group_concat_max_len=4;
241
 
select group_concat(b) from t1 group by a;
242
 
select group_concat(distinct b) from t1 group by a;
243
 
select group_concat(b order by b) from t1 group by a;
244
 
select group_concat(distinct b order by b) from t1 group by a;
245
 
 
246
 
#
247
 
# long blobs
248
 
#
249
 
 
250
 
insert into t1 values (1, concat(repeat('1', 300), '2')), 
251
 
(1, concat(repeat('1', 300), '2')), (1, concat(repeat('0', 300), '1')), 
252
 
(2, concat(repeat('1', 300), '2')), (2, concat(repeat('1', 300), '2')), 
253
 
(2, concat(repeat('0', 300), '1'));
254
 
set local group_concat_max_len=1024;
255
 
select group_concat(b) from t1 group by a;
256
 
select group_concat(distinct b) from t1 group by a;
257
 
select group_concat(b order by b) from t1 group by a;
258
 
select group_concat(distinct b order by b) from t1 group by a;
259
 
set local group_concat_max_len=400;
260
 
select group_concat(b) from t1 group by a;
261
 
select group_concat(distinct b) from t1 group by a;
262
 
select group_concat(b order by b) from t1 group by a;
263
 
select group_concat(distinct b order by b) from t1 group by a;
264
 
 
265
 
drop table t1;
266
 
 
267
 
#
268
 
# Bug#10201
269
 
#
270
 
create table t1 (a varchar(255), b varchar(255) );
271
 
insert into t1 values ('xxx','yyy');
272
 
select collation(a) from t1;
273
 
select collation(group_concat(a)) from t1;
274
 
create table t2 select group_concat(a) as a from t1;
275
 
--replace_regex /ENGINE=[a-zA-Z]+/ENGINE=DEFAULT/
276
 
show create table t2;
277
 
select collation(group_concat(a,b)) from t1;
278
 
drop table t1;
279
 
drop table t2;
280
 
 
281
 
#
282
 
# Bug #12829
283
 
# Cannot convert the charset of a GROUP_CONCAT result
284
 
#
285
 
#CREATE TABLE t1 (a VARCHAR(10));
286
 
#INSERT INTO t1 VALUES ('�');
287
 
#SELECT a FROM t1;
288
 
#SELECT GROUP_CONCAT(a) FROM t1;
289
 
#DROP TABLE t1;
290
 
 
291
 
#
292
 
# bug #7769: group_concat returning null is checked in having
293
 
#
294
 
CREATE TABLE t1 (id int);
295
 
SELECT GROUP_CONCAT(id) AS gc FROM t1 HAVING gc IS NULL;
296
 
DROP TABLE t1;
297
 
 
298
 
#
299
 
# Bug #8656: Crash with group_concat on alias in outer table
300
 
#
301
 
create table t2 (a int, b int);
302
 
insert into t2 values (1,1), (2,2);
303
 
select  b x, (select group_concat(x) from t2) from  t2;
304
 
drop table t2;
305
 
 
306
 
#
307
 
# Bug #7405: problems with rollup
308
 
#
309
 
 
310
 
create table t1 (d int not null auto_increment,primary key(d), a int, b int, c int);
311
 
insert into t1(a,b) values (1,3), (1,4), (1,2), (2,7), (1,1), (1,2), (2,3), (2,3);
312
 
select d,a,b from t1 order by a;
313
 
explain select a, group_concat(b) from t1 group by a with rollup;
314
 
select a, group_concat(b) from t1 group by a with rollup;
315
 
select a, group_concat(distinct b) from t1 group by a with rollup;
316
 
select a, group_concat(b order by b) from t1 group by a with rollup;
317
 
select a, group_concat(distinct b order by b) from t1 group by a with rollup;
318
 
drop table t1;
319
 
 
320
 
#
321
 
# Bug #6475
322
 
#
323
 
create table t1 (a char(3), b char(20), primary key (a, b));
324
 
insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English');
325
 
select group_concat(a) from t1 group by b;
326
 
drop table t1;
327
 
#
328
 
# Bug #12095: GROUP_CONCAT for one row table 
329
 
#
330
 
 
331
 
CREATE TABLE t1 (
332
 
  aID int NOT NULL auto_increment,
333
 
  sometitle varchar(155) NOT NULL default '',
334
 
  bID int NOT NULL,
335
 
  PRIMARY KEY  (aID),
336
 
  UNIQUE KEY sometitle (sometitle)
337
 
);
338
 
INSERT INTO t1 SET sometitle = 'title1', bID = 1;
339
 
INSERT INTO t1 SET sometitle = 'title2', bID = 1;
340
 
 
341
 
CREATE TABLE t2 (
342
 
  bID int NOT NULL auto_increment,
343
 
  somename varchar(155) NOT NULL default '',
344
 
  PRIMARY KEY  (bID),
345
 
  UNIQUE KEY somename (somename)
346
 
);
347
 
INSERT INTO t2 SET somename = 'test';
348
 
 
349
 
SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |')
350
 
  FROM t1 JOIN t2 ON t1.bID = t2.bID;
351
 
INSERT INTO t2 SET somename = 'test2';
352
 
SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |')
353
 
  FROM t1 JOIN t2 ON t1.bID = t2.bID;
354
 
DELETE FROM t2 WHERE somename = 'test2';
355
 
SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |')
356
 
  FROM t1 JOIN t2 ON t1.bID = t2.bID;
357
 
 
358
 
DROP TABLE t1,t2;
359
 
 
360
 
#
361
 
# Bug #12859 group_concat in subquery cause incorrect not null
362
 
#
363
 
create table t1 ( a int not null default 0);
364
 
select * from (select group_concat(a) from t1) t2;
365
 
select group_concat('x') UNION ALL select 1;
366
 
drop table t1;
367
 
 
368
 
#
369
 
# Bug #12863 : missing separators after first empty cancatanated elements
370
 
#
371
 
 
372
 
CREATE TABLE t1 (id int, a varchar(9));
373
 
INSERT INTO t1 VALUES
374
 
  (2, ''), (1, ''), (2, 'x'), (1, 'y'), (3, 'z'), (3, '');
375
 
 
376
 
SELECT GROUP_CONCAT(a) FROM t1;
377
 
SELECT GROUP_CONCAT(a ORDER BY a) FROM t1;
378
 
 
379
 
SELECT GROUP_CONCAT(a) FROM t1 GROUP BY id;
380
 
SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY id;
381
 
 
382
 
DROP TABLE t1;
383
 
 
384
 
#
385
 
# Bug #15560: GROUP_CONCAT wasn't ready for WITH ROLLUP queries
386
 
#
387
 
create table t1(f1 int);
388
 
insert into t1 values(1),(2),(3);
389
 
select f1, group_concat(f1+1) from t1 group by f1 with rollup;
390
 
select count(distinct (f1+1)) from t1 group by f1 with rollup;
391
 
drop table t1;
392
 
 
393
 
#
394
 
# Bug#14169 type of group_concat() result changed to blob if tmp_table was used
395
 
#
396
 
create table t1 (f1 int, f2 varchar(255));
397
 
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
398
 
--enable_metadata
399
 
select f2,group_concat(f1) from t1 group by f2;
400
 
--disable_metadata
401
 
drop table t1;
402
 
 
403
 
# End of 4.1 tests
404
 
 
405
 
#
406
 
# Bug#8568 "GROUP_CONCAT returns string, unless in a UNION in which case
407
 
# returns BLOB": add a test case, the bug can not be repeated any more.
408
 
#
409
 
 
410
 
create table t1 (a char, b char);
411
 
insert into t1 values ('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b');
412
 
create table t2 select group_concat(b) as a from t1 where a = 'a';
413
 
create table t3 (select group_concat(a) as a from t1 where a = 'a') union
414
 
                (select group_concat(b) as a from t1 where a = 'b');
415
 
drop table t1, t2, t3;
416
 
 
417
 
#
418
 
# Bug #16712: group_concat returns odd string instead of intended result
419
 
#
420
 
CREATE TABLE t1 (a INT, b LONGTEXT, PRIMARY KEY (a));
421
 
 
422
 
SET GROUP_CONCAT_MAX_LEN = 20000000;
423
 
 
424
 
INSERT INTO t1 VALUES (1,REPEAT(CONCAT('A',CAST(CHAR(0) AS BINARY),'B'), 40000));
425
 
INSERT INTO t1 SELECT a + 1, b FROM t1;
426
 
 
427
 
SELECT a, CHAR_LENGTH(b) FROM t1;
428
 
SELECT CHAR_LENGTH( GROUP_CONCAT(b) ) FROM t1;
429
 
SET GROUP_CONCAT_MAX_LEN = 1024;
430
 
DROP TABLE t1;
431
 
 
432
 
#
433
 
# Bug #22015: crash with GROUP_CONCAT over a derived table that 
434
 
#             returns the results of aggregation by GROUP_CONCAT  
435
 
#
436
 
 
437
 
CREATE TABLE t1 (a int, b int);
438
 
 
439
 
INSERT INTO t1 VALUES (2,1), (1,2), (2,2), (1,3);
440
 
 
441
 
SELECT GROUP_CONCAT(a), x 
442
 
  FROM (SELECT a, GROUP_CONCAT(b) x FROM t1 GROUP BY a) AS s
443
 
    GROUP BY x;
444
 
 
445
 
DROP TABLE t1;
446
 
#
447
 
# Bug#23451 GROUP_CONCAT truncates a multibyte utf8 character
448
 
#
449
 
create table t1
450
 
(
451
 
  x text not null,
452
 
  y integer not null
453
 
);
454
 
insert into t1 values (repeat('a', 1022), 0), (repeat( 0xc3b7, 4), 0);
455
 
let $1= 10;
456
 
while ($1)
457
 
{
458
 
  eval set group_concat_max_len= 1022 + $1;
459
 
  --disable_result_log
460
 
  select @x:=group_concat(x) from t1 group by y;
461
 
  --enable_result_log
462
 
  select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
463
 
  dec $1;
464
 
}
465
 
drop table t1;
466
 
set group_concat_max_len=1024;
467
 
 
468
 
#
469
 
# Bug#14169 type of group_concat() result changed to blob if tmp_table was used
470
 
#
471
 
create table t1 (f1 int, f2 varchar(255));
472
 
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
473
 
--enable_metadata
474
 
select f2,group_concat(f1) from t1 group by f2;
475
 
--disable_metadata
476
 
drop table t1;
477
 
 
478
 
#
479
 
# Bug #26815: Unexpected built-in function behavior: group_concat(distinct
480
 
# substring_index())
481
 
482
 
CREATE TABLE t1(a TEXT, b CHAR(20));
483
 
INSERT INTO t1 VALUES ("one.1","one.1"),("two.2","two.2"),("one.3","one.3");
484
 
SELECT GROUP_CONCAT(DISTINCT UCASE(a)) FROM t1;
485
 
SELECT GROUP_CONCAT(DISTINCT UCASE(b)) FROM t1;
486
 
DROP TABLE t1;
487
 
 
488
 
#
489
 
# Bug #28273: GROUP_CONCAT and ORDER BY: No warning when result gets truncated.
490
 
#
491
 
CREATE TABLE t1( a VARCHAR( 10 ), b INT );
492
 
INSERT INTO t1 VALUES ( repeat( 'a', 10 ), 1), 
493
 
                      ( repeat( 'b', 10 ), 2);
494
 
SET group_concat_max_len = 20;
495
 
SELECT GROUP_CONCAT( a ) FROM t1;
496
 
SELECT GROUP_CONCAT( DISTINCT a ) FROM t1;  
497
 
SELECT GROUP_CONCAT( a ORDER BY b ) FROM t1;          
498
 
SELECT GROUP_CONCAT( DISTINCT a ORDER BY b ) FROM t1; 
499
 
SET group_concat_max_len = DEFAULT;
500
 
DROP TABLE t1;
501
 
# Bug #23856:GROUP_CONCAT and ORDER BY: junk from previous rows for query on I_S
502
 
#
503
 
SET group_concat_max_len= 65535;
504
 
CREATE TABLE t1( a TEXT, b INTEGER );
505
 
INSERT INTO t1 VALUES ( 'a', 0 ), ( 'b', 1 );
506
 
SELECT GROUP_CONCAT( a ORDER BY b ) FROM t1;
507
 
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
508
 
SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
509
 
SET group_concat_max_len= 10;
510
 
SELECT GROUP_CONCAT(a ORDER BY b) FROM t1;
511
 
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
512
 
SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
513
 
 
514
 
SET group_concat_max_len= 65535;
515
 
CREATE TABLE t2( a TEXT );
516
 
INSERT INTO t2 VALUES( REPEAT( 'a', 5000 ) );
517
 
INSERT INTO t2 VALUES( REPEAT( 'b', 5000 ) );
518
 
INSERT INTO t2 VALUES( REPEAT( 'a', 5000 ) );
519
 
SELECT LENGTH( GROUP_CONCAT( DISTINCT a ) ) FROM t2;
520
 
 
521
 
CREATE TABLE t3( a TEXT, b INT  );
522
 
INSERT INTO t3 VALUES( REPEAT( 'a', 65534 ), 1 );
523
 
INSERT INTO t3 VALUES( REPEAT( 'a', 65535 ), 2 );
524
 
INSERT INTO t3 VALUES( REPEAT( 'a', 65533 ), 3 );
525
 
SELECT LENGTH( GROUP_CONCAT( a ) ) FROM t3 WHERE b = 1;
526
 
SELECT LENGTH( GROUP_CONCAT( a ) ) FROM t3 WHERE b = 2;
527
 
SELECT LENGTH( GROUP_CONCAT( a ) ) FROM t3 WHERE b = 3;
528
 
 
529
 
SET group_concat_max_len= DEFAULT;
530
 
DROP TABLE t1, t2, t3;
531
 
 
532
 
#
533
 
# Bug#29850: Wrong charset of the GROUP_CONCAT result when the select employs
534
 
#            a temporary table.
535
 
#
536
 
#create table t1 (id int, name varchar(20));
537
 
#insert into t1 (id, name) values (1, "�ra");
538
 
#insert into t1 (id, name) values (2, "�ra");
539
 
#select b.id, group_concat(b.name) from t1 a, t1 b group by b.id;
540
 
#drop table t1;
541
 
 
542
 
#
543
 
# Bug#30897 GROUP_CONCAT returns extra comma on empty fields
544
 
#
545
 
create table t1 (f1 char(20));
546
 
insert into t1 values (''),('');
547
 
select group_concat(distinct f1) from t1;
548
 
select group_concat(f1) from t1;
549
 
drop table t1;
550
 
# Bug#32798: DISTINCT in GROUP_CONCAT clause fails when ordering by a column
551
 
# with null values
552
 
#'
553
 
CREATE TABLE t1 (a INT, b INT);
554
 
 
555
 
INSERT INTO t1 VALUES (1, 1), (2, 2), (2, 3);
556
 
 
557
 
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
558
 
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b DESC) FROM t1;
559
 
SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
560
 
 
561
 
SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY 3 - b) FROM t1;
562
 
SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY b) FROM t1;
563
 
SELECT GROUP_CONCAT(a ORDER BY 3 - b) FROM t1;
564
 
 
565
 
CREATE TABLE t2 (a INT, b INT, c INT, d INT);
566
 
 
567
 
# There is one duplicate in the expression list: 1,10
568
 
# There is one duplicate in ORDER BY list, but that shouldnt matter: 1,10
569
 
INSERT INTO t2 VALUES (1,1, 1,1), (1,1, 2,2), (1,2, 2,1), (2,1, 1,2);
570
 
 
571
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, d) FROM t2;
572
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY d, c) FROM t2;
573
 
 
574
 
CREATE TABLE t3 (a INT, b INT, c INT);
575
 
 
576
 
INSERT INTO t3 VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1);
577
 
 
578
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, c) FROM t3;
579
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, b) FROM t3;
580
 
 
581
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a, b) FROM t1;
582
 
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
583
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, a) FROM t1;
584
 
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
585
 
SELECT GROUP_CONCAT(DISTINCT a ORDER BY a, b) FROM t1;
586
 
SELECT GROUP_CONCAT(DISTINCT b ORDER BY b, a) FROM t1;
587
 
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a) FROM t1;
588
 
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY b) FROM t1;
589
 
 
590
 
DROP TABLE t1, t2, t3;
591
 
 
592
 
#
593
 
# Bug #34747: crash in debug assertion check after derived table
594
 
#
595
 
CREATE TABLE t1(a INT);
596
 
INSERT INTO t1 VALUES (),();
597
 
SELECT s1.d1 FROM
598
 
(
599
 
 SELECT
600
 
  t1.a as d1,
601
 
  GROUP_CONCAT(DISTINCT t1.a) AS d2
602
 
 FROM
603
 
  t1 AS t1,
604
 
  t1 AS t2
605
 
 GROUP BY 1
606
 
) AS s1;
607
 
DROP TABLE t1;
608
 
 
609
 
--echo End of 5.0 tests