From: Andres Freund Date: Wed, 27 Feb 2019 02:15:59 +0000 (-0800) Subject: Allow to use HeapTupleData embedded in [Buffer]HeapTupleTableSlot. X-Git-Tag: REL_12_BETA1~667 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5408e233f0667478e7f2a3e4b914e14217e20729;p=postgresql Allow to use HeapTupleData embedded in [Buffer]HeapTupleTableSlot. That avoids having to care about the lifetime of the HeapTupleHeaderData passed to ExecStore[Buffer]HeapTuple(). That doesn't make a huge difference for a plain HeapTupleTableSlot, but for BufferHeapTupleTableSlot it can be a significant advantage, avoiding the need to materialize slots where it's inconvenient to provide a HeapTupleData with appropriate lifetime to point to the on-disk tuple. It's quite possible that we'll want to add support functions for constructing HeapTuples using that embedded HeapTupleData, but for now callers do so themselves. Author: Andres Freund Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de --- diff --git a/src/include/executor/tuptable.h b/src/include/executor/tuptable.h index 8da0b84dd7..1e94beafac 100644 --- a/src/include/executor/tuptable.h +++ b/src/include/executor/tuptable.h @@ -16,6 +16,7 @@ #include "access/htup.h" #include "access/tupdesc.h" +#include "access/htup_details.h" #include "storage/buf.h" /*---------- @@ -246,6 +247,7 @@ typedef struct HeapTupleTableSlot HeapTuple tuple; /* physical tuple */ #define FIELDNO_HEAPTUPLETABLESLOT_OFF 2 uint32 off; /* saved state for slot_deform_heap_tuple */ + HeapTupleData tupdata; /* optional workspace for storing tuple */ } HeapTupleTableSlot; /* heap tuple residing in a buffer */