mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
985df4dcdc
bug#44766: valgrind error when using convert() in a subquery Problem: input and output buffers may be the same converting a string to some charset. That may lead to wrong results/valgrind warnings. Fix: use different buffers. mysql-test/r/cast.result: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - test result. mysql-test/r/func_concat.result: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - test result. mysql-test/t/cast.test: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - test case. mysql-test/t/func_concat.test: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - test case. sql/item.cc: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - comment added. sql/item_strfunc.cc: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - '&args[0]->str_value' used as a parameter of args[0]->val_str(), as 'str' may be equal to 'str_value' which we use as the output buffer converting strings. sql/sql_string.cc: Fix for bug#44743: Join in combination with concat does not always work bug#44766: valgrind error when using convert() in a subquery - input and output buffers must NOT be the same.
114 lines
3 KiB
Text
114 lines
3 KiB
Text
#
|
|
# Test of problem with CONCAT_WS() and long separators.
|
|
#
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
|
|
INSERT INTO t1 VALUES (1413006,'idlfmv'),
|
|
(1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
|
|
|
|
SELECT number, alpha, CONCAT_WS('<---->',number,alpha) AS new
|
|
FROM t1 GROUP BY number;
|
|
|
|
SELECT CONCAT_WS('<---->',number,alpha) AS new
|
|
FROM t1 GROUP BY new LIMIT 1;
|
|
|
|
SELECT number, alpha, CONCAT_WS('<->',number,alpha) AS new
|
|
FROM t1 GROUP BY new LIMIT 1;
|
|
|
|
SELECT number, alpha, CONCAT_WS('-',number,alpha,alpha,alpha,alpha,alpha,alpha,alpha) AS new
|
|
FROM t1 GROUP BY new LIMIT 1;
|
|
|
|
SELECT number, alpha, CONCAT_WS('<------------------>',number,alpha) AS new
|
|
FROM t1 GROUP BY new LIMIT 1;
|
|
drop table t1;
|
|
|
|
#
|
|
# Bug #5540: a problem with double type
|
|
#
|
|
|
|
create table t1 (a char(4), b double, c date, d tinyint(4));
|
|
insert into t1 values ('AAAA', 105, '2003-03-01', 1);
|
|
select * from t1 where concat(A,C,B,D) = 'AAAA2003-03-011051';
|
|
drop table t1;
|
|
|
|
# BUG#6825
|
|
select 'a' union select concat('a', -4);
|
|
select 'a' union select concat('a', -4.5);
|
|
|
|
select 'a' union select concat('a', -(4 + 1));
|
|
select 'a' union select concat('a', 4 - 5);
|
|
|
|
select 'a' union select concat('a', -'3');
|
|
select 'a' union select concat('a', -concat('3',4));
|
|
|
|
select 'a' union select concat('a', -0);
|
|
--replace_result a-0.0 a0.0
|
|
select 'a' union select concat('a', -0.0);
|
|
|
|
--replace_result a-0.0000 a0.0000
|
|
select 'a' union select concat('a', -0.0000);
|
|
|
|
#
|
|
# Bug#16716: subselect in concat() may lead to a wrong result
|
|
#
|
|
select concat((select x from (select 'a' as x) as t1 ),
|
|
(select y from (select 'b' as y) as t2 )) from (select 1 union select 2 )
|
|
as t3;
|
|
|
|
# End of 4.1 tests
|
|
|
|
#
|
|
# Bug#15962: CONCAT() in UNION may lead to a data trucation.
|
|
#
|
|
create table t1(f1 varchar(6)) charset=utf8;
|
|
insert into t1 values ("123456");
|
|
select concat(f1, 2) a from t1 union select 'x' a from t1;
|
|
drop table t1;
|
|
|
|
#
|
|
# Bug #36488: regexp returns false matches, concatenating with previous rows
|
|
#
|
|
CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
|
|
INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
|
|
SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
|
|
DROP TABLE t1;
|
|
|
|
--echo # End of 5.0 tests
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #44743: Join in combination with concat does not always work
|
|
--echo #
|
|
CREATE TABLE t1 (
|
|
a VARCHAR(100) NOT NULL DEFAULT '0',
|
|
b VARCHAR(2) NOT NULL DEFAULT '',
|
|
c VARCHAR(2) NOT NULL DEFAULT '',
|
|
d TEXT NOT NULL,
|
|
PRIMARY KEY (a, b, c),
|
|
KEY (a)
|
|
) DEFAULT CHARSET=utf8;
|
|
|
|
INSERT INTO t1 VALUES ('gui_A', 'a', 'b', 'str1'),
|
|
('gui_AB', 'a', 'b', 'str2'), ('gui_ABC', 'a', 'b', 'str3');
|
|
|
|
CREATE TABLE t2 (
|
|
a VARCHAR(100) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (a)
|
|
) DEFAULT CHARSET=latin1;
|
|
|
|
INSERT INTO t2 VALUES ('A'), ('AB'), ('ABC');
|
|
|
|
SELECT CONCAT('gui_', t2.a), t1.d FROM t2
|
|
LEFT JOIN t1 ON t1.a = CONCAT('gui_', t2.a) AND t1.b = 'a' AND t1.c = 'b';
|
|
|
|
EXPLAIN SELECT CONCAT('gui_', t2.a), t1.d FROM t2
|
|
LEFT JOIN t1 ON t1.a = CONCAT('gui_', t2.a) AND t1.b = 'a' AND t1.c = 'b';
|
|
|
|
DROP TABLE t1, t2;
|
|
|
|
|
|
--echo # End of 5.1 tests
|