pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: David Rowley <drowley@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Don't store intermediate hash values in ExprState->resvalue
Date: Thu, 17 Oct 2024 01:25:25 +0000
Message-ID: <E1t1FGY-001AEF-19@gemulon.postgresql.org> (raw)

Don't store intermediate hash values in ExprState->resvalue

adf97c156 made it so ExprStates could support hashing and changed Hash
Join to use that instead of manually extracting Datums from tuples and
hashing them one column at a time.

When hashing multiple columns or expressions, the code added in that
commit stored the intermediate hash value in the ExprState's resvalue
field.  That was a mistake as steps may be injected into the ExprState
between each hashing step that look at or overwrite the stored
intermediate hash value.  EEOP_PARAM_SET is an example of such a step.

Here we fix this by adding a new dedicated field for storing
intermediate hash values and adjust the code so that all apart from the
final hashing step store their result in the intermediate field.

In passing, rename a variable so that it's more aligned to the
surrounding code and also so a few lines stay within the 80 char margin.

Reported-by: Andres Freund
Reviewed-by: Alena Rybakina <a.rybakina@postgrespro.ru>
Discussion: https://postgr.es/m/CAApHDvqo9eenEFXND5zZ9JxO_k4eTA4jKMGxSyjdTrsmYvnmZw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/9ca67658d19e6c258eb4021a326ed7d38b3ab75f

Modified Files
--------------
src/backend/executor/execExpr.c       | 35 +++++++++++++++++++---
src/backend/executor/execExprInterp.c | 16 +++++-----
src/backend/jit/llvm/llvmjit_expr.c   | 18 ++++++++----
src/include/executor/execExpr.h       |  1 +
src/test/regress/expected/join.out    | 55 +++++++++++++++++++++++++++++++++++
src/test/regress/sql/join.sql         | 21 +++++++++++++
6 files changed, 129 insertions(+), 17 deletions(-)



Message-ID: <E1t1FGY-001AEF-19@gemulon.postgresql.org>
Permalink:  ../E1t1FGY-001AEF-19@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1t1FGY-001AEF-19@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: drowley@postgresql.org, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Don't store intermediate hash values in ExprState->resvalue
  In-Reply-To: <E1t1FGY-001AEF-19@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox