Re: [PATCHES] regexp_replace - Mailing list pgsql-hackers

From David Fetter
Subject Re: [PATCHES] regexp_replace
Date
Msg-id 20050607145706.GB7562@fetter.org
Whole thread Raw
In response to Re: [PATCHES] regexp_replace  (Atsushi Ogawa <a_ogawa@hi-ho.ne.jp>)
Responses Re: [PATCHES] regexp_replace  (Atsushi Ogawa <a_ogawa@hi-ho.ne.jp>)
Re: [PATCHES] regexp_replace  (Robert Treat <xzilla@users.sourceforge.net>)
List pgsql-hackers
On Tue, Jun 07, 2005 at 10:27:28PM +0900, Atsushi Ogawa wrote:
>
> David Fetter wrote:
> > On Tue, Jun 07, 2005 at 09:35:56AM +0900, a_ogawa wrote:
> > > David Fetter wrote:
> > > > We don't yet have this functionality, as the patch allows for
> > > > using second and later regex matches "()" in the replacement
> > > > pattern.
> > > >
> > > > The function is misnamed.  It should be called
> > > > regex_replace_all() or some such, as it violates the principle
> > > > of least astonishment by replacing all instances by default.
> > > > Every other regex replacement defaults to "replace first," not
> > > > "replace all."  Or maybe it should take a bool for "replace
> > > > all," or...?  Anyhow, it's worth a discussion :)
> > >
> > > I think that the usage increases if "replace all" or "replace first" can
> be
> > > specified to this function.
> >
> > Ogawa-san,
> >
> > I think that this would be a case for function overloading:
> >
> > function regexp_replace(
> >     string text, pattern text, replacement text
> > ) RETURNS TEXT; /* First only */
> >
> > regexp_replace(
> >     string text, pattern text, replacement text, global bool
> > ) RETURNS TEXT; /* Global if global is TRUE, first only otherwise */
> >
> > What do you think of this idea?  One trouble is that there are some
> > other options.  For example, one could add switches for all
> > combinations of "global," "case insensitive," "compile once," "exclude
> > whitespace," etc. as perl does.  Do we want to go this route?
>
> My idea is opposite. I think that the regexp_replace() should make
> "replace all" a default. Because the replace() of pgsql replaces all
> string, and regexp_replace() of oracle10g is also similar.

I respectfully disagree.  Although Oracle does things this way, no
other regular expression search and replace does.  Historically, you
can find that "Oracle does it this way" is not a reason why we would
do it.  Text editors, programming languages, etc., etc. do "replace
the first" by default and "replace globally" only when told to.

> And I think that it is better to be able to specify the option with text.
> I think about this function specification:
>
> regexp_replace(
>     string text, pattern text, replacement text
> ) RETURNS TEXT; /* Replace all */
>
> regexp_replace(
>     string text, pattern text, replacement text, options text
> ) RETURNS TEXT; /* Change operation by the option. */
>
> The options can use the following values.
>  f: Replace first only
>  i: Case insensitive
>
> Any comments?

I think that "case insensitive" is a good thing to add separately as a
boolean :)

Cheers,
David.
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100   mobile: +1 415 235 3778

Remember to vote!

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: RESET CONNECTION idea
Next
From: Tom Lane
Date:
Subject: Re: RESET CONNECTION idea