mirror of
https://github.com/MariaDB/server.git
synced 2025-01-28 17:54:16 +01:00
MDEV-7149 Constant propagation erroneously applied for LIKE
Simply disallowing equality propagation into LIKE. A more delicate fix is be possible, but it would need too many changes, which is not desirable in 10.0 at this point.
This commit is contained in:
parent
74e581b7c4
commit
f8e1952be4
13 changed files with 1110 additions and 1 deletions
39
mysql-test/include/ctype_like_cond_propagation.inc
Normal file
39
mysql-test/include/ctype_like_cond_propagation.inc
Normal file
|
@ -0,0 +1,39 @@
|
|||
--echo #
|
||||
--echo # MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
DROP TABLE t1;
|
|
@ -0,0 +1,16 @@
|
|||
--echo #
|
||||
--echo # MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('ae'),('ä');
|
||||
SELECT * FROM t1 WHERE c1='ä';
|
||||
SELECT * FROM t1 WHERE c1 LIKE 'ae';
|
||||
SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä';
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
DROP TABLE IF EXISTS t1;
|
|
@ -2915,3 +2915,98 @@ SET sql_mode=default;
|
|||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
SET NAMES binary;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ('%' = concat(`test`.`t1`.`c1`))
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
|
|
@ -7659,6 +7659,198 @@ DROP FUNCTION mysql_real_escape_string_generated;
|
|||
DROP FUNCTION iswellformed;
|
||||
DROP TABLE allbytes;
|
||||
# End of ctype_backslash.inc
|
||||
SET NAMES latin1;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
SET NAMES latin1 COLLATE latin1_bin;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
|
||||
#
|
||||
|
|
|
@ -7700,6 +7700,276 @@ DROP TABLE t1;
|
|||
# Start of MariaDB-10.0 tests
|
||||
#
|
||||
|
||||
SET NAMES utf8 COLLATE utf8_unicode_ci;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('ae'),('ä');
|
||||
SELECT * FROM t1 WHERE c1='ä';
|
||||
c1
|
||||
ä
|
||||
SELECT * FROM t1 WHERE c1 LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä';
|
||||
c1
|
||||
ä
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
|
||||
DROP TABLE IF EXISTS t1;
|
||||
SET NAMES utf8 COLLATE utf8_german2_ci;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('ae'),('ä');
|
||||
SELECT * FROM t1 WHERE c1='ä';
|
||||
c1
|
||||
ae
|
||||
ä
|
||||
SELECT * FROM t1 WHERE c1 LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä';
|
||||
c1
|
||||
ae
|
||||
ä
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
|
||||
DROP TABLE IF EXISTS t1;
|
||||
#
|
||||
# MDEV-4929 Myanmar collation
|
||||
#
|
||||
|
|
|
@ -5326,6 +5326,199 @@ DROP TABLE t1;
|
|||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
SET NAMES latin1, collation_connection=ucs2_bin;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
SET NAMES latin1, collation_connection=ucs2_general_ci;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
SET NAMES latin1;
|
||||
#
|
||||
# MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
#
|
||||
|
|
|
@ -5936,6 +5936,235 @@ set max_sort_length=default;
|
|||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
SET NAMES utf8 COLLATE utf8_bin;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
SET NAMES utf8;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a';
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('a'),('a ');
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
c1
|
||||
a
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('%'),('% ');
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
%
|
||||
SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
c1
|
||||
%
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-7149 Constant condition propagation erroneously applied for LIKE
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES ('ae'),('ä');
|
||||
SELECT * FROM t1 WHERE c1='ä';
|
||||
c1
|
||||
ä
|
||||
SELECT * FROM t1 WHERE c1 LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä';
|
||||
c1
|
||||
ä
|
||||
SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
ae
|
||||
SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
c1
|
||||
EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
|
||||
DROP TABLE IF EXISTS t1;
|
||||
#
|
||||
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
#
|
||||
|
|
|
@ -10,3 +10,15 @@ set names binary;
|
|||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
SET NAMES binary;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
|
|
@ -210,6 +210,13 @@ set names latin1;
|
|||
let $ctype_unescape_combinations=selected;
|
||||
--source include/ctype_unescape.inc
|
||||
|
||||
SET NAMES latin1;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
|
||||
SET NAMES latin1 COLLATE latin1_bin;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
|
||||
--echo #
|
||||
|
|
|
@ -571,6 +571,14 @@ SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
|||
--echo #
|
||||
--echo
|
||||
|
||||
SET NAMES utf8 COLLATE utf8_unicode_ci;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
--source include/ctype_like_cond_propagation_utf8_german.inc
|
||||
|
||||
SET NAMES utf8 COLLATE utf8_german2_ci;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
--source include/ctype_like_cond_propagation_utf8_german.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-4929 Myanmar collation
|
||||
--echo #
|
||||
|
|
|
@ -897,6 +897,12 @@ DROP TABLE t1;
|
|||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
SET NAMES latin1, collation_connection=ucs2_bin;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
SET NAMES latin1, collation_connection=ucs2_general_ci;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
SET NAMES latin1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
--echo #
|
||||
|
|
|
@ -1658,6 +1658,13 @@ set max_sort_length=default;
|
|||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8 COLLATE utf8_bin;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
SET NAMES utf8;
|
||||
--source include/ctype_like_cond_propagation.inc
|
||||
--source include/ctype_like_cond_propagation_utf8_german.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
--echo #
|
||||
|
|
|
@ -1486,7 +1486,42 @@ public:
|
|||
longlong val_int();
|
||||
enum Functype functype() const { return LIKE_FUNC; }
|
||||
optimize_type select_optimize() const;
|
||||
cond_result eq_cmp_result() const { return COND_TRUE; }
|
||||
cond_result eq_cmp_result() const
|
||||
{
|
||||
/**
|
||||
We cannot always rewrite conditions as follows:
|
||||
from: WHERE expr1=const AND expr1 LIKE expr2
|
||||
to: WHERE expr1=const AND const LIKE expr2
|
||||
or
|
||||
from: WHERE expr1=const AND expr2 LIKE expr1
|
||||
to: WHERE expr1=const AND expr2 LIKE const
|
||||
|
||||
because LIKE works differently comparing to the regular "=" operator:
|
||||
|
||||
1. LIKE performs a stricter one-character-to-one-character comparison
|
||||
and does not recognize contractions and expansions.
|
||||
Replacing "expr1" to "const in LIKE would make the condition
|
||||
stricter in case of a complex collation.
|
||||
|
||||
2. LIKE does not ignore trailing spaces and thus works differently
|
||||
from the "=" operator in case of "PAD SPACE" collations
|
||||
(which are the majority in MariaDB). So, for "PAD SPACE" collations:
|
||||
|
||||
- expr1=const - ignores trailing spaces
|
||||
- const LIKE expr2 - does not ignore trailing spaces
|
||||
- expr2 LIKE const - does not ignore trailing spaces
|
||||
|
||||
Allow only "binary" for now.
|
||||
It neither ignores trailing spaces nor has contractions/expansions.
|
||||
|
||||
TODO:
|
||||
We could still replace "expr1" to "const" in "expr1 LIKE expr2"
|
||||
in case of a "PAD SPACE" collation, but only if "expr2" has '%'
|
||||
at the end.
|
||||
*/
|
||||
return ((Item_func_like *)this)->compare_collation() == &my_charset_bin ?
|
||||
COND_TRUE : COND_OK;
|
||||
}
|
||||
const char *func_name() const { return "like"; }
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void cleanup();
|
||||
|
|
Loading…
Add table
Reference in a new issue