# # Some regexp tests # --disable_warnings drop table if exists t1; --enable_warnings set names latin1; --source include/ctype_regex.inc # # This test a bug in regexp on Alpha # create table t1 (xxx char(128)); insert into t1 (xxx) values('this is a test of some long text to see what happens'); analyze table t1; select * from t1 where xxx regexp('is a test of some long text to'); explain select * from t1 where xxx regexp('is a test of some long text to'); select * from t1 where xxx regexp('is a test of some long text to '); select * from t1 where xxx regexp('is a test of some long text to s'); select * from t1 where xxx regexp('is a test of some long text to se'); drop table t1; create table t1 (xxx char(128)); insert into t1 (xxx) values('this is some text: to test - out.reg exp (22/45)'); --error ER_REGEXP_MISSING_CLOSE_BRACKET select * from t1 where xxx REGEXP '^this is some text: to test - out\\.reg exp [[(][0-9]+[/\\][0-9]+[])][ ]*$'; drop table t1; # # Check with different character sets and collations # --echo # The Henry Spencer library used prior to ICU was inonsistent --echo # here. When the regular expression search is performed in a --echo # case-insensitive manner, both '[[:lower:]]' and '[[:upper:]]' --echo # will match. select _latin1 0xFF regexp _latin1 '[[:lower:]]' COLLATE latin1_bin; select _koi8r 0xFF regexp _koi8r '[[:lower:]]' COLLATE koi8r_bin; select _latin1 0xFF regexp _latin1 '[[:upper:]]' COLLATE latin1_bin; select _koi8r 0xFF regexp _koi8r '[[:upper:]]' COLLATE koi8r_bin; select _latin1 0xF7 regexp _latin1 '[[:alpha:]]'; select _koi8r 0xF7 regexp _koi8r '[[:alpha:]]'; select _latin1'a' regexp _latin1'A' collate latin1_general_ci; select _latin1'a' regexp _latin1'A' collate latin1_bin; # # regexp cleanup() # create table t1 (a varchar(40)); insert into t1 values ('C1'),('C2'),('R1'),('C3'),('R2'),('R3'); prepare stmt1 from 'select a from t1 where a rlike ? order by a'; set @a="^C.*"; execute stmt1 using @a; set @a="^R.*"; execute stmt1 using @a; deallocate prepare stmt1; drop table t1; --echo End of 4.1 tests # # Bug #31440: 'select 1 regex null' asserts debug server # SELECT 1 REGEXP NULL; # # Bug #39021: SELECT REGEXP BINARY NULL never returns # SELECT '' REGEXP BINARY NULL; SELECT NULL REGEXP BINARY NULL; SELECT 'A' REGEXP BINARY NULL; SELECT "ABC" REGEXP BINARY NULL; --echo End of 5.0 tests # # Bug #37337: Function returns different results # CREATE TABLE t1(a INT, b CHAR(4)); INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0'); PREPARE stmt1 FROM "SELECT a FROM t1 WHERE a=1 AND '7.0' REGEXP b LIMIT 1"; EXECUTE stmt1; EXECUTE stmt1; EXECUTE stmt1; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; DROP TABLE t1; --echo End of 5.1 tests # # Bug #54805 definitions in regex/my_regex.h conflict with /usr/include/regex.h # # This test verifies that '\t' is recognized as space, but not as blank. # This is *not* according to the POSIX standard, but seems to have been MySQL # behaviour ever since regular expressions were introduced. # See: Bug #55427 REGEXP does not recognize '\t' as [:blank:] # SELECT ' ' REGEXP '[[:blank:]]'; SELECT '\t' REGEXP '[[:blank:]]'; SELECT ' ' REGEXP '[[:space:]]'; SELECT '\t' REGEXP '[[:space:]]'; --echo # --echo # Bug#22836180: REGEXP, ASSERTION FAILED: !THD->IS_ERROR() --echo # IN SETUP_FIELDS() --echo # --error ER_WRONG_ARGUMENTS DO 1 regexp (multilinestring(point(1,1))); --echo # --echo # Bug#58026: massive recursion and crash in regular expression handling --echo # --disable_result_log --error ER_REGEXP_INTERNAL_ERROR SELECT '1' RLIKE RPAD('1', 10000, '('); --enable_result_log