1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
#
# 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
#
--error ER_CHARACTER_SET_MISMATCH
SELECT '' REGEXP BINARY NULL;
SELECT NULL REGEXP BINARY NULL;
--error ER_CHARACTER_SET_MISMATCH
SELECT 'A' REGEXP BINARY NULL;
--error ER_CHARACTER_SET_MISMATCH
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
--echo # Bug#33089668: Calling regexp_instr() with NULL causes all
--echo # further calls of it to return NULL
SELECT REGEXP_INSTR(e, 'pattern')
FROM (VALUES ROW('Find pattern'), ROW(NULL), ROW('Find pattern')) AS v(e);
SELECT REGEXP_LIKE(e, 'pattern')
FROM (VALUES ROW('Find pattern'), ROW(NULL), ROW('Find pattern')) AS v(e);
SELECT REGEXP_REPLACE(e, 'pattern', 'xyz')
FROM (VALUES ROW('Find pattern'), ROW(NULL), ROW('Find pattern')) AS v(e);
SELECT REGEXP_SUBSTR(e, 'pattern')
FROM (VALUES ROW('Find pattern'), ROW(NULL), ROW('Find pattern')) AS v(e);
CREATE FUNCTION r_instr(input_text VARCHAR(255)) RETURNS INT DETERMINISTIC
RETURN REGEXP_INSTR(input_text, 'pattern');
SELECT r_instr('Find pattern');
SELECT r_instr(NULL);
SELECT r_instr('Find pattern');
DROP FUNCTION r_instr;
CREATE FUNCTION r_like(input_text VARCHAR(255)) RETURNS BOOLEAN DETERMINISTIC
RETURN REGEXP_LIKE(input_text, 'pattern');
SELECT r_like('Find pattern');
SELECT r_like(NULL);
SELECT r_like('Find pattern');
DROP FUNCTION r_like;
CREATE FUNCTION r_replace(input_text VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC
RETURN REGEXP_REPLACE(input_text, 'pattern', 'xyz');
SELECT r_replace('Find pattern');
SELECT r_replace(NULL);
SELECT r_replace('Find pattern');
DROP FUNCTION r_replace;
CREATE FUNCTION r_substr(input_text VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC
RETURN REGEXP_SUBSTR(input_text, 'pattern');
SELECT r_substr('Find pattern');
SELECT r_substr(NULL);
SELECT r_substr('Find pattern');
DROP FUNCTION r_substr;
|