Thread: Adding regexp_match() function

Adding regexp_match() function

From
Daniele Varrazzo
Date:
Hello,

I'd like to contribute a "regexp_match()" function as discussed in bug
#5469 [1] The aim is to overcome the limitation outlined in the thread
above <http://archives.postgresql.org/pgsql-bugs/2010-05/msg00227.php>.

PostgreSQL currently offers the function regexp_matches(), a SRF
(which, unless invoked with the 'g' flag, returns at most one result).
An user interested in the "nonglob" behaviour, i.e. expecting at most
1 match group, has to adopt special care to avoid records to be
dropped from the target list in case no match is found. Being this a
rather common use case, I'd like to provide a function with a less
astonishing behaviour, i.e. returning a text[] instead of a set of
text[] and returning NULL in case no match is found (the 'g' flag
wouldn't be supported).

The proposed name is regexp_match(), to underline the semantics very
similar to regexp_matches() but returning a single value as result.
While the symmetry between the names is a pro, an excessive similarity
may result confusing, so I wouldn't be surprised if a better name is
found. The implementation of the function is very simple, given the
infrastructure already available for the other regexp-related
functions. I've actually already implemented it (mostly to check how
easy or hard it would have been: I had never written a C procedure for
PG before): a preliminary patch is attached.

If the idea is accepted I will submit a complete patch including
documentation and tests.

Best regards,


-- Daniele

Attachment

Re: Adding regexp_match() function

From
Jim Nasby
Date:
This seems like it'd be useful. Anyone else have thoughts on it?

On May 31, 2010, at 4:09 AM, Daniele Varrazzo wrote:

> Hello,
> 
> I'd like to contribute a "regexp_match()" function as discussed in bug
> #5469 [1] The aim is to overcome the limitation outlined in the thread
> above <http://archives.postgresql.org/pgsql-bugs/2010-05/msg00227.php>.
> 
> PostgreSQL currently offers the function regexp_matches(), a SRF
> (which, unless invoked with the 'g' flag, returns at most one result).
> An user interested in the "nonglob" behaviour, i.e. expecting at most
> 1 match group, has to adopt special care to avoid records to be
> dropped from the target list in case no match is found. Being this a
> rather common use case, I'd like to provide a function with a less
> astonishing behaviour, i.e. returning a text[] instead of a set of
> text[] and returning NULL in case no match is found (the 'g' flag
> wouldn't be supported).
> 
> The proposed name is regexp_match(), to underline the semantics very
> similar to regexp_matches() but returning a single value as result.
> While the symmetry between the names is a pro, an excessive similarity
> may result confusing, so I wouldn't be surprised if a better name is
> found. The implementation of the function is very simple, given the
> infrastructure already available for the other regexp-related
> functions. I've actually already implemented it (mostly to check how
> easy or hard it would have been: I had never written a C procedure for
> PG before): a preliminary patch is attached.
> 
> If the idea is accepted I will submit a complete patch including
> documentation and tests.
> 
> Best regards,
> 
> 
> -- Daniele
> <regexp_match.patch>
> -- 
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

--
Jim C. Nasby, Database Architect                   jim@nasby.net
512.569.9461 (cell)                         http://jim.nasby.net




Re: Adding regexp_match() function

From
Robert Haas
Date:
On Wed, Jun 30, 2010 at 4:25 AM, Jim Nasby <jim@nasby.net> wrote:
> This seems like it'd be useful. Anyone else have thoughts on it?

+1.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company