mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 02:30:06 +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
|
# 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 FUNCTION iswellformed;
|
||||||
DROP TABLE allbytes;
|
DROP TABLE allbytes;
|
||||||
# End of ctype_backslash.inc
|
# 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
|
# 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
|
# 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
|
# MDEV-4929 Myanmar collation
|
||||||
#
|
#
|
||||||
|
|
|
@ -5326,6 +5326,199 @@ DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Start of 10.0 tests
|
# 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
|
# 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
|
# 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)
|
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||||
#
|
#
|
||||||
|
|
|
@ -10,3 +10,15 @@ set names binary;
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
--echo #
|
--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;
|
let $ctype_unescape_combinations=selected;
|
||||||
--source include/ctype_unescape.inc
|
--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 #
|
||||||
--echo # MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
|
--echo # MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
|
||||||
--echo #
|
--echo #
|
||||||
|
|
|
@ -571,6 +571,14 @@ SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
||||||
--echo #
|
--echo #
|
||||||
--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 #
|
||||||
--echo # MDEV-4929 Myanmar collation
|
--echo # MDEV-4929 Myanmar collation
|
||||||
--echo #
|
--echo #
|
||||||
|
|
|
@ -897,6 +897,12 @@ DROP TABLE t1;
|
||||||
--echo # Start of 10.0 tests
|
--echo # Start of 10.0 tests
|
||||||
--echo #
|
--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 #
|
||||||
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||||
--echo #
|
--echo #
|
||||||
|
|
|
@ -1658,6 +1658,13 @@ set max_sort_length=default;
|
||||||
--echo # Start of 10.0 tests
|
--echo # Start of 10.0 tests
|
||||||
--echo #
|
--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 #
|
||||||
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||||
--echo #
|
--echo #
|
||||||
|
|
|
@ -1486,7 +1486,42 @@ public:
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
enum Functype functype() const { return LIKE_FUNC; }
|
enum Functype functype() const { return LIKE_FUNC; }
|
||||||
optimize_type select_optimize() const;
|
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"; }
|
const char *func_name() const { return "like"; }
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
Loading…
Add table
Reference in a new issue