• Tom Lane's avatar
    Fix cross-type case in partial row matching for hashed subplans. · 4816d2ea
    Tom Lane authored
    When hashing a subplan like "WHERE (a, b) NOT IN (SELECT x, y FROM ...)",
    findPartialMatch() attempted to match rows using the hashtable's internal
    equality operators, which of course are for x and y's datatypes.  What we
    need to use are the potentially cross-type operators for a=x, b=y, etc.
    Failure to do that leads to wrong answers or even crashes.  The scope for
    problems is limited to cases where we have different types with compatible
    hash functions (else we'd not be using a hashed subplan), but for example
    int4 vs int8 can cause the problem.
    
    Per bug #7597 from Bo Jensen.  This has been wrong since the hashed-subplan
    code was written, so patch all the way back.
    4816d2ea
nodeSubplan.c 34.7 KB