• Tom Lane's avatar
    Fix regexport.c to behave sanely with lookaround constraints. · 6cfaffc0
    Tom Lane authored
    regexport.c thought it could just ignore LACON arcs, but the correct
    behavior is to treat them as satisfiable while consuming zero input
    (rather reminiscently of commit 9f1e642d).  Otherwise, the emitted
    simplified-NFA representation may contain no paths leading from initial
    to final state, which unsurprisingly confuses pg_trgm, as seen in
    bug #14623 from Jeff Janes.
    
    Since regexport's output representation has no concept of an arc that
    consumes zero input, recurse internally to find the next normal arc(s)
    after any LACON transitions.  We'd be forced into changing that
    representation if a LACON could be the last arc reaching the final
    state, but fortunately the regex library never builds NFAs with such
    a configuration, so there always is a next normal arc.
    
    Back-patch to 9.3 where this logic was introduced.
    
    Discussion: https://postgr.es/m/20170413180503.25948.94871@wrigleys.postgresql.org
    6cfaffc0
pg_trgm.sql 5.96 KB