• Tom Lane's avatar
    Ensure that a tsquery like '!foo' matches empty tsvectors. · 9d4ca013
    Tom Lane authored
    !foo means "the tsvector does not contain foo", and therefore it should
    match an empty tsvector.  ts_match_vq() overenthusiastically supposed
    that an empty tsvector could never match any query, so it forcibly
    returned FALSE, the wrong answer.  Remove the premature optimization.
    
    Our behavior on this point was inconsistent, because while seqscans and
    GIST index searches both failed to match empty tsvectors, GIN index
    searches would find them, since GIN scans don't rely on ts_match_vq().
    That makes this certainly a bug, not a debatable definition disagreement,
    so back-patch to all supported branches.
    
    Report and diagnosis by Tom Dunstan (bug #14515); added test cases by me.
    
    Discussion: https://postgr.es/m/20170126025524.1434.97828@wrigleys.postgresql.org
    9d4ca013
tsearch.out 46.9 KB