From e5e5de8e8c29531053abd13cc068ed6ca9065080 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 8 Oct 2000 03:53:15 +0000 Subject: [PATCH] Back out: > this is patch v 0.4 to support transactions with BLOBs. > All BLOBs are in one table. You need to make initdb. > > -- > Sincerely Yours, > Denis Perchine --- src/backend/catalog/Makefile | 5 +- src/backend/catalog/indexing.c | 4 +- src/backend/catalog/pg_largeobject.c | 138 ----------------------------- src/backend/libpq/be-fsstubs.c | 6 +- src/backend/storage/large_object/inv_api.c | 14 +-- src/include/catalog/catname.h | 3 +- src/include/catalog/indexing.h | 4 +- src/include/catalog/pg_largeobject.h | 63 ------------- src/include/storage/large_object.h | 19 ++-- 9 files changed, 30 insertions(+), 226 deletions(-) delete mode 100644 src/backend/catalog/pg_largeobject.c delete mode 100644 src/include/catalog/pg_largeobject.h diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index 0ba3e9459a..c158ed4fcd 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 4c9a61ffbe..5647c8310c 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 74bcfe0488..0000000000 --- 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; ird_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 e2b24d78f9..321eebbb88 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 54b5cf1632..11c5d7fb0a 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 9829682be5..765f9b2d0a 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 8e42356d7a..d96115fa9a 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 f8f6509acb..0000000000 --- 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 1157c5dc02..b3d3512d94 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 */ -- 2.11.0