postgresql/src/test/modules
Tom Lane 244dd79923 Fix regexp misbehavior with capturing parens inside "{0}".
Regexps like "(.){0}...\1" drew an "invalid backreference number".
That's not unreasonable on its face, since the capture group will
never be matched if it's iterated zero times.  However, other engines
such as Perl's don't complain about this, nor do we throw an error for
related cases such as "(.)|\1", even though that backref can never
succeed either.  Also, if the zero-iterations case happens at runtime
rather than compile time --- say, "(x)*...\1" when there's no "x" to
be found --- that's not an error, we just deem the backref to not
match.  Making this even less defensible, no error was thrown for
nested cases such as "((.)){0}...\2"; and to add insult to injury,
those cases could result in assertion failures instead.  (It seems
that nothing especially bad happened in non-assert builds, though.)

Let's just fix it so that no error is thrown and instead the backref
is deemed to never match, so that compile-time detection of no
iterations behaves the same as run-time detection.

Per report from Mark Dilger.  This appears to be an aboriginal error
in Spencer's library, so back-patch to all supported versions.

Pre-v14, it turns out to also be necessary to back-patch one aspect of
commits cb76fbd7e/00116dee5, namely to create capture-node subREs with
the begin/end states of their subexpressions, not the current lp/rp
of the outer parseqatom invocation.  Otherwise delsub complains that
we're trying to disconnect a state from itself.  This is a bit scary
but code examination shows that it's safe: in the pre-v14 code, if we
want to wrap iteration around the subexpression, the first thing we do
is overwrite the atom's begin/end fields with new states.  So the
bogus values didn't survive long enough to be used for anything, except
if no iteration is required, in which case it doesn't matter.

Discussion: https://postgr.es/m/A099E4A8-4377-4C64-A98C-3DEDDC075502@enterprisedb.com
2021-08-24 16:37:27 -04:00
..
brin Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
commit_ts Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
delay_execution Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
dummy_index_am Pass down "logically unchanged index" hint. 2021-01-13 08:11:00 -08:00
dummy_seclabel Update copyright for 2021 2021-01-02 13:06:25 -05:00
libpq_pipeline libpq: Fix sending queries in pipeline aborted state 2021-07-09 15:57:59 -04:00
plsample Update copyright for 2021 2021-01-02 13:06:25 -05:00
snapshot_too_old Improve display of query results in isolation tests. 2021-06-23 11:13:00 -04:00
spgist_name_ops Prevent infinite insertion loops in spgdoinsert(). 2021-05-14 15:07:34 -04:00
ssl_passphrase_callback Add a copyright notice to perl files lacking one. 2021-05-07 10:56:14 -04:00
test_bloomfilter Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_ddl_deparse Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_extensions Fix use-after-free bug with event triggers in an extension script 2020-09-15 21:03:14 -03:00
test_ginpostinglist Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_integerset Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_misc Add a copyright notice to perl files lacking one. 2021-05-07 10:56:14 -04:00
test_parser Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_pg_dump Add a copyright notice to perl files lacking one. 2021-05-07 10:56:14 -04:00
test_predtest Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_rbtree Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_regex Fix regexp misbehavior with capturing parens inside "{0}". 2021-08-24 16:37:27 -04:00
test_rls_hooks Update copyright for 2021 2021-01-02 13:06:25 -05:00
test_shm_mq Avoid using ambiguous word "non-negative" in error messages. 2021-07-28 01:21:35 +09:00
unsafe_tests Add primary keys and unique constraints to system catalogs 2021-01-30 19:44:29 +01:00
worker_spi Update copyright for 2021 2021-01-02 13:06:25 -05:00
Makefile Fix confusion in SP-GiST between attribute type and leaf storage type. 2021-04-04 14:28:57 -04:00
README Add an enforcement mechanism for global object names in regression tests. 2019-06-29 11:34:00 -04:00

Test extensions and libraries
=============================

src/test/modules contains PostgreSQL extensions that are primarily or entirely
intended for testing PostgreSQL and/or to serve as example code. The extensions
here aren't intended to be installed in a production server and aren't suitable
for "real work".

Furthermore, while you can do "make install" and "make installcheck" in
this directory or its children, it is NOT ADVISABLE to do so with a server
containing valuable data.  Some of these tests may have undesirable
side-effects on roles or other global objects within the tested server.
"make installcheck-world" at the top level does not recurse into this
directory.

Most extensions have their own pg_regress tests or isolationtester specs. Some
are also used by tests elsewhere in the tree.

If you're adding new hooks or other functionality exposed as C-level API this
is where to add the tests for it.