summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/subselect.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-01-16 16:39:26 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2022-01-16 16:39:26 -0500
commit17da9d4c28297fd699cbbda969a9f64c4c09c665 (patch)
tree377a335283dc6020153257f991980015c9acd308 /src/backend/optimizer/plan/subselect.c
parentd91d4338e05486f943361260b9d4ad54421d3b44 (diff)
Teach hash_ok_operator() that record_eq is only sometimes hashable.
The need for this was foreseen long ago, but when record_eq actually became hashable (in commit 01e658fa7), we missed updating this spot. Per bug #17363 from Elvis Pranskevichus. Back-patch to v14 where the faulty commit came in. Discussion: https://postgr.es/m/17363-f6d42fd0d726be02@postgresql.org
Diffstat (limited to 'src/backend/optimizer/plan/subselect.c')
-rw-r--r--src/backend/optimizer/plan/subselect.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c
index aee52951833..5d0680821b5 100644
--- a/src/backend/optimizer/plan/subselect.c
+++ b/src/backend/optimizer/plan/subselect.c
@@ -848,10 +848,10 @@ hash_ok_operator(OpExpr *expr)
/* quick out if not a binary operator */
if (list_length(expr->args) != 2)
return false;
- if (opid == ARRAY_EQ_OP)
+ if (opid == ARRAY_EQ_OP ||
+ opid == RECORD_EQ_OP)
{
- /* array_eq is strict, but must check input type to ensure hashable */
- /* XXX record_eq will need same treatment when it becomes hashable */
+ /* these are strict, but must check input type to ensure hashable */
Node *leftarg = linitial(expr->args);
return op_hashjoinable(opid, exprType(leftarg));