From 08cdb079d4a8a82c687321e9ffe0a3d3fbcc0551 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Thu, 19 Dec 2024 13:57:21 +1300 Subject: [PATCH] Optimize grouping equality checks with virtual slots 8f4ee9626 fixed an old Assert failure that could happen when the slot type used to look up the hash table for BuildTupleHashTableExt() users wasn't a TTSOpsMinimalTuple slot. The fix for that in the back branches had to be to pass the TupleTableSlotOps as NULL, however in master, since we have the inputOps parameter as was added by d96d1d515, we can pass that down instead. At least one caller uses a fixed slot that's always TTSOpsVirtual, so passing down inputOps for these cases allows ExecBuildGroupingEqual() to skip adding the EEOP_INNER_FETCHSOME ExprEvalStep. This should increase the performance of hashed subplans very slightly. Author: Tom Lane, David Rowley Discussion: https://postgr.es/m/2543667.1734483723@sss.pgh.pa.us --- src/backend/executor/execGrouping.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c index a69fa0f8cc..7491e53c03 100644 --- a/src/backend/executor/execGrouping.c +++ b/src/backend/executor/execGrouping.c @@ -237,7 +237,8 @@ BuildTupleHashTableExt(PlanState *parent, /* build comparator for all columns */ hashtable->tab_eq_func = ExecBuildGroupingEqual(inputDesc, inputDesc, - NULL, &TTSOpsMinimalTuple, + inputOps, + &TTSOpsMinimalTuple, numCols, keyColIdx, eqfuncoids, collations, allow_jit ? parent : NULL); -- 2.39.5