Teach the regular expression functions to do case-insensitive matching and

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 0d32342501f2a562bc57156dc92d59a0624be4a6
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2009-12-01T21:00:24Z
Releases: 9.0.0
Teach the regular expression functions to do case-insensitive matching and
locale-dependent character classification properly when the database encoding
is UTF8.

The previous coding worked okay in single-byte encodings, or in any case for
ASCII characters, but failed entirely on multibyte characters.  The fix
assumes that the <wctype.h> functions use Unicode code points as the wchar
representation for Unicode, ie, wchar matches pg_wchar.

This is only a partial solution, since we're still stupid about non-ASCII
characters in multibyte encodings other than UTF8.  The practical effect
of that is limited, however, since those cases are generally Far Eastern
glyphs for which concepts like case-folding don't apply anyway.  Certainly
all or nearly all of the field reports of problems have been about UTF8.
A more general solution would require switching to the platform's wchar
representation for all regex operations; which is possible but would have
substantial disadvantages.  Let's try this and see if it's sufficient in
practice.

Files

PathChange+/−
src/backend/regex/regc_locale.c modified +105 −13
src/include/regex/regcustom.h modified +12 −1