From 5c1fe914303a970a812579da41aca9286abe442b Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Sat, 13 Feb 2021 09:37:53 +0530 Subject: [PATCH v1] Remove unnecessary wrapping of MakeTupleTableSlot in MakeSingleTupleTableSlot Currently, MakeSingleTupleTableSlot function just calls another function MakeTupleTableSlot to return the final slot without doing anything on the slot returned by the MakeTupleTableSlot. We can avoid some unnecessary function call costs, for instance when called 1000 times inside table_slot_create from copyfrom.c or in some other places where MakeSingleTupleTableSlot is called in a loop. This patch just renames MakeTupleTableSlot to MakeSingleTupleTableSlot and removes existing MakeSingleTupleTableSlot function and also replaces MakeTupleTableSlot with MakeSingleTupleTableSlot. --- src/backend/executor/execMain.c | 8 ++++---- src/backend/executor/execTuples.c | 24 +++--------------------- src/include/executor/tuptable.h | 2 -- 3 files changed, 7 insertions(+), 27 deletions(-) diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index c74ce36ffb..36d01dfcd4 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1749,7 +1749,7 @@ ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo, */ if (map != NULL) slot = execute_attr_map_slot(map, slot, - MakeTupleTableSlot(tupdesc, &TTSOpsVirtual)); + MakeSingleTupleTableSlot(tupdesc, &TTSOpsVirtual)); modifiedCols = bms_union(ExecGetInsertedCols(rootrel, estate), ExecGetUpdatedCols(rootrel, estate)); } @@ -1834,7 +1834,7 @@ ExecConstraints(ResultRelInfo *resultRelInfo, */ if (map != NULL) slot = execute_attr_map_slot(map, slot, - MakeTupleTableSlot(tupdesc, &TTSOpsVirtual)); + MakeSingleTupleTableSlot(tupdesc, &TTSOpsVirtual)); modifiedCols = bms_union(ExecGetInsertedCols(rootrel, estate), ExecGetUpdatedCols(rootrel, estate)); rel = rootrel->ri_RelationDesc; @@ -1886,7 +1886,7 @@ ExecConstraints(ResultRelInfo *resultRelInfo, */ if (map != NULL) slot = execute_attr_map_slot(map, slot, - MakeTupleTableSlot(tupdesc, &TTSOpsVirtual)); + MakeSingleTupleTableSlot(tupdesc, &TTSOpsVirtual)); modifiedCols = bms_union(ExecGetInsertedCols(rootrel, estate), ExecGetUpdatedCols(rootrel, estate)); rel = rootrel->ri_RelationDesc; @@ -1993,7 +1993,7 @@ ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo, */ if (map != NULL) slot = execute_attr_map_slot(map, slot, - MakeTupleTableSlot(tupdesc, &TTSOpsVirtual)); + MakeSingleTupleTableSlot(tupdesc, &TTSOpsVirtual)); modifiedCols = bms_union(ExecGetInsertedCols(rootrel, estate), ExecGetUpdatedCols(rootrel, estate)); diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 73c35df9c9..f0aafc2198 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -1070,7 +1070,7 @@ const TupleTableSlotOps TTSOpsBufferHeapTuple = { */ /* -------------------------------- - * MakeTupleTableSlot + * MakeSingleTupleTableSlot * * Basic routine to make an empty TupleTableSlot of given * TupleTableSlotType. If tupleDesc is specified the slot's descriptor is @@ -1079,7 +1079,7 @@ const TupleTableSlotOps TTSOpsBufferHeapTuple = { * -------------------------------- */ TupleTableSlot * -MakeTupleTableSlot(TupleDesc tupleDesc, +MakeSingleTupleTableSlot(TupleDesc tupleDesc, const TupleTableSlotOps *tts_ops) { Size basesz, @@ -1141,7 +1141,7 @@ TupleTableSlot * ExecAllocTableSlot(List **tupleTable, TupleDesc desc, const TupleTableSlotOps *tts_ops) { - TupleTableSlot *slot = MakeTupleTableSlot(desc, tts_ops); + TupleTableSlot *slot = MakeSingleTupleTableSlot(desc, tts_ops); *tupleTable = lappend(*tupleTable, slot); @@ -1195,24 +1195,6 @@ ExecResetTupleTable(List *tupleTable, /* tuple table */ list_free(tupleTable); } -/* -------------------------------- - * MakeSingleTupleTableSlot - * - * This is a convenience routine for operations that need a standalone - * TupleTableSlot not gotten from the main executor tuple table. It makes - * a single slot of given TupleTableSlotType and initializes it to use the - * given tuple descriptor. - * -------------------------------- - */ -TupleTableSlot * -MakeSingleTupleTableSlot(TupleDesc tupdesc, - const TupleTableSlotOps *tts_ops) -{ - TupleTableSlot *slot = MakeTupleTableSlot(tupdesc, tts_ops); - - return slot; -} - /* -------------------------------- * ExecDropSingleTupleTableSlot * diff --git a/src/include/executor/tuptable.h b/src/include/executor/tuptable.h index 679e57fbdd..54ec4514b5 100644 --- a/src/include/executor/tuptable.h +++ b/src/include/executor/tuptable.h @@ -293,8 +293,6 @@ typedef struct MinimalTupleTableSlot ((slot) == NULL || TTS_EMPTY(slot)) /* in executor/execTuples.c */ -extern TupleTableSlot *MakeTupleTableSlot(TupleDesc tupleDesc, - const TupleTableSlotOps *tts_ops); extern TupleTableSlot *ExecAllocTableSlot(List **tupleTable, TupleDesc desc, const TupleTableSlotOps *tts_ops); extern void ExecResetTupleTable(List *tupleTable, bool shouldFree); -- 2.25.1