pgsql: Invent "rainbow" arcs within the regex engine.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Invent "rainbow" arcs within the regex engine.
Date: 2021-02-21 00:26:59
Message-ID: E1lDcaR-0004iU-Gn@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Invent "rainbow" arcs within the regex engine.

Some regular expression constructs, most notably the "." match-anything
metacharacter, produce a sheaf of parallel NFA arcs covering all
possible colors (that is, character equivalence classes). We can make
a noticeable improvement in the space and time needed to process large
regexes by replacing such cases with a single arc bearing the special
color code "RAINBOW". This requires only minor additional complication
in places such as pull() and push().

Callers of pg_reg_getoutarcs() must now be prepared for the possibility
of seeing a RAINBOW arc. For the one known user, contrib/pg_trgm,
that's a net benefit since it cuts the number of arcs to be dealt with,
and the handling isn't any different than for other colors that contain
too many characters to be dealt with individually.

This is part of a patch series that in total reduces the regex engine's
runtime by about a factor of four on a large corpus of real-world regexes.

Patch by me, reviewed by Joel Jacobson

Discussion: https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/08c0d6ad65f7c161add82ae906efb90dbd7f653d

Modified Files
--------------
contrib/pg_trgm/trgm_regexp.c | 27 +++++++++-----
src/backend/regex/README | 36 ++++++++++++++-----
src/backend/regex/regc_color.c | 22 +++++++++++-
src/backend/regex/regc_nfa.c | 82 +++++++++++++++++++++++++++++++++++++-----
src/backend/regex/regcomp.c | 12 ++++---
src/backend/regex/rege_dfa.c | 5 ++-
src/backend/regex/regexport.c | 7 ++--
src/backend/regex/regprefix.c | 8 +++--
src/include/regex/regexport.h | 4 +++
src/include/regex/regguts.h | 11 +++++-
10 files changed, 177 insertions(+), 37 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2021-02-22 00:46:55 pgsql: Fix invalid array access in trgm_regexp.c.
Previous Message Michael Paquier 2021-02-20 01:31:58 pgsql: doc: Mention that partitions_{done,total} is 0 for REINDEX progr