File: func_regexp.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (179 lines) | stat: -rw-r--r-- 5,281 bytes parent folder | download
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;