Fix the general case of quantified regex back-references.
Cases where a back-reference is part of a larger subexpression that
is quantified have never worked in Spencer's regex engine, because
he used a compile-time transformation that neglected the need to
check the back-reference match in iterations before the last one.
(That was okay for capturing parens, and we still do it if the
regex has *only* capturing parens ... but it's not okay for backrefs.)
To make this work properly, we have to add an "iteration" node type
to the regex engine's vocabulary of sub-regex nodes. Since this is a
moderately large change with a fair risk of introducing new bugs of its
own, apply to HEAD only, even though it's a fix for a longstanding bug.
src/backend/regex/README | 18 +-
src/backend/regex/regcomp.c | 88 +++--
src/backend/regex/regexec.c | 764 ++++++++++++++++++++++++++++++++++-
src/include/regex/regguts.h | 24 +-
src/test/regress/expected/regex.out | 37 ++
src/test/regress/sql/regex.sql | 8 +
6 files changed, 884 insertions(+), 55 deletions(-)
pgsql-committers by date
|Next:||From: Peter Eisentraut||Date: 2012-02-24 09:05:45|
|Subject: pgsql: Add some enumeration commas, for consistency|
|Previous:||From: Andrew Dunstan||Date: 2012-02-24 04:45:20|
|Subject: pgsql: Correctly handle NULLs in JSON output.|