postgresql/src/include
David Rowley e502150f7d Allow Memoize to operate in binary comparison mode
Memoize would always use the hash equality operator for the cache key
types to determine if the current set of parameters were the same as some
previously cached set.  Certain types such as floating points where -0.0
and +0.0 differ in their binary representation but are classed as equal by
the hash equality operator may cause problems as unless the join uses the
same operator it's possible that whichever join operator is being used
would be able to distinguish the two values.  In which case we may
accidentally return in the incorrect rows out of the cache.

To fix this here we add a binary mode to Memoize to allow it to the
current set of parameters to previously cached values by comparing
bit-by-bit rather than logically using the hash equality operator.  This
binary mode is always used for LATERAL joins and it's used for normal
joins when any of the join operators are not hashable.

Reported-by: Tom Lane
Author: David Rowley
Discussion: https://postgr.es/m/3004308.1632952496@sss.pgh.pa.us
Backpatch-through: 14, where Memoize was added
2021-11-24 10:06:59 +13:00
..
access Report wait events for local shell commands like archive_command. 2021-11-22 10:28:21 +09:00
bootstrap process startup: Remove bootstrap / checker modes from AuxProcType. 2021-08-05 12:18:15 -07:00
catalog Add SQL functions to monitor the directory contents of replication slots 2021-11-23 19:29:42 +09:00
commands Don't overlook indexes during parallel VACUUM. 2021-11-02 12:06:17 -07:00
common Provide a variant of simple_prompt() that can be interrupted by ^C. 2021-11-17 19:09:54 -05:00
datatype Update copyright for 2021 2021-01-02 13:06:25 -05:00
executor Fix checking of query type in plpgsql's RETURN QUERY command. 2021-10-03 13:21:20 -04:00
fe_utils Unify parsing logic for command-line integer options 2021-07-24 18:35:03 +09:00
foreign Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
jit jit: Do not try to shut down LLVM state in case of LLVM triggered errors. 2021-09-13 18:26:15 -07:00
lib Fix frontend version of sh_error() in simplehash.h. 2021-10-22 16:43:38 -04:00
libpq Remove check for accept() argument types 2021-11-09 15:35:26 +01:00
mb Fix incautious handling of possibly-miscoded strings in client code. 2021-06-07 14:15:25 -04:00
nodes Allow Memoize to operate in binary comparison mode 2021-11-24 10:06:59 +13:00
optimizer Allow Memoize to operate in binary comparison mode 2021-11-24 10:06:59 +13:00
parser Remove Value node struct 2021-09-09 08:36:53 +02:00
partitioning Ensure interleaved_parts field is always initialized 2021-10-01 15:09:49 +13:00
port windows: Define WIN32_LEAN_AND_MEAN to make compilation faster. 2021-10-04 13:16:12 -07:00
portability Fix another portability bug in recent pgbench commit. 2021-03-10 23:20:41 +13:00
postmaster Improve performance of pgarch_readyXlog() with many status files. 2021-11-11 15:20:26 -05:00
regex Avoid determining regexp subexpression matches, when possible. 2021-08-09 11:26:34 -04:00
replication Fix headerscheck failure in replication/worker_internal.h 2021-11-16 13:30:37 -03:00
rewrite Adjust locations which have an incorrect copyright year 2021-06-04 12:19:50 +12:00
snowball Update snowball 2021-02-19 08:10:15 +01:00
statistics Extended statistics on expressions 2021-03-27 00:01:11 +01:00
storage Fix parallel operations that prevent oldest xmin from advancing. 2021-11-19 09:04:40 +05:30
tcop process startup: Split single user code out of PostgresMain(). 2021-09-17 19:56:47 -07:00
tsearch Don't leak compiled regex(es) when an ispell cache entry is dropped. 2021-03-18 22:22:47 -04:00
utils Allow Memoize to operate in binary comparison mode 2021-11-24 10:06:59 +13:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Work around issues in MinGW-64's setjmp/longjmp support. 2021-03-15 12:34:17 -04:00
fmgr.h Add ABI extra field to fmgr magic block 2021-11-22 08:00:14 +01:00
funcapi.h Reconsider the handling of procedure OUT parameters. 2021-06-10 17:11:36 -04:00
getaddrinfo.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
getopt_long.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
Makefile Build in some knowledge about foreign-key relationships in the catalogs. 2021-02-02 17:11:55 -05:00
miscadmin.h Doc: add glossary term for "auxiliary process" 2021-09-20 12:22:02 -03:00
pg_config.h.in Remove check for accept() argument types 2021-11-09 15:35:26 +01:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_manual.h Add ABI extra field to fmgr magic block 2021-11-22 08:00:14 +01:00
pg_getopt.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pg_trace.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgstat.h pgstat: Prepare to use mechanism for truncated rels also for droppped rels. 2021-09-20 14:02:48 -07:00
pgtar.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pgtime.h Fix actively-misleading comments about the contents of struct pg_tm. 2021-09-06 11:43:44 -04:00
port.h Fall back to unsigned int, not int, for socklen_t. 2021-11-11 10:36:39 -05:00
postgres.h Fix misleading comments about TOAST access macros. 2021-09-08 14:11:35 -04:00
postgres_ext.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
postgres_fe.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
rusagestub.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
windowapi.h Update copyright for 2021 2021-01-02 13:06:25 -05:00