--disable_query_log
set @@session.explicit_defaults_for_timestamp=off;
--enable_query_log
--disable_warnings
drop table if exists t1;
--enable_warnings
##
#--real_sleep 10
create table t1 (a varchar(10) primary key, b int default 0);
#--real_sleep 10
insert into t1 (a) values ('a'),('abc'),('abcd'),('hello'),('test');
--error 5813
select * from t1 where a regexp 'a(';
--error 5813
select * from t1 where a regexp 'a(b';
--error 5820
select * from t1 where a regexp '*';
--error 5820
select * from t1 where a regexp '+';
--error 5820
select * from t1 where a regexp '?';
--error 5820
select * from t1 where a regexp '(*a)';
--error 5820
select * from t1 where a regexp '(+a)';
--error 5824
select * from t1 where a regexp '(?a)';
--error 5820
select * from t1 where a regexp '({1}a)';
--error 5820
select * from t1 where a regexp '(a|*b)';
--error 5820
select * from t1 where a regexp '(a|+b)';
--error 5820
select * from t1 where a regexp '(a|?b)';
--error 5820
select * from t1 where a regexp '(a|{1}b)';
--error 5820
select * from t1 where a regexp '^*';
--error 5820
select * from t1 where a regexp '^+';
--error 5820
select * from t1 where a regexp '^?';
--error 5820
select * from t1 where a regexp '^{1}';
--error 5820
select * from t1 where a regexp '{1';
--error 5820
select * from t1 where a regexp '{1}';
--error 5818
select * from t1 where a regexp 'a{1';
--error 5819
select * from t1 where a regexp 'a{1a';
--error 5819
select * from t1 where a regexp 'a{1a}';
--error 5819
select * from t1 where a regexp 'a{1,x}';
--error 5819
select * from t1 where a regexp 'a{1,x';
--error 5819
select * from t1 where a regexp 'a{300}';
--error 5819
select * from t1 where a regexp 'a{1,0}';
--error 5820
select * from t1 where a regexp 'a++';
--error 5820
select * from t1 where a regexp 'a*+';
--error 5820
select * from t1 where a regexp 'a+*';
--error 5820
select * from t1 where a regexp 'a?*';
--error 5820
select * from t1 where a regexp 'a?+';
--error 5820
select * from t1 where a regexp 'a{1}{1}';
--error 5820
select * from t1 where a regexp 'a*{1}';
--error 5820
select * from t1 where a regexp 'a+{1}';
--error 5820
select * from t1 where a regexp 'a?{1}';
--error 5820
select * from t1 where a regexp 'a{1}*';
--error 5820
select * from t1 where a regexp 'a{1}+';
drop table t1;
--disable_warnings
drop table if exists t1;
--enable_warnings
#--real_sleep 10
create table t1 (a datetime primary key);
#--real_sleep 10
insert into t1 values ('2004-03-11 12:00:21');
select * from t1 where a regexp '2004-03-11 12:00:21';
select * from t1 where a regexp '2004-03-11 ';
drop table t1;
# A case
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1(id int primary key, name varchar(100));
insert into t1 values(1, 'hello');
insert into t1 values(2, 'hell');
insert into t1 values(3, 'hel');
insert into t1 values(4, 'hello1');
insert into t1 values(5, 'hell1');
insert into t1 values(6, 'hel1');
insert into t1 values(7, 'hel\n1');
insert into t1 values(8, 'he\bl1');
insert into t1 values(9, 'hel\t1');
insert into t1 values(10, 'hel\r\n1o');
insert into t1 values(11, '111
Hello World 222');
insert into t1 values (138, 'abc');
insert into t1 values (139, 'abc');
insert into t1 values (142, 'abc');
insert into t1 values (146, 'a(');
insert into t1 values (152, 'a)');
insert into t1 values (153, ')');
insert into t1 values (158, 'ab');
insert into t1 values (163, 'a^b');
insert into t1 values (165, 'a$b');
insert into t1 values (170, '""');
insert into t1 values (173, '""');
insert into t1 values (174, '""');
insert into t1 values (192, 'b');
insert into t1 values (203, 'abc');
insert into t1 values (272, 'abc');
insert into t1 values (273, 'abc');
insert into t1 values (287, 'ab');
insert into t1 values (289, 'ab');
insert into t1 values (291, 'aab');
insert into t1 values (299, 'a{,2}');
insert into t1 values (301, 'a{,}');
insert into t1 values (311, 'abcac');
insert into t1 values (313, 'abcac');
insert into t1 values (315, 'abbcac');
insert into t1 values (317, 'acabc');
insert into t1 values (319, 'acabc');
insert into t1 values (321, 'abcabbc');
insert into t1 values (323, 'abcabbc');
insert into t1 values (325, 'a');
insert into t1 values (344, 'a{b}');
insert into t1 values (384, '-%@a?X-');
insert into t1 values (385, '-%@aX0-');
insert into t1 values (386, 'aSSTb');
insert into t1 values (387, 'aNTb');
insert into t1 values (388, 'a019b');
insert into t1 values (389, 'Sa%bS');
insert into t1 values (390, 'AabC');
insert into t1 values (391, 'NaSbN');
insert into t1 values (392, 'S%-&T');
insert into t1 values (393, 'aSNTb');
insert into t1 values (394, 'aBCd');
insert into t1 values (395, 'p0f3Cq');
insert into t1 values (405, 'abc');
insert into t1 values (406, 'abd');
insert into t1 values (407, 'abbd');
insert into t1 values (409, 'aaaaabaaaabaaaabaaaab');
insert into t1 values (411, 'aaaaabaaaabaaaabaaaab');
insert into t1 values (413, 'aaaaabaaaabaaaabaaaabweeknights');
insert into t1 values (415, 'a12345678901234567890123456789b');
insert into t1 values (416, 'a123456789012345678901234567890b');
insert into t1 values (417, 'a1234567890123456789012345678901b');
insert into t1 values (418, 'a12345678901234567890123456789012b');
insert into t1 values (419, 'a123456789012345678901234567890123b');
insert into t1 values (421, 'a1234567890123456789012345678901234567890123456789012345678901234567890b');
insert into t1 values (423, 'xacegikmoq');
insert into t1 values (424, 'xacegikmoq');
insert into t1 values (425, 'xacegikmoqy');
insert into t1 values (426, 'xacegikmoqy');
insert into t1 values (438, 'abc');
insert into t1 values (439, 'aba');
insert into t1 values (440, 'abc');
insert into t1 values (441, 'abd');
insert into t1 values (442, 'accd');
insert into t1 values (443, 'weeknights');
insert into t1 values (444, 'weeknights');
insert into t1 values (445, 'xyzaaabcaababdacd');
insert into t1 values (446, 'aaabc');
insert into t1 values (452, '/*x*/');
insert into t1 values (454, '/*x*/y/*z*/');
insert into t1 values (456, '/*x*/');
insert into t1 values (457, '/*x*/y/*z*/');
insert into t1 values (459, '/*x**/y/*z*/');
insert into t1 values (461, '/*x*/');
insert into t1 values (462, '/*x*/y/*z*/');
insert into t1 values (463, '/*x**/y/*z*/');
insert into t1 values (464, '/*x****/y/*z*/');
insert into t1 values (465, '/*x**x*/y/*z*/');
insert into t1 values (466, '/*x***x/y/*z*/');
insert into t1 values (469, 'abcd');
insert into t1 values (470, 'abc');
insert into t1 values (471, 'abd');
insert into t1 values (472, 'abbd');
insert into t1 values (473, 'acd');
insert into t1 values (474, 'ad');
insert into t1 values (475, 'abc');
insert into t1 values (476, 'ac');
insert into t1 values (477, 'abc');
insert into t1 values (478, 'abbbc');
insert into t1 values (479, 'ac');
insert into t1 values (480, 'abcdef');
insert into t1 values (482, 'abcdefghijk');
insert into t1 values (483, 'abcdefghijkl');
insert into t1 values (484, 'abc');
insert into t1 values (485, 'ac');
insert into t1 values (486, 'abc');
insert into t1 values (487, 'abcc');
insert into t1 values (488, 'abcbc');
insert into t1 values (489, 'abb');
insert into t1 values (490, 'abb');
insert into t1 values (491, 'abbb');
insert into t1 values (492, 'abbb');
insert into t1 values (493, 'abcdef');
insert into t1 values (494, 'bc');
insert into t1 values (497, 'ad');
insert into t1 values (498, 'abcd');
insert into t1 values (499, 'abd');
insert into t1 values (500, 'abcd');
insert into t1 values (501, 'ad');
insert into t1 values (502, 'abcd');
insert into t1 values (503, 'ad');
insert into t1 values (504, 'ad');
insert into t1 values (505, 'abd');
insert into t1 values (506, 'ad');
insert into t1 values (507, 'abcd');
insert into t1 values (508, 'ad');
insert into t1 values (509, 'abcd');
insert into t1 values (510, 'abd');
insert into t1 values (511, 'acd');
insert into t1 values (512, 'abd');
insert into t1 values (513, 'abcd');
insert into t1 values (514, 'abd');
insert into t1 values (515, 'abcd');
insert into t1 values (516, 'acbd');
insert into t1 values (517, 'abcd');
insert into t1 values (518, 'abcd');
insert into t1 values (519, 'abcbd');
insert into t1 values (520, 'abcbcd');
insert into t1 values (521, 'abcd');
insert into t1 values (522, 'abcbd');
insert into t1 values (523, 'abd');
insert into t1 values (524, 'abcd');
insert into t1 values (567, 'A1');
insert into t1 values (571, 'CC11');
insert into t1 values (573, 'ab');
select * from t1 where name rlike '.*h.*';
select * from t1 where name rlike '.*hel.*';
select * from t1 where name rlike '.*hell.*';
select * from t1 where name regexp '.*hello.*';
select * from t1 where name regexp '^h.*';
select * from t1 where name rlike null;
select * from t1 where name regexp 'abc|de';
select * from t1 where name regexp 'a|b|c';
select * from t1 where name regexp 'a(b)c';
select * from t1 where name regexp 'a\\(';
select * from t1 where name regexp 'a()b';
select * from t1 where name regexp 'a^b';
select * from t1 where name regexp 'a$b';
select * from t1 where name regexp '$^';
select * from t1 where name regexp '^^';
select * from t1 where name regexp '$$';
select * from t1 where name regexp 'a*(^b$)c*';
select * from t1 where name regexp '()';
select * from t1 where name regexp 'ab+c';
select * from t1 where name regexp 'ab?c';
select * from t1 where name regexp 'a{1}b';
select * from t1 where name regexp 'a{1,}b';
select * from t1 where name regexp 'a{1,2}b';
select * from t1 where name regexp 'a{,2}';
select * from t1 where name regexp 'a{,}';
select * from t1 where name regexp 'ab{0,0}c';
select * from t1 where name regexp 'ab{0,1}c';
select * from t1 where name regexp 'ab{0,3}c';
select * from t1 where name regexp 'ab{1,1}c';
select * from t1 where name regexp 'ab{1,3}c';
select * from t1 where name regexp 'ab{2,2}c';
select * from t1 where name regexp 'ab{2,4}c';
select * from t1 where name regexp '((a{1,10}){1,10}){1,10}';
select * from t1 where name regexp 'a*{b}';
select * from t1 where name regexp '[[:alnum:]]+';
select * from t1 where name regexp '[[:alpha:]]+';
select * from t1 where name regexp '[[:blank:]]+';
select * from t1 where name regexp '[[:cntrl:]]+';
select * from t1 where name regexp '[[:digit:]]+';
select * from t1 where name regexp '[[:graph:]]+';
select * from t1 where name regexp '[[:lower:]]+';
select * from t1 where name regexp '[[:print:]]+';
select * from t1 where name regexp '[[:punct:]]+';
select * from t1 where name regexp '[[:space:]]+';
select * from t1 where name regexp '[[:upper:]]+';
select * from t1 where name regexp '[[:xdigit:]]+';
select * from t1 where name regexp 'a(((b)))c';
select * from t1 where name regexp 'a(b|(c))d';
select * from t1 where name regexp 'a(b*|c)d';
select * from t1 where name regexp 'a[ab]{20}';
select * from t1 where name regexp 'a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]';
select * from t1 where name regexp 'a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night)';
select * from t1 where name regexp '12345678901234567890123456789';
select * from t1 where name regexp '123456789012345678901234567890';
select * from t1 where name regexp '1234567890123456789012345678901';
select * from t1 where name regexp '12345678901234567890123456789012';
select * from t1 where name regexp '123456789012345678901234567890123';
select * from t1 where name regexp '1234567890123456789012345678901234567890123456789012345678901234567890';
select * from t1 where name regexp '[ab][cd][ef][gh][ij][kl][mn]';
select * from t1 where name regexp '[ab][cd][ef][gh][ij][kl][mn][op]';
select * from t1 where name regexp '[ab][cd][ef][gh][ij][kl][mn][op][qr]';
select * from t1 where name regexp '[ab][cd][ef][gh][ij][kl][mn][op][q]';
select * from t1 where name regexp '[a]b[c]';
select * from t1 where name regexp '[a]b[a]';
select * from t1 where name regexp '[abc]b[abc]';
select * from t1 where name regexp '[abc]b[abd]';
select * from t1 where name regexp 'a(b?c)+d';
select * from t1 where name regexp '(wee|week)(knights|night)';
select * from t1 where name regexp '(we|wee|week|frob)(knights|night|day)';
select * from t1 where name regexp 'a[bc]d';
select * from t1 where name regexp 'a[ab]c';
select * from t1 where name regexp null;
select * from t1 where name regexp '/\\*.*\\*/';
select * from t1 where name regexp '/\\*.*\\*/';
select * from t1 where name regexp '/\\*([^*]|\\*[^/])*\\*/';
select * from t1 where name regexp '/\\*([^*]|\\*[^/])*\\*/';
select * from t1 where name regexp '/\\*([^*]|\\*[^/])*\\*/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp '/\\*([^*]|\\*+[^*/])*\\*+/';
select * from t1 where name regexp 'a(b)(c)d';
select * from t1 where name regexp 'a(((b)))c';
select * from t1 where name regexp 'a(b|(c))d';
select * from t1 where name regexp 'a(b*|c|e)d';
select * from t1 where name regexp 'a(b*|c|e)d';
select * from t1 where name regexp 'a(b*|c|e)d';
select * from t1 where name regexp 'a(b?)c';
select * from t1 where name regexp 'a(b?)c';
select * from t1 where name regexp 'a(b+)c';
select * from t1 where name regexp 'a(b+)c';
select * from t1 where name regexp 'a(b*)c';
select * from t1 where name regexp '(a|ab)(bc([de]+)f|cde)';
select * from t1 where name regexp 'a(b)(c)(d)(e)(f)(g)(h)(i)(j)k';
select * from t1 where name regexp 'a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l';
select * from t1 where name regexp 'a([bc]?)c';
select * from t1 where name regexp 'a([bc]?)c';
select * from t1 where name regexp 'a([bc]+)c';
select * from t1 where name regexp 'a([bc]+)c';
select * from t1 where name regexp 'a([bc]+)bc';
select * from t1 where name regexp 'a(bb+|b)b';
select * from t1 where name regexp 'a(bbb+|bb+|b)b';
select * from t1 where name regexp 'a(bbb+|bb+|b)b';
select * from t1 where name regexp 'a(bbb+|bb+|b)bb';
select * from t1 where name regexp '(.*).*';
select * from t1 where name regexp '(a*)*';
select * from t1 where name regexp 'a(b|c)*d';
select * from t1 where name regexp 'a(b|c)*d';
select * from t1 where name regexp 'a(b|c)+d';
select * from t1 where name regexp 'a(b|c)+d';
select * from t1 where name regexp 'a(b|c?)+d';
select * from t1 where name regexp 'a(b|c?)+d';
select * from t1 where name regexp 'a(b|c){0,0}d';
select * from t1 where name regexp 'a(b|c){0,1}d';
select * from t1 where name regexp 'a(b|c){0,1}d';
select * from t1 where name regexp 'a(b|c){0,2}d';
select * from t1 where name regexp 'a(b|c){0,2}d';
select * from t1 where name regexp 'a(b|c){0,}d';
select * from t1 where name regexp 'a(b|c){0,}d';
select * from t1 where name regexp 'a(b|c){1,1}d';
select * from t1 where name regexp 'a(b|c){1,1}d';
select * from t1 where name regexp 'a(b|c){1,2}d';
select * from t1 where name regexp 'a(b|c){1,2}d';
select * from t1 where name regexp 'a(b|c){1,}d';
select * from t1 where name regexp 'a(b|c){1,}d';
select * from t1 where name regexp 'a(b|c){2,2}d';
select * from t1 where name regexp 'a(b|c){2,2}d';
select * from t1 where name regexp 'a(b|c){2,4}d';
select * from t1 where name regexp 'a(b|c){2,4}d';
select * from t1 where name regexp 'a(b|c){2,4}d';
select * from t1 where name regexp 'a(b|c){2,}d';
select * from t1 where name regexp 'a(b|c){2,}d';
select * from t1 where name regexp 'a(b+|((c)*))+d';
select * from t1 where name regexp 'a(b+|((c)*))+d';
select * from t1 where name regexp '(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A])';
select * from t1 where name regexp 'CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a';
select * from t1 where name regexp 'a?b';
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1 (a varchar(50) primary key) ;
insert into t1 values('abcdef');
insert into t1 values('_bcdef');
insert into t1 values('a_cdef');
insert into t1 values('ab_def');
insert into t1 values('abc_ef');
insert into t1 values('abcd_f');
insert into t1 values('abcde_');
# should return ab_def
select a as c1u from t1 where a rlike 'ab\_def';
drop table t1;
--disable_warnings
drop table if exists t;
--enable_warnings
create table t (c1 char(20));
insert into t values ('');
select c1 regexp 'ddd' from t;