mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
tableam: Add and use table_fetch_row_version().
This is essentially the tableam version of heapam_fetch(), i.e. fetching a tuple identified by a tid, performing visibility checks. Note that this different from table_index_fetch_tuple(), which is for index lookups. It therefore has to handle a tid pointing to an earlier version of a tuple if the AM uses an optimization like heap's HOT. Add comments to that end. This commit removes the stats_relation argument from heap_fetch, as it's been unused for a long time. Author: Andres Freund Reviewed-By: Haribabu Kommi Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
This commit is contained in:
@@ -310,7 +310,6 @@ TidNext(TidScanState *node)
|
||||
Relation heapRelation;
|
||||
HeapTuple tuple;
|
||||
TupleTableSlot *slot;
|
||||
Buffer buffer = InvalidBuffer;
|
||||
ItemPointerData *tidList;
|
||||
int numTids;
|
||||
bool bBackward;
|
||||
@@ -376,19 +375,10 @@ TidNext(TidScanState *node)
|
||||
if (node->tss_isCurrentOf)
|
||||
heap_get_latest_tid(heapRelation, snapshot, &tuple->t_self);
|
||||
|
||||
if (heap_fetch(heapRelation, snapshot, tuple, &buffer, NULL))
|
||||
{
|
||||
/*
|
||||
* Store the scanned tuple in the scan tuple slot of the scan
|
||||
* state, transferring the pin to the slot.
|
||||
*/
|
||||
ExecStorePinnedBufferHeapTuple(tuple, /* tuple to store */
|
||||
slot, /* slot to store in */
|
||||
buffer); /* buffer associated with
|
||||
* tuple */
|
||||
|
||||
if (table_fetch_row_version(heapRelation, &tuple->t_self, snapshot,
|
||||
slot))
|
||||
return slot;
|
||||
}
|
||||
|
||||
/* Bad TID or failed snapshot qual; try next */
|
||||
if (bBackward)
|
||||
node->tss_TidPtr--;
|
||||
|
Reference in New Issue
Block a user