#include "postgres.h"
#include "access/genam.h"
#include "access/heapam.h"
#include "access/htup_details.h"
#include "access/sysattr.h"
#include "catalog/dependency.h"
#include "catalog/indexing.h"
#include "catalog/pg_largeobject.h"
#include "catalog/pg_largeobject_metadata.h"
#include "miscadmin.h"
#include "utils/acl.h"
#include "utils/fmgroids.h"
#include "utils/rel.h"
#include "utils/tqual.h"
Go to the source code of this file.
Functions | |
Oid | LargeObjectCreate (Oid loid) |
void | LargeObjectDrop (Oid loid) |
bool | LargeObjectExists (Oid loid) |
Definition at line 40 of file pg_largeobject.c.
References Anum_pg_largeobject_metadata_lomacl, Anum_pg_largeobject_metadata_lomowner, Assert, CatalogUpdateIndexes(), GetUserId(), heap_close, heap_form_tuple(), heap_freetuple(), heap_open(), HeapTupleSetOid, LargeObjectMetadataRelationId, ObjectIdGetDatum, OidIsValid, RelationGetDescr, RowExclusiveLock, simple_heap_insert(), and values.
Referenced by inv_create().
{ Relation pg_lo_meta; HeapTuple ntup; Oid loid_new; Datum values[Natts_pg_largeobject_metadata]; bool nulls[Natts_pg_largeobject_metadata]; pg_lo_meta = heap_open(LargeObjectMetadataRelationId, RowExclusiveLock); /* * Insert metadata of the largeobject */ memset(values, 0, sizeof(values)); memset(nulls, false, sizeof(nulls)); values[Anum_pg_largeobject_metadata_lomowner - 1] = ObjectIdGetDatum(GetUserId()); nulls[Anum_pg_largeobject_metadata_lomacl - 1] = true; ntup = heap_form_tuple(RelationGetDescr(pg_lo_meta), values, nulls); if (OidIsValid(loid)) HeapTupleSetOid(ntup, loid); loid_new = simple_heap_insert(pg_lo_meta, ntup); Assert(!OidIsValid(loid) || loid == loid_new); CatalogUpdateIndexes(pg_lo_meta, ntup); heap_freetuple(ntup); heap_close(pg_lo_meta, RowExclusiveLock); return loid_new; }
void LargeObjectDrop | ( | Oid | loid | ) |
Definition at line 83 of file pg_largeobject.c.
References Anum_pg_largeobject_loid, BTEqualStrategyNumber, ereport, errcode(), errmsg(), ERROR, heap_close, heap_open(), HeapTupleIsValid, LargeObjectLOidPNIndexId, LargeObjectMetadataOidIndexId, LargeObjectMetadataRelationId, LargeObjectRelationId, ObjectIdAttributeNumber, ObjectIdGetDatum, RowExclusiveLock, ScanKeyInit(), simple_heap_delete(), SnapshotNow, systable_beginscan(), systable_endscan(), systable_getnext(), and HeapTupleData::t_self.
Referenced by doDeletion().
{ Relation pg_lo_meta; Relation pg_largeobject; ScanKeyData skey[1]; SysScanDesc scan; HeapTuple tuple; pg_lo_meta = heap_open(LargeObjectMetadataRelationId, RowExclusiveLock); pg_largeobject = heap_open(LargeObjectRelationId, RowExclusiveLock); /* * Delete an entry from pg_largeobject_metadata */ ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); scan = systable_beginscan(pg_lo_meta, LargeObjectMetadataOidIndexId, true, SnapshotNow, 1, skey); tuple = systable_getnext(scan); if (!HeapTupleIsValid(tuple)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("large object %u does not exist", loid))); simple_heap_delete(pg_lo_meta, &tuple->t_self); systable_endscan(scan); /* * Delete all the associated entries from pg_largeobject */ ScanKeyInit(&skey[0], Anum_pg_largeobject_loid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); scan = systable_beginscan(pg_largeobject, LargeObjectLOidPNIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tuple = systable_getnext(scan))) { simple_heap_delete(pg_largeobject, &tuple->t_self); } systable_endscan(scan); heap_close(pg_largeobject, RowExclusiveLock); heap_close(pg_lo_meta, RowExclusiveLock); }
Definition at line 155 of file pg_largeobject.c.
References AccessShareLock, BTEqualStrategyNumber, heap_close, heap_open(), HeapTupleIsValid, LargeObjectMetadataOidIndexId, LargeObjectMetadataRelationId, ObjectIdAttributeNumber, ObjectIdGetDatum, ScanKeyInit(), SnapshotNow, systable_beginscan(), systable_endscan(), and systable_getnext().
Referenced by get_object_address(), and objectNamesToOids().
{ Relation pg_lo_meta; ScanKeyData skey[1]; SysScanDesc sd; HeapTuple tuple; bool retval = false; ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); pg_lo_meta = heap_open(LargeObjectMetadataRelationId, AccessShareLock); sd = systable_beginscan(pg_lo_meta, LargeObjectMetadataOidIndexId, true, SnapshotNow, 1, skey); tuple = systable_getnext(sd); if (HeapTupleIsValid(tuple)) retval = true; systable_endscan(sd); heap_close(pg_lo_meta, AccessShareLock); return retval; }