mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Support the new regexp_match() function for citext.
Emre Hasegeli Patch: <CAE2gYzzF24ZHWqkMukkHwqa0otbES9Rex22LrjQUNbi=oKziNQ@mail.gmail.com>
This commit is contained in:
parent
9f31e45a6d
commit
f9d747a4e9
@ -3,7 +3,8 @@
|
|||||||
MODULES = citext
|
MODULES = citext
|
||||||
|
|
||||||
EXTENSION = citext
|
EXTENSION = citext
|
||||||
DATA = citext--1.3.sql citext--1.2--1.3.sql citext--1.1--1.2.sql \
|
DATA = citext--1.4.sql citext--1.3--1.4.sql \
|
||||||
|
citext--1.2--1.3.sql citext--1.1--1.2.sql \
|
||||||
citext--1.0--1.1.sql citext--unpackaged--1.0.sql
|
citext--1.0--1.1.sql citext--unpackaged--1.0.sql
|
||||||
PGFILEDESC = "citext - case-insensitive character string data type"
|
PGFILEDESC = "citext - case-insensitive character string data type"
|
||||||
|
|
||||||
|
12
contrib/citext/citext--1.3--1.4.sql
Normal file
12
contrib/citext/citext--1.3--1.4.sql
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* contrib/citext/citext--1.3--1.4.sql */
|
||||||
|
|
||||||
|
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
|
||||||
|
\echo Use "ALTER EXTENSION citext UPDATE TO '1.4'" to load this file. \quit
|
||||||
|
|
||||||
|
CREATE FUNCTION regexp_match( citext, citext ) RETURNS TEXT[] AS $$
|
||||||
|
SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
|
CREATE FUNCTION regexp_match( citext, citext, text ) RETURNS TEXT[] AS $$
|
||||||
|
SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
|
@ -1,4 +1,4 @@
|
|||||||
/* contrib/citext/citext--1.2.sql */
|
/* contrib/citext/citext--1.4.sql */
|
||||||
|
|
||||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||||
\echo Use "CREATE EXTENSION citext" to load this file. \quit
|
\echo Use "CREATE EXTENSION citext" to load this file. \quit
|
||||||
@ -444,6 +444,14 @@ CREATE OPERATOR !~~* (
|
|||||||
-- XXX TODO Ideally these would be implemented in C.
|
-- XXX TODO Ideally these would be implemented in C.
|
||||||
--
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION regexp_match( citext, citext ) RETURNS TEXT[] AS $$
|
||||||
|
SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
|
CREATE FUNCTION regexp_match( citext, citext, text ) RETURNS TEXT[] AS $$
|
||||||
|
SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
CREATE FUNCTION regexp_matches( citext, citext ) RETURNS SETOF TEXT[] AS $$
|
CREATE FUNCTION regexp_matches( citext, citext ) RETURNS SETOF TEXT[] AS $$
|
||||||
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
|
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
|
||||||
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1;
|
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1;
|
@ -1,5 +1,5 @@
|
|||||||
# citext extension
|
# citext extension
|
||||||
comment = 'data type for case-insensitive character strings'
|
comment = 'data type for case-insensitive character strings'
|
||||||
default_version = '1.3'
|
default_version = '1.4'
|
||||||
module_pathname = '$libdir/citext'
|
module_pathname = '$libdir/citext'
|
||||||
relocatable = true
|
relocatable = true
|
||||||
|
@ -1770,6 +1770,60 @@ SELECT quote_literal( name ) = quote_literal( name::text ) AS t FROM srt;
|
|||||||
t
|
t
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)', '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz', '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, ''::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- c forces case-sensitive
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, 'c'::citext) = ARRAY[ 'bar', 'beque' ] AS "no result";
|
||||||
|
no result
|
||||||
|
-----------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- g is not allowed
|
||||||
|
SELECT regexp_match('foobarbequebazmorebarbequetoo'::citext, '(BAR)(BEQUE)'::citext, 'g') AS "error";
|
||||||
|
ERROR: regexp_match does not support the global option
|
||||||
|
HINT: Use the regexp_matches function instead.
|
||||||
|
CONTEXT: SQL function "regexp_match" statement 1
|
||||||
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
t
|
t
|
||||||
---
|
---
|
||||||
|
@ -1770,6 +1770,60 @@ SELECT quote_literal( name ) = quote_literal( name::text ) AS t FROM srt;
|
|||||||
t
|
t
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)', '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz', '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, ''::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
t
|
||||||
|
---
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- c forces case-sensitive
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, 'c'::citext) = ARRAY[ 'bar', 'beque' ] AS "no result";
|
||||||
|
no result
|
||||||
|
-----------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- g is not allowed
|
||||||
|
SELECT regexp_match('foobarbequebazmorebarbequetoo'::citext, '(BAR)(BEQUE)'::citext, 'g') AS "error";
|
||||||
|
ERROR: regexp_match does not support the global option
|
||||||
|
HINT: Use the regexp_matches function instead.
|
||||||
|
CONTEXT: SQL function "regexp_match" statement 1
|
||||||
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
t
|
t
|
||||||
---
|
---
|
||||||
|
@ -592,6 +592,18 @@ SELECT md5( name ) = md5( name::text ) AS t FROM srt;
|
|||||||
SELECT quote_ident( name ) = quote_ident( name::text ) AS t FROM srt;
|
SELECT quote_ident( name ) = quote_ident( name::text ) AS t FROM srt;
|
||||||
SELECT quote_literal( name ) = quote_literal( name::text ) AS t FROM srt;
|
SELECT quote_literal( name ) = quote_literal( name::text ) AS t FROM srt;
|
||||||
|
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)', '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz', '(BAR)(BEQUE)'::citext, '') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, ''::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
-- c forces case-sensitive
|
||||||
|
SELECT regexp_match('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext, 'c'::citext) = ARRAY[ 'bar', 'beque' ] AS "no result";
|
||||||
|
-- g is not allowed
|
||||||
|
SELECT regexp_match('foobarbequebazmorebarbequetoo'::citext, '(BAR)(BEQUE)'::citext, 'g') AS "error";
|
||||||
|
|
||||||
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
SELECT regexp_matches('foobarbequebaz'::citext, '(bar)(beque)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
SELECT regexp_matches('foobarbequebaz'::citext, '(BAR)(BEQUE)') = ARRAY[ 'bar', 'beque' ] AS t;
|
SELECT regexp_matches('foobarbequebaz'::citext, '(BAR)(BEQUE)') = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
SELECT regexp_matches('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
SELECT regexp_matches('foobarbequebaz'::citext, '(BAR)(BEQUE)'::citext) = ARRAY[ 'bar', 'beque' ] AS t;
|
||||||
|
@ -124,6 +124,11 @@ SELECT * FROM users WHERE nick = 'Larry';
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<function>regexp_match()</>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<function>regexp_matches()</>
|
<function>regexp_matches()</>
|
||||||
|
Loading…
Reference in New Issue
Block a user