postgresql/src/backend/utils
Michael Paquier b3e99115e4 Fix conversion of SIMILAR TO regexes for character classes
The code that translates SIMILAR TO pattern matching expressions to
POSIX-style regular expressions did not consider that square brackets
can be nested.  For example, in an expression like [[:alpha:]%_], the
logic replaced the placeholders '_' and '%' but it should not.

This commit fixes the conversion logic by tracking the nesting level of
square brackets marking character class areas, while considering that
in expressions like []] or [^]] the first closing square bracket is a
regular character.  Multiple tests are added to show how the conversions
should or should not apply applied while in a character class area, with
specific cases added for all the characters converted outside character
classes like an opening parenthesis '(', dollar sign '$', etc.

Author: Laurenz Albe <laurenz.albe@cybertec.at>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/16ab039d1af455652bdf4173402ddda145f2c73b.camel@cybertec.at
Backpatch-through: 13
2025-05-28 08:59:25 +09:00
..
activity Fix typos in comments. 2025-05-03 19:10:02 +09:00
adt Fix conversion of SIMILAR TO regexes for character classes 2025-05-28 08:59:25 +09:00
cache Fix catcache invalidation of a list entry that's being built 2025-01-14 14:29:11 +02:00
error Fix Y2038 issues with MyStartTime. 2024-10-07 13:51:03 -05:00
fmgr Fix type-checking of RECORD-returning functions in FROM, redux. 2024-04-15 12:56:56 -04:00
hash Update copyright for 2022 2022-01-07 19:04:57 -05:00
init Exclude parallel workers from connection privilege/limit checks. 2024-12-28 16:08:50 -05:00
mb With GB18030, prevent SIGSEGV from reading past end of allocation. 2025-05-05 04:52:08 -07:00
misc Mention jsonlog in description of logging_collector in GUC table 2025-02-02 11:31:31 +09:00
mmgr Ignore not-yet-defined Portals in pg_cursors view. 2024-10-06 16:03:48 -04:00
resowner Remove extraneous blank lines before block-closing braces 2022-04-13 19:16:02 +02:00
sort Clarify comment for LogicalTapeSetBlocks(). 2024-03-25 12:00:42 -07:00
time Update TransactionXmin when MyProc->xmin is updated 2024-12-21 23:42:57 +02:00
.gitignore Rearrange makefile rules for running Gen_fmgrtab.pl. 2018-05-03 17:54:18 -04:00
errcodes.txt Add another SQL/JSON error code 2022-07-18 14:27:53 +02:00
Gen_dummy_probes.pl Update copyright for 2022 2022-01-07 19:04:57 -05:00
Gen_dummy_probes.pl.prolog Update copyright for 2022 2022-01-07 19:04:57 -05:00
Gen_dummy_probes.sed Update copyright for 2022 2022-01-07 19:04:57 -05:00
Gen_fmgrtab.pl Update copyright for 2022 2022-01-07 19:04:57 -05:00
generate-errcodes.pl Update copyright for 2022 2022-01-07 19:04:57 -05:00
Makefile Correct Makefile dependencies for catalog scripts 2022-02-14 09:07:09 +07:00
probes.d Update copyright for 2022 2022-01-07 19:04:57 -05:00
README.Gen_dummy_probes Tweak generation of Gen_dummy_probes.pl 2021-05-11 20:02:02 -04:00

# Generating dummy probes

If Postgres isn't configured with dtrace enabled, we need to generate
dummy probes for the entries in probes.d, that do nothing.

This is accomplished in Unix via the sed script `Gen_dummy_probes.sed`. We
used to use this in MSVC builds using the perl utility `psed`, which mimicked
sed. However, that utility disappeared from Windows perl distributions and so
we converted the sed script to a perl script to be used in MSVC builds.

We still keep the sed script as the authoritative source for generating
these dummy probes because except on Windows perl is not a hard requirement
when building from a tarball.

So, if you need to change the way dummy probes are generated, first change
the sed script, and when it's working generate the perl script. This can
be accomplished by using the perl utility s2p.

s2p is no longer part of the perl core, so it might not be on your system,
but it is available on CPAN and also in many package systems. e.g.
on Fedora it can be installed using `cpan App::s2p` or
`dnf install perl-App-s2p`.

The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all
you need to do is once you have s2p installed is `make Gen_dummy_probes.pl`
Note that in a VPATH build this will generate the file in the vpath tree,
not the source tree.