mirror of
https://github.com/postgres/postgres.git
synced 2025-10-29 22:49:41 +03:00
Deduplicate code in LargeObjectExists and myLargeObjectExists.
myLargeObjectExists() and LargeObjectExists() had nearly identical code, except for handling snapshots. This commit renames myLargeObjectExists() to LargeObjectExistsWithSnapshot() and refactors LargeObjectExists() to call it internally, reducing duplication. Author: Yugo Nagata Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/20240702163444.ab586f6075e502eb84f11b1a@sranhm.sraoss.co.jp
This commit is contained in:
@@ -41,7 +41,6 @@
|
||||
#include "catalog/indexing.h"
|
||||
#include "catalog/objectaccess.h"
|
||||
#include "catalog/pg_largeobject.h"
|
||||
#include "catalog/pg_largeobject_metadata.h"
|
||||
#include "libpq/libpq-fs.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/large_object.h"
|
||||
@@ -123,43 +122,6 @@ close_lo_relation(bool isCommit)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Same as pg_largeobject.c's LargeObjectExists(), except snapshot to
|
||||
* read with can be specified.
|
||||
*/
|
||||
static bool
|
||||
myLargeObjectExists(Oid loid, Snapshot snapshot)
|
||||
{
|
||||
Relation pg_lo_meta;
|
||||
ScanKeyData skey[1];
|
||||
SysScanDesc sd;
|
||||
HeapTuple tuple;
|
||||
bool retval = false;
|
||||
|
||||
ScanKeyInit(&skey[0],
|
||||
Anum_pg_largeobject_metadata_oid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(loid));
|
||||
|
||||
pg_lo_meta = table_open(LargeObjectMetadataRelationId,
|
||||
AccessShareLock);
|
||||
|
||||
sd = systable_beginscan(pg_lo_meta,
|
||||
LargeObjectMetadataOidIndexId, true,
|
||||
snapshot, 1, skey);
|
||||
|
||||
tuple = systable_getnext(sd);
|
||||
if (HeapTupleIsValid(tuple))
|
||||
retval = true;
|
||||
|
||||
systable_endscan(sd);
|
||||
|
||||
table_close(pg_lo_meta, AccessShareLock);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Extract data field from a pg_largeobject tuple, detoasting if needed
|
||||
* and verifying that the length is sane. Returns data pointer (a bytea *),
|
||||
@@ -279,7 +241,7 @@ inv_open(Oid lobjId, int flags, MemoryContext mcxt)
|
||||
snapshot = GetActiveSnapshot();
|
||||
|
||||
/* Can't use LargeObjectExists here because we need to specify snapshot */
|
||||
if (!myLargeObjectExists(lobjId, snapshot))
|
||||
if (!LargeObjectExistsWithSnapshot(lobjId, snapshot))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("large object %u does not exist", lobjId)));
|
||||
|
||||
Reference in New Issue
Block a user