*
* Maybe these implementations should be moved to another place
*/
+static ItemPointerData Current_last_tid = { {0, 0}, 0};
+void setLastTid(const ItemPointer tid)
+{
+ Current_last_tid = *tid;
+}
Datum
currtid_byreloid(PG_FUNCTION_ARGS)
{
Oid reloid = PG_GETARG_OID(0);
ItemPointer tid = PG_GETARG_ITEMPOINTER(1);
- ItemPointer result,
- ret;
+ ItemPointer result;
Relation rel;
result = (ItemPointer) palloc(sizeof(ItemPointerData));
- ItemPointerSetInvalid(result);
+ if (!reloid)
+ {
+ *result = Current_last_tid;
+ PG_RETURN_ITEMPOINTER(result);
+ }
+ ItemPointerCopy(tid, result);
if ((rel = heap_open(reloid, AccessShareLock)) != NULL)
{
- ret = heap_get_latest_tid(rel, SnapshotNow, tid);
- if (ret)
- ItemPointerCopy(ret, result);
+ heap_get_latest_tid(rel, SnapshotNow, result);
heap_close(rel, AccessShareLock);
}
else
{
text *relname = PG_GETARG_TEXT_P(0);
ItemPointer tid = PG_GETARG_ITEMPOINTER(1);
- ItemPointer result,
- ret;
+ ItemPointer result;
char *str;
Relation rel;
PointerGetDatum(relname)));
result = (ItemPointer) palloc(sizeof(ItemPointerData));
- ItemPointerSetInvalid(result);
+ ItemPointerCopy(tid, result);
if ((rel = heap_openr(str, AccessShareLock)) != NULL)
{
- ret = heap_get_latest_tid(rel, SnapshotNow, tid);
- if (ret)
- ItemPointerCopy(ret, result);
+ heap_get_latest_tid(rel, SnapshotNow, result);
heap_close(rel, AccessShareLock);
}
else
extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw);
extern void heap_fetch(Relation relation, Snapshot snapshot, HeapTuple tup, Buffer *userbuf);
extern ItemPointer heap_get_latest_tid(Relation relation, Snapshot snapshot, ItemPointer tid);
+extern void setLastTid(const ItemPointer tid);
extern Oid heap_insert(Relation relation, HeapTuple tup);
extern int heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid);
extern int heap_update(Relation relation, ItemPointer otid, HeapTuple tup,