• Tom Lane's avatar
    Fix corner-case failure in match_pattern_prefix(). · b3c265d7
    Tom Lane authored
    The planner's optimization code for LIKE and regex operators could
    error out with a complaint like "no = operator for opfamily NNN"
    if someone created a binary-compatible index (for example, a
    bpchar_ops index on a text column) on the LIKE's left argument.
    
    This is a consequence of careless refactoring in commit 74dfe58a.
    The old code in match_special_index_operator only accepted specific
    combinations of the pattern operator and the index opclass, thereby
    indirectly guaranteeing that the opclass would have a comparison
    operator with the same LHS input type as the pattern operator.
    While moving the logic out to a planner support function, I simplified
    that test in a way that no longer guarantees that.  Really though we'd
    like an altogether weaker dependency on the opclass, so rather than
    put back exactly the old code, just allow lookup failure.  I have in
    mind now to rewrite this logic completely, but this is the minimum
    change needed to fix the bug in v12.
    
    Per report from Manuel Rigger.  Back-patch to v12 where the mistake
    came in.
    
    Discussion: https://postgr.es/m/CA+u7OA7nnGYy8rY0vdTe811NuA+Frr9nbcBO9u2Z+JxqNaud+g@mail.gmail.com
    b3c265d7
like_support.c 48 KB