summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/catalog/Makefile5
-rw-r--r--src/backend/catalog/indexing.c4
-rw-r--r--src/backend/catalog/pg_largeobject.c138
-rw-r--r--src/backend/libpq/be-fsstubs.c6
-rw-r--r--src/backend/storage/large_object/inv_api.c14
-rw-r--r--src/include/catalog/catname.h3
-rw-r--r--src/include/catalog/indexing.h4
-rw-r--r--src/include/catalog/pg_largeobject.h63
-rw-r--r--src/include/storage/large_object.h19
9 files changed, 30 insertions, 226 deletions
diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile
index 0ba3e9459a1..c158ed4fcd2 100644
--- a/src/backend/catalog/Makefile
+++ b/src/backend/catalog/Makefile
@@ -2,7 +2,7 @@
#
# Makefile for catalog
#
-# $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.26 2000/10/08 03:18:53 momjian Exp $
+# $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.27 2000/10/08 03:53:13 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -11,8 +11,7 @@ top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
OBJS = catalog.o heap.o index.o indexing.o aclchk.o \
- pg_aggregate.o pg_largeobject.o pg_operator.o pg_proc.o \
- pg_type.o
+ pg_aggregate.o pg_operator.o pg_proc.o pg_type.o
BKIFILES = global.bki template1.bki global.description template1.description
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index 4c9a61ffbe9..5647c8310cc 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.68 2000/10/08 03:18:53 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.69 2000/10/08 03:53:13 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -51,8 +51,6 @@ char *Name_pg_inherits_indices[Num_pg_inherits_indices] =
{InheritsRelidSeqnoIndex};
char *Name_pg_language_indices[Num_pg_language_indices] =
{LanguageOidIndex, LanguageNameIndex};
-char *Name_pg_largeobject_indices[Num_pg_largeobject_indices] =
-{LargeobjectLOIdIndex, LargeobjectLOIdPNIndex};
char *Name_pg_listener_indices[Num_pg_listener_indices] =
{ListenerPidRelnameIndex};
char *Name_pg_opclass_indices[Num_pg_opclass_indices] =
diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c
deleted file mode 100644
index 74bcfe04883..00000000000
--- a/src/backend/catalog/pg_largeobject.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * pg_largeobject.c
- * routines to support manipulation of the pg_largeobject relation
- *
- * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_largeobject.c,v 1.1 2000/10/08 03:18:53 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include "access/genam.h"
-#include "access/heapam.h"
-#include "access/itup.h"
-#include "catalog/catname.h"
-#include "catalog/indexing.h"
-#include "catalog/pg_largeobject.h"
-#include "miscadmin.h"
-#include "parser/parse_func.h"
-#include "utils/builtins.h"
-#include "utils/syscache.h"
-
-bytea *_byteain(const char *data, int32 size);
-
-bytea *_byteain(const char *data, int32 size) {
- bytea *result;
-
- result = (bytea *)palloc(size + VARHDRSZ);
- result->vl_len = size + VARHDRSZ;
- if (size > 0)
- memcpy(result->vl_dat, data, size);
-
- return result;
-}
-
-Oid LargeobjectCreate(Oid loid) {
- Oid retval;
- Relation pg_largeobject;
- HeapTuple ntup = (HeapTuple) palloc(sizeof(HeapTupleData));
- Relation idescs[Num_pg_largeobject_indices];
- Datum values[Natts_pg_largeobject];
- char nulls[Natts_pg_largeobject];
- int i;
-
- for (i=0; i<Natts_pg_largeobject; i++) {
- nulls[i] = ' ';
- values[i] = (Datum)NULL;
- }
-
- i = 0;
- values[i++] = ObjectIdGetDatum(loid);
- values[i++] = Int32GetDatum(0);
- values[i++] = (Datum) _byteain(NULL, 0);
-
- pg_largeobject = heap_openr(LargeobjectRelationName, RowExclusiveLock);
- ntup = heap_formtuple(pg_largeobject->rd_att, values, nulls);
- retval = heap_insert(pg_largeobject, ntup);
-
- if (!IsIgnoringSystemIndexes()) {
- CatalogOpenIndices(Num_pg_largeobject_indices, Name_pg_largeobject_indices, idescs);
- CatalogIndexInsert(idescs, Num_pg_largeobject_indices, pg_largeobject, ntup);
- CatalogCloseIndices(Num_pg_largeobject_indices, idescs);
- }
-
- heap_close(pg_largeobject, RowExclusiveLock);
- heap_freetuple(ntup);
-
- CommandCounterIncrement();
-
- return retval;
-}
-
-void LargeobjectDrop(Oid loid) {
- Relation pg_largeobject;
- Relation pg_lo_id;
- ScanKeyData skey;
- IndexScanDesc sd = (IndexScanDesc) NULL;
- RetrieveIndexResult indexRes;
- int found = 0;
-
- ScanKeyEntryInitialize(&skey,
- (bits16) 0x0,
- (AttrNumber) 1,
- (RegProcedure) F_OIDEQ,
- ObjectIdGetDatum(loid));
-
- pg_largeobject = heap_openr(LargeobjectRelationName, RowShareLock);
- pg_lo_id = index_openr(LargeobjectLOIdIndex);
-
- sd = index_beginscan(pg_lo_id, false, 1, &skey);
-
- while((indexRes = index_getnext(sd, ForwardScanDirection))) {
- found++;
- heap_delete(pg_largeobject, &indexRes->heap_iptr, NULL);
- pfree(indexRes);
- }
-
- index_endscan(sd);
-
- index_close(pg_lo_id);
- heap_close(pg_largeobject, RowShareLock);
- if (found == 0)
- elog(ERROR, "LargeobjectDrop: large object %d not found", loid);
-}
-
-int LargeobjectFind(Oid loid) {
- int retval = 0;
- Relation pg_lo_id;
- ScanKeyData skey;
- IndexScanDesc sd = (IndexScanDesc) NULL;
- RetrieveIndexResult indexRes;
-
- ScanKeyEntryInitialize(&skey,
- (bits16) 0x0,
- (AttrNumber) 1,
- (RegProcedure) F_OIDEQ,
- ObjectIdGetDatum(loid));
-
- pg_lo_id = index_openr(LargeobjectLOIdIndex);
-
- sd = index_beginscan(pg_lo_id, false, 1, &skey);
-
- if ((indexRes = index_getnext(sd, ForwardScanDirection))) {
- retval = 1;
- pfree(indexRes);
- }
-
- index_endscan(sd);
-
- index_close(pg_lo_id);
- return retval;
-}
-
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index e2b24d78f9a..321eebbb888 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.51 2000/10/08 03:18:54 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.52 2000/10/08 03:53:13 momjian Exp $
*
* NOTES
* This should be moved to a more appropriate place. It is here
@@ -267,7 +267,7 @@ lo_creat(PG_FUNCTION_ARGS)
PG_RETURN_OID(InvalidOid);
}
- lobjId = lobjDesc->id;
+ lobjId = RelationGetRelid(lobjDesc->heap_r);
inv_close(lobjDesc);
@@ -512,10 +512,8 @@ lo_commit(bool isCommit)
{
if (cookies[i] != NULL)
{
-/*
if (isCommit)
inv_cleanindex(cookies[i]);
-*/
cookies[i] = NULL;
}
}
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 54b5cf16325..11c5d7fb0aa 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.75 2000/10/08 03:18:54 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.76 2000/10/08 03:53:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -261,11 +261,15 @@ inv_close(LargeObjectDesc *obj_desc)
{
Assert(PointerIsValid(obj_desc));
- if (obj_desc->flags & IFS_WRLOCK)
- heap_close(obj_desc->heap_r, RowExclusiveLock);
- else if (obj_desc->flags & IFS_RDLOCK)
- heap_close(obj_desc->heap_r, AccessShareLock);
+ if (obj_desc->iscan != (IndexScanDesc) NULL)
+ {
+ index_endscan(obj_desc->iscan);
+ obj_desc->iscan = NULL;
+ }
+
index_close(obj_desc->index_r);
+ heap_close(obj_desc->heap_r, AccessShareLock);
+
pfree(obj_desc);
}
diff --git a/src/include/catalog/catname.h b/src/include/catalog/catname.h
index 9829682be55..765f9b2d0a1 100644
--- a/src/include/catalog/catname.h
+++ b/src/include/catalog/catname.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: catname.h,v 1.13 2000/10/08 03:18:55 momjian Exp $
+ * $Id: catname.h,v 1.14 2000/10/08 03:53:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -29,7 +29,6 @@
#define InheritsRelationName "pg_inherits"
#define InheritancePrecidenceListRelationName "pg_ipl"
#define LanguageRelationName "pg_language"
-#define LargeobjectRelationName "pg_largeobject"
#define ListenerRelationName "pg_listener"
#define LogRelationName "pg_log"
#define OperatorClassRelationName "pg_opclass"
diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h
index 8e42356d7a7..d96115fa9a3 100644
--- a/src/include/catalog/indexing.h
+++ b/src/include/catalog/indexing.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: indexing.h,v 1.41 2000/10/08 03:18:55 momjian Exp $
+ * $Id: indexing.h,v 1.42 2000/10/08 03:53:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -31,7 +31,6 @@
#define Num_pg_index_indices 2
#define Num_pg_inherits_indices 1
#define Num_pg_language_indices 2
-#define Num_pg_largeobject_indices 2
#define Num_pg_listener_indices 1
#define Num_pg_opclass_indices 2
#define Num_pg_operator_indices 2
@@ -93,7 +92,6 @@ extern char *Name_pg_group_indices[];
extern char *Name_pg_index_indices[];
extern char *Name_pg_inherits_indices[];
extern char *Name_pg_language_indices[];
-extern char *Name_pg_largeobject_indices[];
extern char *Name_pg_listener_indices[];
extern char *Name_pg_opclass_indices[];
extern char *Name_pg_operator_indices[];
diff --git a/src/include/catalog/pg_largeobject.h b/src/include/catalog/pg_largeobject.h
deleted file mode 100644
index f8f6509acbb..00000000000
--- a/src/include/catalog/pg_largeobject.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * pg_largeobject.h
- * definition of the system "largeobject" relation (pg_largeobject)
- * along with the relation's initial contents.
- *
- *
- * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * $Id: pg_largeobject.h,v 1.1 2000/10/08 03:18:56 momjian Exp $
- *
- * NOTES
- * the genbki.sh script reads this file and generates .bki
- * information from the DATA() statements.
- *
- *-------------------------------------------------------------------------
- */
-#ifndef PG_LARGEOBJECT_H
-#define PG_LARGEOBJECT_H
-
-/* ----------------
- * postgres.h contains the system type definintions and the
- * CATALOG(), BOOTSTRAP and DATA() sugar words so this file
- * can be read by both genbki.sh and the C compiler.
- * ----------------
- */
-
-/* ----------------
- * pg_largeobject definition. cpp turns this into
- * typedef struct FormData_pg_largeobject. Large object id
- * is stored in loid;
- * ----------------
- */
-
-CATALOG(pg_largeobject)
-{
- Oid loid;
- int4 pageno;
- bytea data;
-} FormData_pg_largeobject;
-
-/* ----------------
- * Form_pg_largeobject corresponds to a pointer to a tuple with
- * the format of pg_largeobject relation.
- * ----------------
- */
-typedef FormData_pg_largeobject *Form_pg_largeobject;
-
-/* ----------------
- * compiler constants for pg_largeobject
- * ----------------
- */
-#define Natts_pg_largeobject 3
-#define Anum_pg_largeobject_loid 1
-#define Anum_pg_largeobject_pageno 2
-#define Anum_pg_largeobject_data 3
-
-Oid LargeobjectCreate(Oid loid);
-void LargeobjectDrop(Oid loid);
-int LargeobjectFind(Oid loid);
-
-#endif /* PG_LARGEOBJECT_H */
diff --git a/src/include/storage/large_object.h b/src/include/storage/large_object.h
index 1157c5dc02e..b3d3512d949 100644
--- a/src/include/storage/large_object.h
+++ b/src/include/storage/large_object.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: large_object.h,v 1.14 2000/10/08 03:18:57 momjian Exp $
+ * $Id: large_object.h,v 1.15 2000/10/08 03:53:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -22,11 +22,17 @@
/*
* This structure will eventually have lots more stuff associated with it.
*/
-typedef struct LargeObjectDesc {
- Relation heap_r;
- Relation index_r;
+typedef struct LargeObjectDesc
+{
+ Relation heap_r; /* heap relation */
+ Relation index_r; /* index relation on seqno attribute */
+ IndexScanDesc iscan; /* index scan we're using */
+ TupleDesc hdesc; /* heap relation tuple desc */
+ TupleDesc idesc; /* index relation tuple desc */
+ uint32 lowbyte; /* low byte on the current page */
+ uint32 highbyte; /* high byte on the current page */
uint32 offset; /* current seek pointer */
- Oid id;
+ ItemPointerData htid; /* tid of current heap tuple */
#define IFS_RDLOCK (1 << 0)
#define IFS_WRLOCK (1 << 1)
@@ -49,4 +55,7 @@ extern int inv_tell(LargeObjectDesc *obj_desc);
extern int inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes);
extern int inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes);
+/* added for buffer leak prevention [ PA ] */
+extern void inv_cleanindex(LargeObjectDesc *obj_desc);
+
#endif /* LARGE_OBJECT_H */