Commit 5408e233 authored by Andres Freund's avatar Andres Freund

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
parent 8aa02b52
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "access/htup.h" #include "access/htup.h"
#include "access/tupdesc.h" #include "access/tupdesc.h"
#include "access/htup_details.h"
#include "storage/buf.h" #include "storage/buf.h"
/*---------- /*----------
...@@ -246,6 +247,7 @@ typedef struct HeapTupleTableSlot ...@@ -246,6 +247,7 @@ typedef struct HeapTupleTableSlot
HeapTuple tuple; /* physical tuple */ HeapTuple tuple; /* physical tuple */
#define FIELDNO_HEAPTUPLETABLESLOT_OFF 2 #define FIELDNO_HEAPTUPLETABLESLOT_OFF 2
uint32 off; /* saved state for slot_deform_heap_tuple */ uint32 off; /* saved state for slot_deform_heap_tuple */
HeapTupleData tupdata; /* optional workspace for storing tuple */
} HeapTupleTableSlot; } HeapTupleTableSlot;
/* heap tuple residing in a buffer */ /* heap tuple residing in a buffer */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment