mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-5357 REGEXP word boundaries don't work
Applied a patch from Philip Hazel implementing the non-standard syntax for word boundaries in PCRE, for compatibility with the old Henry Spencer's regex library.
This commit is contained in:
24
mysql-test/include/ctype_regex_utf8.inc
Normal file
24
mysql-test/include/ctype_regex_utf8.inc
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#
|
||||||
|
# Bug #3928 regexp [[:>:]] and UTF-8
|
||||||
|
#
|
||||||
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
|
|
||||||
|
# This should return TRUE
|
||||||
|
select 'вася' rlike '\\bвася\\b';
|
||||||
|
select 'вася ' rlike '\\bвася\\b';
|
||||||
|
select ' вася' rlike '\\bвася\\b';
|
||||||
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
|
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
|
||||||
|
# This should return FALSE
|
||||||
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
|
select 'zвася' rlike '\\bвася\\b';
|
||||||
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
|
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
@ -224,25 +224,9 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# Testing regexp
|
# Testing regexp
|
||||||
#
|
#
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
--source include/ctype_regex.inc
|
--source include/ctype_regex.inc
|
||||||
set names utf8mb4;
|
--source include/ctype_regex_utf8.inc
|
||||||
|
|
||||||
#
|
|
||||||
# Bug #3928 regexp [[:>:]] and UTF-8
|
|
||||||
#
|
|
||||||
set names utf8mb4;
|
|
||||||
|
|
||||||
# This should return TRUE
|
|
||||||
select 'вася' rlike '\\bвася\\b';
|
|
||||||
select 'вася ' rlike '\\bвася\\b';
|
|
||||||
select ' вася' rlike '\\bвася\\b';
|
|
||||||
select ' вася ' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
# This should return FALSE
|
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
|
||||||
select 'zвася' rlike '\\bвася\\b';
|
|
||||||
select 'zвасяz' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #4555
|
# Bug #4555
|
||||||
|
@ -270,7 +270,7 @@ b
|
|||||||
select * from t1 where a = 'b' and a != 'b';
|
select * from t1 where a = 'b' and a != 'b';
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set collation_connection=utf8_general_ci;
|
set names utf8;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 as
|
create table t1 as
|
||||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||||
@ -314,8 +314,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set names utf8;
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
set names utf8;
|
@@character_set_client @@collation_connection
|
||||||
|
utf8 utf8_general_ci
|
||||||
select 'вася' rlike '\\bвася\\b';
|
select 'вася' rlike '\\bвася\\b';
|
||||||
'вася' rlike '\\bвася\\b'
|
'вася' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
@ -328,6 +329,18 @@ select ' вася' rlike '\\bвася\\b';
|
|||||||
select ' вася ' rlike '\\bвася\\b';
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
' вася ' rlike '\\bвася\\b'
|
' вася ' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
'васяz' rlike '\\bвася\\b'
|
'васяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
@ -337,6 +350,15 @@ select 'zвася' rlike '\\bвася\\b';
|
|||||||
select 'zвасяz' rlike '\\bвася\\b';
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
'zвасяz' rlike '\\bвася\\b'
|
'zвасяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'васяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвасяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8_unicode_ci);
|
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8_unicode_ci);
|
||||||
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -270,7 +270,7 @@ b
|
|||||||
select * from t1 where a = 'b' and a != 'b';
|
select * from t1 where a = 'b' and a != 'b';
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 as
|
create table t1 as
|
||||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||||
@ -314,8 +314,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set names utf8mb4;
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
set names utf8mb4;
|
@@character_set_client @@collation_connection
|
||||||
|
utf8mb4 utf8mb4_general_ci
|
||||||
select 'вася' rlike '\\bвася\\b';
|
select 'вася' rlike '\\bвася\\b';
|
||||||
'вася' rlike '\\bвася\\b'
|
'вася' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
@ -328,6 +329,18 @@ select ' вася' rlike '\\bвася\\b';
|
|||||||
select ' вася ' rlike '\\bвася\\b';
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
' вася ' rlike '\\bвася\\b'
|
' вася ' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
'васяz' rlike '\\bвася\\b'
|
'васяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
@ -337,6 +350,15 @@ select 'zвася' rlike '\\bвася\\b';
|
|||||||
select 'zвасяz' rlike '\\bвася\\b';
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
'zвасяz' rlike '\\bвася\\b'
|
'zвасяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'васяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвасяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci);
|
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci);
|
||||||
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -260,7 +260,7 @@ b
|
|||||||
select * from t1 where a = 'b' and a != 'b';
|
select * from t1 where a = 'b' and a != 'b';
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 as
|
create table t1 as
|
||||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||||
@ -304,8 +304,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set names utf8mb4;
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
set names utf8mb4;
|
@@character_set_client @@collation_connection
|
||||||
|
utf8mb4 utf8mb4_general_ci
|
||||||
select 'вася' rlike '\\bвася\\b';
|
select 'вася' rlike '\\bвася\\b';
|
||||||
'вася' rlike '\\bвася\\b'
|
'вася' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
@ -318,6 +319,18 @@ select ' вася' rlike '\\bвася\\b';
|
|||||||
select ' вася ' rlike '\\bвася\\b';
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
' вася ' rlike '\\bвася\\b'
|
' вася ' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
'васяz' rlike '\\bвася\\b'
|
'васяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
@ -327,6 +340,15 @@ select 'zвася' rlike '\\bвася\\b';
|
|||||||
select 'zвасяz' rlike '\\bвася\\b';
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
'zвасяz' rlike '\\bвася\\b'
|
'zвасяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'васяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвасяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE heap;
|
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE heap;
|
||||||
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -270,7 +270,7 @@ b
|
|||||||
select * from t1 where a = 'b' and a != 'b';
|
select * from t1 where a = 'b' and a != 'b';
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 as
|
create table t1 as
|
||||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||||
@ -314,8 +314,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set names utf8mb4;
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
set names utf8mb4;
|
@@character_set_client @@collation_connection
|
||||||
|
utf8mb4 utf8mb4_general_ci
|
||||||
select 'вася' rlike '\\bвася\\b';
|
select 'вася' rlike '\\bвася\\b';
|
||||||
'вася' rlike '\\bвася\\b'
|
'вася' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
@ -328,6 +329,18 @@ select ' вася' rlike '\\bвася\\b';
|
|||||||
select ' вася ' rlike '\\bвася\\b';
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
' вася ' rlike '\\bвася\\b'
|
' вася ' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
'васяz' rlike '\\bвася\\b'
|
'васяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
@ -337,6 +350,15 @@ select 'zвася' rlike '\\bвася\\b';
|
|||||||
select 'zвасяz' rlike '\\bвася\\b';
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
'zвасяz' rlike '\\bвася\\b'
|
'zвасяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'васяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвасяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE InnoDB;
|
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE InnoDB;
|
||||||
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -270,7 +270,7 @@ b
|
|||||||
select * from t1 where a = 'b' and a != 'b';
|
select * from t1 where a = 'b' and a != 'b';
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 as
|
create table t1 as
|
||||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||||
@ -314,8 +314,9 @@ NULL
|
|||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set names utf8mb4;
|
SELECT @@character_set_client, @@collation_connection;
|
||||||
set names utf8mb4;
|
@@character_set_client @@collation_connection
|
||||||
|
utf8mb4 utf8mb4_general_ci
|
||||||
select 'вася' rlike '\\bвася\\b';
|
select 'вася' rlike '\\bвася\\b';
|
||||||
'вася' rlike '\\bвася\\b'
|
'вася' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
@ -328,6 +329,18 @@ select ' вася' rlike '\\bвася\\b';
|
|||||||
select ' вася ' rlike '\\bвася\\b';
|
select ' вася ' rlike '\\bвася\\b';
|
||||||
' вася ' rlike '\\bвася\\b'
|
' вася ' rlike '\\bвася\\b'
|
||||||
1
|
1
|
||||||
|
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select 'вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
|
select ' вася ' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
' вася ' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
1
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
select 'васяz' rlike '\\bвася\\b';
|
||||||
'васяz' rlike '\\bвася\\b'
|
'васяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
@ -337,6 +350,15 @@ select 'zвася' rlike '\\bвася\\b';
|
|||||||
select 'zвасяz' rlike '\\bвася\\b';
|
select 'zвасяz' rlike '\\bвася\\b';
|
||||||
'zвасяz' rlike '\\bвася\\b'
|
'zвасяz' rlike '\\bвася\\b'
|
||||||
0
|
0
|
||||||
|
select 'васяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'васяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвася' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвася' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
|
select 'zвасяz' rlike '[[:<:]]вася[[:>:]]';
|
||||||
|
'zвасяz' rlike '[[:<:]]вася[[:>:]]'
|
||||||
|
0
|
||||||
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE MyISAM;
|
CREATE TABLE t1 (a enum ('Y', 'N') DEFAULT 'N' COLLATE utf8mb4_unicode_ci) ENGINE MyISAM;
|
||||||
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
ALTER TABLE t1 ADD COLUMN b CHAR(20);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -199,25 +199,9 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# Testing regexp
|
# Testing regexp
|
||||||
#
|
#
|
||||||
set collation_connection=utf8_general_ci;
|
set names utf8;
|
||||||
--source include/ctype_regex.inc
|
--source include/ctype_regex.inc
|
||||||
set names utf8;
|
--source include/ctype_regex_utf8.inc
|
||||||
|
|
||||||
#
|
|
||||||
# Bug #3928 regexp [[:>:]] and UTF-8
|
|
||||||
#
|
|
||||||
set names utf8;
|
|
||||||
|
|
||||||
# This should return TRUE
|
|
||||||
select 'вася' rlike '\\bвася\\b';
|
|
||||||
select 'вася ' rlike '\\bвася\\b';
|
|
||||||
select ' вася' rlike '\\bвася\\b';
|
|
||||||
select ' вася ' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
# This should return FALSE
|
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
|
||||||
select 'zвася' rlike '\\bвася\\b';
|
|
||||||
select 'zвасяz' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #4555
|
# Bug #4555
|
||||||
|
@ -197,25 +197,9 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# Testing regexp
|
# Testing regexp
|
||||||
#
|
#
|
||||||
set collation_connection=utf8mb4_general_ci;
|
set names utf8mb4;
|
||||||
--source include/ctype_regex.inc
|
--source include/ctype_regex.inc
|
||||||
set names utf8mb4;
|
--source include/ctype_regex_utf8.inc
|
||||||
|
|
||||||
#
|
|
||||||
# Bug #3928 regexp [[:>:]] and UTF-8
|
|
||||||
#
|
|
||||||
set names utf8mb4;
|
|
||||||
|
|
||||||
# This should return TRUE
|
|
||||||
select 'вася' rlike '\\bвася\\b';
|
|
||||||
select 'вася ' rlike '\\bвася\\b';
|
|
||||||
select ' вася' rlike '\\bвася\\b';
|
|
||||||
select ' вася ' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
# This should return FALSE
|
|
||||||
select 'васяz' rlike '\\bвася\\b';
|
|
||||||
select 'zвася' rlike '\\bвася\\b';
|
|
||||||
select 'zвасяz' rlike '\\bвася\\b';
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #4555
|
# Bug #4555
|
||||||
|
@ -253,6 +253,19 @@ static const verbitem verbs[] = {
|
|||||||
static const int verbcount = sizeof(verbs)/sizeof(verbitem);
|
static const int verbcount = sizeof(verbs)/sizeof(verbitem);
|
||||||
|
|
||||||
|
|
||||||
|
/* Substitutes for [[:<:]] and [[:>:]], which mean start and end of word in
|
||||||
|
another regex library. */
|
||||||
|
|
||||||
|
static const pcre_uchar sub_start_of_word[] = {
|
||||||
|
CHAR_BACKSLASH, CHAR_b, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK,
|
||||||
|
CHAR_EQUALS_SIGN, CHAR_BACKSLASH, CHAR_w, CHAR_RIGHT_PARENTHESIS, '\0' };
|
||||||
|
|
||||||
|
static const pcre_uchar sub_end_of_word[] = {
|
||||||
|
CHAR_BACKSLASH, CHAR_b, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK,
|
||||||
|
CHAR_LESS_THAN_SIGN, CHAR_EQUALS_SIGN, CHAR_BACKSLASH, CHAR_w,
|
||||||
|
CHAR_RIGHT_PARENTHESIS, '\0' };
|
||||||
|
|
||||||
|
|
||||||
/* Tables of names of POSIX character classes and their lengths. The names are
|
/* Tables of names of POSIX character classes and their lengths. The names are
|
||||||
now all in a single string, to reduce the number of relocations when a shared
|
now all in a single string, to reduce the number of relocations when a shared
|
||||||
library is dynamically loaded. The list of lengths is terminated by a zero
|
library is dynamically loaded. The list of lengths is terminated by a zero
|
||||||
@ -4036,8 +4049,30 @@ for (;; ptr++)
|
|||||||
goto FAILED;
|
goto FAILED;
|
||||||
}
|
}
|
||||||
goto NORMAL_CHAR;
|
goto NORMAL_CHAR;
|
||||||
|
|
||||||
|
/* In another (POSIX) regex library, the ugly syntax [[:<:]] and [[:>:]] is
|
||||||
|
used for "start of word" and "end of word". As these are otherwise illegal
|
||||||
|
sequences, we don't break anything by recognizing them. They are replaced
|
||||||
|
by \b(?=\w) and \b(?<=\w) respectively. Sequences like [a[:<:]] are
|
||||||
|
erroneous and are handled by the normal code below. */
|
||||||
|
|
||||||
case CHAR_LEFT_SQUARE_BRACKET:
|
case CHAR_LEFT_SQUARE_BRACKET:
|
||||||
|
if (STRNCMP_UC_C8(ptr+1, STRING_WEIRD_STARTWORD, 6) == 0)
|
||||||
|
{
|
||||||
|
nestptr = ptr + 7;
|
||||||
|
ptr = sub_start_of_word - 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STRNCMP_UC_C8(ptr+1, STRING_WEIRD_ENDWORD, 6) == 0)
|
||||||
|
{
|
||||||
|
nestptr = ptr + 7;
|
||||||
|
ptr = sub_end_of_word - 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle a real character class. */
|
||||||
|
|
||||||
previous = code;
|
previous = code;
|
||||||
|
|
||||||
/* PCRE supports POSIX class stuff inside a class. Perl gives an error if
|
/* PCRE supports POSIX class stuff inside a class. Perl gives an error if
|
||||||
|
@ -1794,6 +1794,8 @@ only. */
|
|||||||
#define STRING_xdigit STR_x STR_d STR_i STR_g STR_i STR_t
|
#define STRING_xdigit STR_x STR_d STR_i STR_g STR_i STR_t
|
||||||
|
|
||||||
#define STRING_DEFINE STR_D STR_E STR_F STR_I STR_N STR_E
|
#define STRING_DEFINE STR_D STR_E STR_F STR_I STR_N STR_E
|
||||||
|
#define STRING_WEIRD_STARTWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_LESS_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET
|
||||||
|
#define STRING_WEIRD_ENDWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_GREATER_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET
|
||||||
|
|
||||||
#define STRING_CR_RIGHTPAR STR_C STR_R STR_RIGHT_PARENTHESIS
|
#define STRING_CR_RIGHTPAR STR_C STR_R STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_LF_RIGHTPAR STR_L STR_F STR_RIGHT_PARENTHESIS
|
#define STRING_LF_RIGHTPAR STR_L STR_F STR_RIGHT_PARENTHESIS
|
||||||
|
Reference in New Issue
Block a user