• Tom Lane's avatar
    Fix issues around strictness of SIMILAR TO. · ca70bdae
    Tom Lane authored
    As a result of some long-ago quick hacks, the SIMILAR TO operator
    and the corresponding flavor of substring() interpreted "ESCAPE NULL"
    as selecting the default escape character '\'.  This is both
    surprising and not per spec: the standard is clear that these
    functions should return NULL for NULL input.
    
    Additionally, because of inconsistency of the strictness markings
    of 3-argument substring() and similar_escape(), the planner could not
    inline the SQL definition of substring(), resulting in a substantial
    performance penalty compared to the underlying POSIX substring()
    function.
    
    The simplest fix for this would be to change the strictness marking
    of similar_escape(), but if we do that we risk breaking existing views
    that depend on that function.  Hence, leave similar_escape() as-is
    as a compatibility function, and instead invent a new function
    similar_to_escape() that comes in two strict variants.
    
    There are a couple of other behaviors in this area that are also
    not per spec, but they are documented and seem generally at least
    as sane as the spec's definition, so leave them alone.  But improve
    the documentation to describe them fully.
    
    Patch by me; thanks to Álvaro Herrera and Andrew Gierth for review
    and discussion.
    
    Discussion: https://postgr.es/m/14047.1557708214@sss.pgh.pa.us
    ca70bdae
strings.sql 21.2 KB