• Tom Lane's avatar
    Straighten out leakproofness markings on text comparison functions. · c160b892
    Tom Lane authored
    Since we introduced the idea of leakproof functions, texteq and textne
    were marked leakproof but their sibling text comparison functions were
    not.  This inconsistency seemed justified because texteq/textne just
    relied on memcmp() and so could easily be seen to be leakproof, while
    the other comparison functions are far more complex and indeed can
    throw input-dependent errors.
    
    However, that argument crashed and burned with the addition of
    nondeterministic collations, because now texteq/textne may invoke
    the exact same varstr_cmp() infrastructure as the rest.  It makes no
    sense whatever to give them different leakproofness markings.
    
    After a certain amount of angst we've concluded that it's all right
    to consider varstr_cmp() to be leakproof, mostly because the other
    choice would be disastrous for performance of many queries where
    leakproofness matters.  The input-dependent errors should only be
    reachable for corrupt input data, or so we hope anyway; certainly,
    if they are reachable in practice, we've got problems with requirements
    as basic as maintaining a btree index on a text column.
    
    Hence, run around to all the SQL functions that derive from varstr_cmp()
    and mark them leakproof.  This should result in a useful gain in
    flexibility/performance for queries in which non-leakproofness degrades
    the efficiency of the query plan.
    
    Back-patch to v12 where nondeterministic collations were added.
    While this isn't an essential bug fix given the determination
    that varstr_cmp() is leakproof, we might as well apply it now that
    we've been forced into a post-beta4 catversion bump.
    
    Discussion: https://postgr.es/m/31481.1568303470@sss.pgh.pa.us
    c160b892
catversion.h 2.53 KB