diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index a14a41b9df..4a46528e0f 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.56 1998/08/28 03:36:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.57 1998/08/28 04:57:19 momjian Exp $ * * * INTERFACE ROUTINES @@ -1267,6 +1267,7 @@ FormIndexDatum(int numberOfAttributes, FuncIndexInfoPtr fInfo) { AttrNumber i; + int offset; bool isNull; /* ---------------- @@ -1276,16 +1277,19 @@ FormIndexDatum(int numberOfAttributes, * ---------------- */ - for (i = 0; i < numberOfAttributes; i++) + for (i = 1; i <= numberOfAttributes; i++) { - datum[i] = PointerGetDatum(GetIndexValue(heapTuple, - heapDescriptor, - i, - attributeNumber, - fInfo, - &isNull)); + offset = AttrNumberGetAttrOffset(i); - nullv[i] = (isNull) ? 'n' : ' '; + datum[offset] = + PointerGetDatum(GetIndexValue(heapTuple, + heapDescriptor, + offset, + attributeNumber, + fInfo, + &isNull)); + + nullv[offset] = (isNull) ? 'n' : ' '; } } diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index bd5471feeb..fe0b59d8ec 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.77 1998/08/28 03:36:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.78 1998/08/28 04:57:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -20,6 +20,7 @@ #include "postgres.h" +#include "miscadmin.h" #include "access/genam.h" #include "access/heapam.h" #include "access/transam.h" @@ -189,8 +190,8 @@ vc_init() if ((fd = open("pg_vlock", O_CREAT | O_EXCL, 0600)) < 0) { elog(ERROR, "Can't create lock file. Is another vacuum cleaner running?\n\ -\tIf not, you may remove the pg_vlock file in the pgsql/data/base/your_db\n\ -\tdirectory"); +\tIf not, you may remove the pg_vlock file in the %s\n\ +\tdirectory", DatabasePath); } close(fd); @@ -2202,11 +2203,10 @@ static void vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc) { IndDesc *idcur; - HeapTuple tuple, cachetuple; + HeapTuple cachetuple; AttrNumber *attnumP; int natts; int i; - Buffer buffer; *Idesc = (IndDesc *) palloc(nindices * sizeof(IndDesc)); @@ -2216,13 +2216,8 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc) ObjectIdGetDatum(RelationGetRelid(Irel[i])), 0, 0, 0); Assert(cachetuple); - - /* get the buffer cache tuple */ - tuple = heap_fetch(onerel, SnapshotNow, &cachetuple->t_ctid, &buffer); - Assert(tuple); - pfree(cachetuple); - - idcur->tform = (IndexTupleForm) GETSTRUCT(tuple); + /* we never free the copy we make, because Idesc needs it for later */ + idcur->tform = (IndexTupleForm) GETSTRUCT(cachetuple); for (attnumP = &(idcur->tform->indkey[0]), natts = 0; *attnumP != InvalidAttrNumber && natts != INDEX_MAX_KEYS; attnumP++, natts++); @@ -2238,7 +2233,6 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc) idcur->finfoP = (FuncIndexInfo *) NULL; idcur->natts = natts; - ReleaseBuffer(buffer); } } /* vc_mkindesc */