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