diff options
| author | Andres Freund | 2019-03-26 00:14:48 +0000 |
|---|---|---|
| committer | Andres Freund | 2019-03-26 00:14:48 +0000 |
| commit | 2e3da03e9ee4d6ee5cf0d1ffe0227fe6275397e1 (patch) | |
| tree | 1433066c118d8f7f3cba088784b45d5ae16cca75 /src/backend | |
| parent | 71bdc99d0d7c3b2d73fa04fb2ff80870ce1305f7 (diff) | |
tableam: Add table_get_latest_tid, to wrap heap_get_latest_tid.
This primarily is to allow WHERE CURRENT OF to continue to work as it
currently does. It's not clear to me that these semantics make sense
for every AM, but it works for the in-core heap, and the out of core
zheap. We can refine it further at a later point if necessary.
Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/access/heap/heapam_handler.c | 1 | ||||
| -rw-r--r-- | src/backend/executor/nodeTidscan.c | 15 | ||||
| -rw-r--r-- | src/backend/utils/adt/tid.c | 5 |
3 files changed, 7 insertions, 14 deletions
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 00ca71a3d2a..56223921e72 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -542,6 +542,7 @@ static const TableAmRoutine heapam_methods = { .tuple_lock = heapam_tuple_lock, .tuple_fetch_row_version = heapam_fetch_row_version, + .tuple_get_latest_tid = heap_get_latest_tid, .tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot, }; diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c index d8f9eb35570..156be56a57d 100644 --- a/src/backend/executor/nodeTidscan.c +++ b/src/backend/executor/nodeTidscan.c @@ -22,7 +22,6 @@ */ #include "postgres.h" -#include "access/heapam.h" #include "access/sysattr.h" #include "access/tableam.h" #include "catalog/pg_type.h" @@ -308,7 +307,6 @@ TidNext(TidScanState *node) ScanDirection direction; Snapshot snapshot; Relation heapRelation; - HeapTuple tuple; TupleTableSlot *slot; ItemPointerData *tidList; int numTids; @@ -333,12 +331,6 @@ TidNext(TidScanState *node) numTids = node->tss_NumTids; /* - * We use node->tss_htup as the tuple pointer; note this can't just be a - * local variable here, as the scan tuple slot will keep a pointer to it. - */ - tuple = &(node->tss_htup); - - /* * Initialize or advance scan position, depending on direction. */ bBackward = ScanDirectionIsBackward(direction); @@ -365,7 +357,7 @@ TidNext(TidScanState *node) while (node->tss_TidPtr >= 0 && node->tss_TidPtr < numTids) { - tuple->t_self = tidList[node->tss_TidPtr]; + ItemPointerData tid = tidList[node->tss_TidPtr]; /* * For WHERE CURRENT OF, the tuple retrieved from the cursor might @@ -373,10 +365,9 @@ TidNext(TidScanState *node) * current according to our snapshot. */ if (node->tss_isCurrentOf) - heap_get_latest_tid(heapRelation, snapshot, &tuple->t_self); + table_get_latest_tid(heapRelation, snapshot, &tid); - if (table_fetch_row_version(heapRelation, &tuple->t_self, snapshot, - slot)) + if (table_fetch_row_version(heapRelation, &tid, snapshot, slot)) return slot; /* Bad TID or failed snapshot qual; try next */ diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c index 8c62771261d..6ab26d8ea8b 100644 --- a/src/backend/utils/adt/tid.c +++ b/src/backend/utils/adt/tid.c @@ -22,6 +22,7 @@ #include "access/heapam.h" #include "access/sysattr.h" +#include "access/tableam.h" #include "catalog/namespace.h" #include "catalog/pg_type.h" #include "libpq/pqformat.h" @@ -379,7 +380,7 @@ currtid_byreloid(PG_FUNCTION_ARGS) ItemPointerCopy(tid, result); snapshot = RegisterSnapshot(GetLatestSnapshot()); - heap_get_latest_tid(rel, snapshot, result); + table_get_latest_tid(rel, snapshot, result); UnregisterSnapshot(snapshot); table_close(rel, AccessShareLock); @@ -414,7 +415,7 @@ currtid_byrelname(PG_FUNCTION_ARGS) ItemPointerCopy(tid, result); snapshot = RegisterSnapshot(GetLatestSnapshot()); - heap_get_latest_tid(rel, snapshot, result); + table_get_latest_tid(rel, snapshot, result); UnregisterSnapshot(snapshot); table_close(rel, AccessShareLock); |
