2000-12-28 03:56:38 +02:00
#
# Test of like
#
2003-01-06 01:48:59 +02:00
--disable_warnings
2001-09-14 02:54:33 +03:00
drop table if exists t1;
2003-01-06 01:48:59 +02:00
--enable_warnings
2000-12-28 03:56:38 +02:00
create table t1 (a varchar(10), key(a));
insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test");
2006-07-28 21:27:01 +04:00
explain extended select * from t1 where a like 'abc%';
explain extended select * from t1 where a like concat('abc','%');
2003-03-02 14:07:32 +01:00
select * from t1 where a like "abc%";
select * from t1 where a like concat("abc","%");
select * from t1 where a like "ABC%";
select * from t1 where a like "test%";
select * from t1 where a like "te_t";
2002-05-17 16:45:00 +03:00
#
2002-05-21 08:07:09 +10:00
# The following will test the Turbo Boyer-Moore code
2002-05-17 16:45:00 +03:00
#
select * from t1 where a like "%a%";
select * from t1 where a like "%abcd%";
select * from t1 where a like "%abc\d%";
2000-12-28 03:56:38 +02:00
drop table t1;
2003-08-12 16:42:52 +05:00
2004-06-22 19:27:16 +04:00
create table t1 (a varchar(10), key(a));
2003-12-30 19:23:38 +04:00
#
# Bug #2231
#
insert into t1 values ('a'), ('a\\b');
select * from t1 where a like 'a\\%' escape '#';
2004-01-08 12:24:36 +04:00
select * from t1 where a like 'a\\%' escape '#' and a like 'a\\\\b';
2004-06-22 19:27:16 +04:00
#
# Bug #4200: Prepared statement parameter as argument to ESCAPE
#
prepare stmt1 from 'select * from t1 where a like \'a\\%\' escape ?';
set @esc='#';
execute stmt1 using @esc;
deallocate prepare stmt1;
2003-12-30 19:23:38 +04:00
drop table t1;
2004-02-11 00:06:46 +01:00
2004-03-11 18:21:57 +04:00
#
# Bug #2885: like and datetime
#
create table t1 (a datetime);
insert into t1 values ('2004-03-11 12:00:21');
select * from t1 where a like '2004-03-11 12:00:21';
drop table t1;
2003-08-12 16:42:52 +05:00
#
# Test like with non-default character set
#
SET NAMES koi8r;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET koi8r);
INSERT INTO t1 VALUES ('<27> <> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> ');
INSERT INTO t1 VALUES ('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ');
INSERT INTO t1 VALUES ('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ');
INSERT INTO t1 VALUES ('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '),('<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ');
SELECT * FROM t1 WHERE a LIKE '%<25> <> <EFBFBD> <EFBFBD> %';
SELECT * FROM t1 WHERE a LIKE '%<25> <> <EFBFBD> %';
SELECT * FROM t1 WHERE a LIKE '<27> <> <EFBFBD> <EFBFBD> %';
DROP TABLE t1;
2004-02-03 18:14:23 +04:00
# Bug #2547 Strange "like" behaviour in tables with default charset=cp1250
# Test like with non-default character set using TurboBM
#
SET NAMES cp1250;
CREATE TABLE t1 (a varchar(250) NOT NULL) DEFAULT CHARACTER SET=cp1250;
INSERT INTO t1 VALUES
('Techni Tapes Sp. z o.o.'),
('Pojazdy Szynowe PESA Bydgoszcz SA Holding'),
('AKAPESTER 1 P.P.H.U.'),
('Pojazdy Szynowe PESA Bydgoszcz S A Holding'),
('PPUH PESKA-I Maria Struniarska');
select * from t1 where a like '%PESA%';
select * from t1 where a like '%PESA %';
select * from t1 where a like '%PES%';
select * from t1 where a like '%PESKA%';
select * from t1 where a like '%ESKA%';
DROP TABLE t1;
2004-08-18 12:11:26 +05:00
#
# LIKE crashed for binary collations in some cases
#
select _cp866'aaaaaaaaa' like _cp866'%aaaa%' collate cp866_bin;
2005-09-06 16:16:10 +05:00
#
# Check 8bit escape character
#
set names koi8r;
select 'andre%' like 'andre<72> %' escape '<27> ';
# Check 8bit escape character with charset conversion:
# For "a LIKE b ESCAPE c" expressions,
# escape character is converted into the operation character set,
# which is result of aggregation of character sets of "a" and "b".
# "c" itself doesn't take part in aggregation, because its collation
# doesn't matter, escape character is always compared binary.
# In the example below, escape character is converted from koi8r into cp1251:
#
select _cp1251'andre%' like convert('andre<72> %' using cp1251) escape '<27> ';
2010-06-20 02:02:58 +04:00
--echo End of 4.1 tests
--echo #
--echo # Bug #54575: crash when joining tables with unique set column
--echo #
CREATE TABLE t1(a SET('a') NOT NULL, UNIQUE KEY(a));
CREATE TABLE t2(b INT PRIMARY KEY);
INSERT INTO t1 VALUES ();
INSERT INTO t2 VALUES (1), (2), (3);
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
DROP TABLE t1, t2;
2011-01-17 12:30:22 +03:00
--echo #
--echo # Bug#59149 valgrind warnings with "like .. escape .." function
--echo #
--error ER_WRONG_ARGUMENTS
SELECT '' LIKE '1' ESCAPE COUNT(1);
2010-06-20 02:02:58 +04:00
--echo End of 5.1 tests
2013-12-17 01:38:44 +04:00
--echo #
--echo # Start of 10.0 tests
--echo #
--echo #
--echo # MDEV-5445 Server crashes in Item_func_like::fix_fields on LIKE ExtractValue(..)
--echo #
SELECT 'a' LIKE REPEAT('',0);
SELECT 'a' LIKE EXTRACTVALUE('bar','qux');