1#
2# Test of problem with CONCAT_WS() and long separators.
3#
4
5--disable_warnings
6DROP TABLE IF EXISTS t1;
7DROP PROCEDURE IF EXISTS p1;
8--enable_warnings
9
10CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
11INSERT INTO t1 VALUES (1413006,'idlfmv'),
12(1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
13
14SELECT number, alpha, CONCAT_WS('<---->',number,alpha) AS new
15FROM t1 GROUP BY number;
16
17SELECT CONCAT_WS('<---->',number,alpha) AS new
18FROM t1 GROUP BY new LIMIT 1;
19
20SELECT number, alpha, CONCAT_WS('<->',number,alpha) AS new
21FROM t1 GROUP BY new LIMIT 1;
22
23SELECT number, alpha, CONCAT_WS('-',number,alpha,alpha,alpha,alpha,alpha,alpha,alpha) AS new
24FROM t1 GROUP BY new LIMIT 1;
25
26SELECT number, alpha, CONCAT_WS('<------------------>',number,alpha) AS new
27FROM t1 GROUP BY new LIMIT 1;
28drop table t1;
29
30#
31# Bug #5540: a problem with double type
32#
33
34create table t1 (a char(4), b double, c date, d tinyint(4));
35insert into t1 values ('AAAA', 105, '2003-03-01', 1);
36select * from t1 where concat(A,C,B,D) = 'AAAA2003-03-011051';
37drop table t1;
38
39# BUG#6825
40select 'a' union select concat('a', -4);
41select 'a' union select concat('a', -4.5);
42
43select 'a' union select concat('a', -(4 + 1));
44select 'a' union select concat('a', 4 - 5);
45
46select 'a' union select concat('a', -'3');
47select 'a' union select concat('a', -concat('3',4));
48
49select 'a' union select concat('a', -0);
50--replace_result a-0.0 a0.0
51select 'a' union select concat('a', -0.0);
52
53--replace_result a-0.0000 a0.0000
54select 'a' union select concat('a', -0.0000);
55
56#
57# Bug#16716: subselect in concat() may lead to a wrong result
58#
59select concat((select x from (select 'a' as x) as t1 ),
60  (select y from (select 'b' as y) as t2 )) from (select 1 union select 2 )
61  as t3;
62
63# End of 4.1 tests
64
65#
66# Bug#15962: CONCAT() in UNION may lead to a data trucation.
67#
68create table t1(f1 varchar(6)) charset=utf8;
69insert into t1 values ("123456");
70select concat(f1, 2) a from t1 union select 'x' a from t1;
71drop table t1;
72
73#
74# Bug #36488: regexp returns false matches, concatenating with previous rows
75#
76CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
77INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
78SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
79DROP TABLE t1;
80
81--echo # End of 5.0 tests
82
83
84--echo #
85--echo # Bug #44743: Join in combination with concat does not always work
86--echo #
87CREATE TABLE t1 (
88  a VARCHAR(100) NOT NULL DEFAULT '0',
89  b VARCHAR(2) NOT NULL DEFAULT '',
90  c VARCHAR(2) NOT NULL DEFAULT '',
91  d TEXT NOT NULL,
92  PRIMARY KEY (a, b, c),
93  KEY (a)
94) DEFAULT CHARSET=utf8;
95
96INSERT INTO t1 VALUES ('gui_A', 'a', 'b', 'str1'),
97  ('gui_AB', 'a', 'b', 'str2'), ('gui_ABC', 'a', 'b', 'str3');
98
99CREATE TABLE t2 (
100  a VARCHAR(100) NOT NULL DEFAULT '',
101  PRIMARY KEY (a)
102) DEFAULT CHARSET=latin1;
103
104INSERT INTO t2 VALUES ('A'), ('AB'), ('ABC');
105
106SELECT CONCAT('gui_', t2.a), t1.d FROM t2
107  LEFT JOIN t1 ON t1.a = CONCAT('gui_', t2.a) AND t1.b = 'a' AND t1.c = 'b';
108
109EXPLAIN SELECT CONCAT('gui_', t2.a), t1.d FROM t2
110  LEFT JOIN t1 ON t1.a = CONCAT('gui_', t2.a) AND t1.b = 'a' AND t1.c = 'b';
111
112DROP TABLE t1, t2;
113
114
115--echo #
116--echo # Bug #50096: CONCAT_WS inside procedure returning wrong data
117--echo #
118
119CREATE PROCEDURE p1(a varchar(255), b int, c int)
120  SET @query = CONCAT_WS(",", a, b, c);
121
122CALL p1("abcde", "0", "1234");
123SELECT @query;
124
125DROP PROCEDURE p1;
126
127--echo #
128--echo # Bug #40625: Concat fails on DOUBLE values in a Stored Procedure,
129--echo #             while DECIMAL works
130--echo #
131
132DELIMITER //;
133CREATE PROCEDURE p1()
134BEGIN
135  DECLARE v1 DOUBLE(10,3);
136  SET v1= 100;
137  SET @s = CONCAT('########################################', 40 , v1);
138  SELECT @s;
139END;//
140DELIMITER ;//
141
142CALL p1();
143CALL p1();
144
145DROP PROCEDURE p1;
146
147--echo # End of 5.1 tests
148
149
150--echo #
151--echo # Start of 10.0 tests
152--echo #
153
154--echo #
155--echo # MDEV-10306 Wrong results with combination of CONCAT, SUBSTR and CONVERT in subquery
156--echo #
157
158SET @save_optimizer_switch=@@optimizer_switch;
159SET optimizer_switch='derived_merge=on';
160
161CREATE TABLE t1 (t VARCHAR(10) CHARSET latin1);
162INSERT INTO t1 VALUES('1234567');
163SELECT CONCAT(SUBSTR(t2, 1, 3), SUBSTR(t2, 5)) c1,
164       CONCAT(SUBSTR(t2,1,3),'---',SUBSTR(t2,5)) c2
165   FROM (SELECT CONVERT(t USING latin1) t2 FROM t1) sub;
166SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT CONVERT(t USING latin1) t2 FROM t1) sub;
167DROP TABLE t1;
168
169# Other functions affected by MDEV-10306
170
171CREATE TABLE t1 (t VARCHAR(10) CHARSET latin1);
172INSERT INTO t1 VALUES('1234567');
173SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT CONVERT(t USING latin1) t2 FROM t1) sub;
174SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT REVERSE(t) t2 FROM t1) sub;
175SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT SOUNDEX(t) t2 FROM t1) sub;
176SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT TO_BASE64(t) t2 FROM t1) sub;
177SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT WEIGHT_STRING(t) t2 FROM t1) sub;
178SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT HEX(t) t2 FROM t1) sub;
179SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT QUOTE(t) t2 FROM t1) sub;
180DROP TABLE t1;
181
182CREATE TABLE t1 (t VARCHAR(32) CHARSET latin1);
183INSERT INTO t1 VALUES(TO_BASE64('abcdefghi'));
184SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT FROM_BASE64(t) t2 FROM t1) sub;
185DROP TABLE t1;
186
187CREATE TABLE t1 (t VARCHAR(32) CHARSET latin1);
188INSERT INTO t1 VALUES(HEX('abcdefghi'));
189SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT UNHEX(t) t2 FROM t1) sub;
190DROP TABLE t1;
191
192CREATE TABLE t1 (t VARCHAR(30) CHARSET latin1);
193INSERT INTO t1 VALUES('test');
194SELECT LENGTH(CONCAT(t2)) c2 FROM (SELECT AES_ENCRYPT(t,'x') t2 FROM t1) sub;
195SELECT LENGTH(CONCAT(t2,'-',t2)) c2 FROM (SELECT AES_ENCRYPT(t,'x') t2 FROM t1) sub;
196SELECT LENGTH(CONCAT(t2,'--',t2)) c2 FROM (SELECT AES_ENCRYPT(t,'x') t2 FROM t1) sub;
197SELECT LENGTH(CONCAT(t2)) c2 FROM (SELECT AES_DECRYPT(AES_ENCRYPT(t,'x'),'x') t2 FROM t1) sub;
198SELECT LENGTH(CONCAT(t2,'-',t2)) c2 FROM (SELECT AES_DECRYPT(AES_ENCRYPT(t,'x'),'x') t2 FROM t1) sub;
199SELECT LENGTH(CONCAT(t2,'--',t2)) c2 FROM (SELECT AES_DECRYPT(AES_ENCRYPT(t,'x'),'x') t2 FROM t1) sub;
200DROP TABLE t1;
201
202
203# Functions not affected by MDEV-10306
204# They only had an unused tmp_value, which was removed.
205
206CREATE TABLE t1 (t VARCHAR(64) CHARSET latin1);
207INSERT INTO t1 VALUES('123456789');
208SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT MD5(t) t2 FROM t1) sub;
209SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT FORMAT(t,2) t2 FROM t1) sub;
210DROP TABLE t1;
211
212# Functions not affected by MDEV-10306
213# They already use tmp_value only for internal purposes and
214# return the result in the String passed to val_str()
215
216CREATE TABLE t1 (t VARCHAR(32) CHARSET latin1);
217INSERT INTO t1 VALUES('abcdefghi');
218SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT INSERT(t,3,4,'xxx') t2 FROM t1) sub;
219DROP TABLE t1;
220
221
222# Functions not affected by MDEV-10306
223# They use this code style:
224#   String *res= args[0]->val_str(str);
225#   tmp_value.set(*res, start, end);
226#   return &tmp_value;
227
228CREATE TABLE t1 (t VARCHAR(10) CHARSET latin1);
229INSERT INTO t1 VALUES('abcdefghi');
230SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT LEFT(t,10) t2 FROM t1) sub;
231SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT RIGHT(t,10) t2 FROM t1) sub;
232SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT SUBSTR(t,1,10) t2 FROM t1) sub;
233SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT LTRIM(t) t2 FROM t1) sub;
234SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT RTRIM(t) t2 FROM t1) sub;
235SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT TRIM(t) t2 FROM t1) sub;
236DROP TABLE t1;
237
238SET optimizer_switch=@save_optimizer_switch;
239
240--echo #
241--echo # MDEV-13790 UNHEX() of a somewhat complicated CONCAT() returns NULL
242--echo #
243
244SELECT UNHEX(CONCAT('414C2', HEX(8 + ROUND(RAND()*7)), SUBSTR(SHA(UUID()),6,33),HEX(2+ROUND(RAND()*8)))) IS NULL AS c1;
245
246
247--echo #
248--echo # MDEV-13119 Wrong results with CAST(AS CHAR) and subquery
249--echo #
250
251SET optimizer_switch=_utf8'derived_merge=on';
252CREATE TABLE t1 (t VARCHAR(10) CHARSET latin1);
253INSERT INTO t1 VALUES('abcdefghi');
254SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT CAST(t AS CHAR CHARACTER SET utf8) t2 FROM t1) sub;
255DROP TABLE t1;
256SET optimizer_switch=@save_optimizer_switch;
257
258
259--echo #
260--echo # MDEV-13120 Wrong results with MAKE_SET() and subquery
261--echo #
262
263CREATE TABLE t1 (t VARCHAR(10) CHARSET latin1);
264INSERT INTO t1 VALUES('abcdefghi');
265SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT MAKE_SET(3,t,t) t2 FROM t1) sub;
266DROP TABLE t1;
267