]> granicus.if.org Git - postgresql/commit
Improve similar_escape() in two different ways:
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 10 Oct 2009 03:50:15 +0000 (03:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 10 Oct 2009 03:50:15 +0000 (03:50 +0000)
commit05d249717d652f0b16960d8a58611e222f1f907b
treef5999862b949fc1c991d3d7e2ff51ed170656de1
parent8a5849b7ff24c637a1140c26fc171e45c9142005
Improve similar_escape() in two different ways:

* Stop escaping ? and {.  As of SQL:2008, SIMILAR TO is defined to have
POSIX-compatible interpretation of ? as well as {m,n} and related constructs,
so we should allow these things through to our regex engine.

* Escape ^ and $.  It appears that our regex engine will treat ^^ at the
beginning of the string the same as ^, and similarly for $$ at the end of
the string, which meant that SIMILAR TO was effectively ignoring ^ at the
start of the pattern and $ at the end.  Since these are not supposed to be
metacharacters, this is a bug.

The second part of this is arguably a back-patchable bug fix, but I'm
hesitant to do that because it might break applications that are expecting
something like "col SIMILAR TO '^foo$'" to work like a POSIX pattern.
Seems safer to only change it at a major version boundary.

Per discussion of an example from Doug Gorley.
doc/src/sgml/func.sgml
src/backend/utils/adt/regexp.c