pgsql: Fix cross-type case in partial row matching for hashed subplans. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix cross-type case in partial row matching for hashed subplans.
Date
Msg-id E1TMLWt-0005Cd-Rp@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix cross-type case in partial row matching for hashed subplans.

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.

Branch
------
REL8_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/55eaeef0b9314c40b7124ae37b33e0d61383bf3d

Modified Files
--------------
src/backend/executor/nodeSubplan.c      |   17 +++++++++++------
src/test/regress/expected/subselect.out |   17 +++++++++++++++++
src/test/regress/sql/subselect.sql      |   15 +++++++++++++++
3 files changed, 43 insertions(+), 6 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Fix cross-type case in partial row matching for hashed subplans.
Next
From: Tom Lane
Date:
Subject: pgsql: Fix cross-type case in partial row matching for hashed subplans.