diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c
index ec5b756e7487088a65d0b5d1432e670d1df9f25d..cade50db3ca7668a7139bfb28913a329adfd82c7 100644
--- a/src/backend/access/common/heaptuple.c
+++ b/src/backend/access/common/heaptuple.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.38 1998/06/15 19:27:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.39 1998/08/19 02:00:53 momjian Exp $
  *
  * NOTES
  *	  The old interface functions have been converted to macros
@@ -736,13 +736,6 @@ heap_copytuple(HeapTuple tuple)
 	if (!HeapTupleIsValid(tuple))
 		return (NULL);
 
-	/* XXX For now, just prevent an undetectable executor related error */
-	if (tuple->t_len > MAXTUPLEN)
-	{
-		elog(ERROR, "palloctup: cannot handle length %d tuples",
-			 tuple->t_len);
-	}
-
 	newTuple = (HeapTuple) palloc(tuple->t_len);
 	memmove((char *) newTuple, (char *) tuple, (int) tuple->t_len);
 	return (newTuple);
@@ -863,11 +856,11 @@ heap_formtuple(TupleDesc tupleDescriptor,
  *		heap_modifytuple
  *
  *		forms a new tuple from an old tuple and a set of replacement values.
+ *		returns a new palloc'ed tuple.
  * ----------------
  */
 HeapTuple
 heap_modifytuple(HeapTuple tuple,
-				 Buffer buffer,
 				 Relation relation,
 				 Datum replValue[],
 				 char replNull[],
@@ -879,7 +872,6 @@ heap_modifytuple(HeapTuple tuple,
 	char	   *nulls;
 	bool		isNull;
 	HeapTuple	newTuple;
-	int			madecopy;
 	uint8		infomask;
 
 	/* ----------------
@@ -887,26 +879,11 @@ heap_modifytuple(HeapTuple tuple,
 	 * ----------------
 	 */
 	Assert(HeapTupleIsValid(tuple));
-	Assert(BufferIsValid(buffer) || RelationIsValid(relation));
-	Assert(HeapTupleIsValid(tuple));
+	Assert(RelationIsValid(relation));
 	Assert(PointerIsValid(replValue));
 	Assert(PointerIsValid(replNull));
 	Assert(PointerIsValid(repl));
 
-	/* ----------------
-	 *	if we're pointing to a disk page, then first
-	 *	make a copy of our tuple so that all the attributes
-	 *	are available.	XXX this is inefficient -cim
-	 * ----------------
-	 */
-	madecopy = 0;
-	if (BufferIsValid(buffer) == true)
-	{
-		relation = (Relation) BufferGetRelation(buffer);
-		tuple = heap_copytuple(tuple);
-		madecopy = 1;
-	}
-
 	numberOfAttributes = RelationGetRelationTupleForm(relation)->relnatts;
 
 	/* ----------------
@@ -933,10 +910,7 @@ heap_modifytuple(HeapTuple tuple,
 
 		}
 		else if (repl[attoff] != 'r')
-		{
 			elog(ERROR, "heap_modifytuple: repl is \\%3d", repl[attoff]);
-
-		}
 		else
 		{						/* == 'r' */
 			value[attoff] = replValue[attoff];
@@ -961,18 +935,8 @@ heap_modifytuple(HeapTuple tuple,
 			(char *) &tuple->t_oid,
 			((char *) &tuple->t_hoff - (char *) &tuple->t_oid));		/* XXX */
 	newTuple->t_infomask = infomask;
-	newTuple->t_natts = numberOfAttributes;		/* fix t_natts just in
-												 * case */
-
-	/* ----------------
-	 *	if we made a copy of the tuple, then free it.
-	 * ----------------
-	 */
-	if (madecopy)
-		pfree(tuple);
-
-	return
-		newTuple;
+	newTuple->t_natts = numberOfAttributes;		/* fix t_natts just in case */
+	return newTuple;
 }
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index c07a2f9c978c7be1dd7123eabefb32215c6d0c89..936725a2ce51119c40c4c57550a791b63330cd45 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.31 1998/07/26 04:30:16 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.32 1998/08/19 02:00:54 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -46,8 +46,7 @@ typtoout(Oid type)
 									0, 0, 0);
 
 	if (HeapTupleIsValid(typeTuple))
-		return ((Oid)
-				((TypeTupleForm) GETSTRUCT(typeTuple))->typoutput);
+		return ((Oid) ((TypeTupleForm) GETSTRUCT(typeTuple))->typoutput);
 
 	elog(ERROR, "typtoout: Cache lookup of type %d failed", type);
 	return (InvalidOid);
@@ -63,8 +62,7 @@ gettypelem(Oid type)
 									0, 0, 0);
 
 	if (HeapTupleIsValid(typeTuple))
-		return ((Oid)
-				((TypeTupleForm) GETSTRUCT(typeTuple))->typelem);
+		return ((Oid) ((TypeTupleForm) GETSTRUCT(typeTuple))->typelem);
 
 	elog(ERROR, "typtoout: Cache lookup of type %d failed", type);
 	return (InvalidOid);
diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c
index f096c1b8870b49570de3bf67c9ccf0d6d058a2f5..569fac67101a5c3e4b06cbc8b8e2fa49c531ee81 100644
--- a/src/backend/access/common/tupdesc.c
+++ b/src/backend/access/common/tupdesc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.41 1998/07/12 21:29:13 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.42 1998/08/19 02:00:56 momjian Exp $
  *
  * NOTES
  *	  some of the executor utility code such as "ExecTypeFromTL" should be
@@ -327,7 +327,8 @@ TupleDescInitEntry(TupleDesc desc,
 	 *	-cim 6/14/90
 	 * ----------------
 	 */
-	tuple = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(typeid),
+	tuple = SearchSysCacheTuple(TYPOID,
+								ObjectIdGetDatum(typeid),
 								0, 0, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c
index 1445ff7f2eb5209c6b236649f947ef3d2df0410a..e61c3ce5dd2c7296b15c8d2e1bc62444902367ab 100644
--- a/src/backend/access/gist/gist.c
+++ b/src/backend/access/gist/gist.c
@@ -87,7 +87,6 @@ gistbuild(Relation heap,
 		  PredInfo *predInfo)
 {
 	HeapScanDesc scan;
-	Buffer		buffer;
 	AttrNumber	i;
 	HeapTuple	htup;
 	IndexTuple	itup;
@@ -112,14 +111,15 @@ gistbuild(Relation heap,
 			   *oldPred;
 	GISTSTATE	giststate;
 	GISTENTRY	tmpcentry;
+	Buffer		buffer = InvalidBuffer;
 	bool	   *compvec;
 
 	/* GiSTs only know how to do stupid locking now */
 	RelationSetLockForWrite(index);
 
-	setheapoverride(TRUE);		/* so we can see the new pg_index tuple */
+	setheapoverride(true);		/* so we can see the new pg_index tuple */
 	initGISTstate(&giststate, index);
-	setheapoverride(FALSE);
+	setheapoverride(false);
 
 	pred = predInfo->pred;
 	oldPred = predInfo->oldPred;
@@ -170,15 +170,13 @@ gistbuild(Relation heap,
 		econtext = NULL;
 	}
 #endif							/* OMIT_PARTIAL_INDEX */
-	scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
-	htup = heap_getnext(scan, 0, &buffer);
-
 	/* int the tuples as we insert them */
 	nh = ni = 0;
 
-	for (; HeapTupleIsValid(htup); htup = heap_getnext(scan, 0, &buffer))
-	{
+	scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
 
+	while (HeapTupleIsValid(htup = heap_getnext(scan, 0)))
+	{
 		nh++;
 
 		/*
@@ -240,8 +238,7 @@ gistbuild(Relation heap,
 									  attoff,
 									  attnum,
 									  finfo,
-									  &attnull,
-									  buffer);
+									  &attnull);
 			nulls[attoff] = (attnull ? 'n' : ' ');
 		}
 
@@ -302,8 +299,8 @@ gistbuild(Relation heap,
 	 * flushed.  We close them to guarantee that they will be.
 	 */
 
-	hrelid = heap->rd_id;
-	irelid = index->rd_id;
+	hrelid = RelationGetRelid(heap);
+	irelid = RelationGetRelid(index);
 	heap_close(heap);
 	index_close(index);
 
@@ -1165,11 +1162,13 @@ initGISTstate(GISTSTATE *giststate, Relation index)
 	fmgr_info(equal_proc, &giststate->equalFn);
 
 	/* see if key type is different from type of attribute being indexed */
-	htup = SearchSysCacheTuple(INDEXRELID, ObjectIdGetDatum(index->rd_id),
+	htup = SearchSysCacheTuple(INDEXRELID,
+							   ObjectIdGetDatum(RelationGetRelid(index)),
 							   0, 0, 0);
 	itupform = (IndexTupleForm) GETSTRUCT(htup);
 	if (!HeapTupleIsValid(htup))
-		elog(ERROR, "initGISTstate: index %d not found", index->rd_id);
+		elog(ERROR, "initGISTstate: index %d not found",
+		RelationGetRelid(index));
 	giststate->haskeytype = itupform->indhaskeytype;
 	if (giststate->haskeytype)
 	{
diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c
index 7b9d49726bad18824928f91496fb1e6cc05fc222..ee016c1a934a0bdc00e6b316f5c77d37c2def18d 100644
--- a/src/backend/access/gist/gistscan.c
+++ b/src/backend/access/gist/gistscan.c
@@ -284,12 +284,12 @@ gistdropscan(IndexScanDesc s)
 }
 
 void
-gistadjscans(Relation r, int op, BlockNumber blkno, OffsetNumber offnum)
+gistadjscans(Relation rel, int op, BlockNumber blkno, OffsetNumber offnum)
 {
 	GISTScanList l;
 	Oid			relid;
 
-	relid = r->rd_id;
+	relid = RelationGetRelid(rel);
 	for (l = GISTScans; l != (GISTScanList) NULL; l = l->gsl_next)
 	{
 		if (l->gsl_scan->relation->rd_id == relid)
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index 6e913e7da49b74148714bef7fa927c03687b1196..4bcc7eab5247c47b9c626d214931ef22422bd778 100644
--- a/src/backend/access/hash/hash.c
+++ b/src/backend/access/hash/hash.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.19 1998/07/27 19:37:35 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.20 1998/08/19 02:01:00 momjian Exp $
  *
  * NOTES
  *	  This file contains only the public interface routines.
@@ -53,7 +53,6 @@ hashbuild(Relation heap,
 		  PredInfo *predInfo)
 {
 	HeapScanDesc hscan;
-	Buffer		buffer;
 	HeapTuple	htup;
 	IndexTuple	itup;
 	TupleDesc	htupdesc,
@@ -65,6 +64,7 @@ hashbuild(Relation heap,
 				nitups;
 	int			i;
 	HashItem	hitem;
+	Buffer		buffer = InvalidBuffer;
 
 #ifndef OMIT_PARTIAL_INDEX
 	ExprContext *econtext;
@@ -120,14 +120,13 @@ hashbuild(Relation heap,
 	}
 #endif							/* OMIT_PARTIAL_INDEX */
 
-	/* start a heap scan */
-	hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
-	htup = heap_getnext(hscan, 0, &buffer);
-
 	/* build the index */
 	nhtups = nitups = 0;
 
-	for (; HeapTupleIsValid(htup); htup = heap_getnext(hscan, 0, &buffer))
+	/* start a heap scan */
+	hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
+
+	while (HeapTupleIsValid(htup = heap_getnext(hscan, 0)))
 	{
 
 		nhtups++;
@@ -193,8 +192,7 @@ hashbuild(Relation heap,
 											attoff,
 											attnum,
 											finfo,
-											&attnull,
-											buffer);
+											&attnull);
 			nulls[attoff] = (attnull ? 'n' : ' ');
 		}
 
@@ -248,8 +246,8 @@ hashbuild(Relation heap,
 	 */
 	if (IsNormalProcessingMode())
 	{
-		hrelid = heap->rd_id;
-		irelid = index->rd_id;
+		hrelid = RelationGetRelid(heap);
+		irelid = RelationGetRelid(index);
 		heap_close(heap);
 		index_close(index);
 		UpdateStats(hrelid, nhtups, true);
diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c
index f5af00fe2b1cda2db670838586eae17ed7201da9..d57c65e4e0705950762b2270ad2eb8e1aecbb873 100644
--- a/src/backend/access/hash/hashfunc.c
+++ b/src/backend/access/hash/hashfunc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.9 1998/04/26 04:05:08 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.10 1998/08/19 02:01:02 momjian Exp $
  *
  * NOTES
  *	  These functions are stored in pg_amproc.	For each operator class
@@ -133,6 +133,18 @@ hashoid(Oid key)
 	return ((uint32) ~key);
 }
 
+uint32
+hashoid8(Oid key[])
+{
+	int i;
+	uint32 result = 0;
+
+	for (i=0; i < 8; i++)
+		result = result ^ (~(uint32)key[i]);
+	return result;
+}
+
+
 #define PRIME1			37
 #define PRIME2			1048583
 
diff --git a/src/backend/access/hash/hashscan.c b/src/backend/access/hash/hashscan.c
index 708dc18943ed9019ab313234f54a430383b3f1d1..ebc41220352b942568463cd4de0502c8e3144d37 100644
--- a/src/backend/access/hash/hashscan.c
+++ b/src/backend/access/hash/hashscan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashscan.c,v 1.14 1998/06/15 19:27:50 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashscan.c,v 1.15 1998/08/19 02:01:04 momjian Exp $
  *
  * NOTES
  *	  Because we can be doing an index scan on a relation while we
@@ -90,7 +90,7 @@ _hash_adjscans(Relation rel, ItemPointer tid)
 	HashScanList l;
 	Oid			relid;
 
-	relid = rel->rd_id;
+	relid = RelationGetRelid(rel);
 	for (l = HashScans; l != (HashScanList) NULL; l = l->hashsl_next)
 	{
 		if (relid == l->hashsl_scan->relation->rd_id)
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 75127b027d1cd3c9f48c4c17d247a7d73f100b0a..139db3b5e36dcccb03d2c70650f1feab15fbd5a2 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.31 1998/07/27 19:37:36 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.32 1998/08/19 02:01:05 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -104,11 +104,11 @@ static bool ImmediateInvalidation;
  */
 
 /* ----------------
- *		initsdesc - sdesc code common to heap_beginscan and heap_rescan
+ *		initscan - scan code common to heap_beginscan and heap_rescan
  * ----------------
  */
 static void
-initsdesc(HeapScanDesc sdesc,
+initscan(HeapScanDesc scan,
 		  Relation relation,
 		  int atend,
 		  unsigned nkeys,
@@ -120,8 +120,8 @@ initsdesc(HeapScanDesc sdesc,
 		 *	relation is empty
 		 * ----------------
 		 */
-		sdesc->rs_ntup = sdesc->rs_ctup = sdesc->rs_ptup = NULL;
-		sdesc->rs_nbuf = sdesc->rs_cbuf = sdesc->rs_pbuf = InvalidBuffer;
+		scan->rs_ntup = scan->rs_ctup = scan->rs_ptup = NULL;
+		scan->rs_nbuf = scan->rs_cbuf = scan->rs_pbuf = InvalidBuffer;
 	}
 	else if (atend)
 	{
@@ -129,10 +129,10 @@ initsdesc(HeapScanDesc sdesc,
 		 *	reverse scan
 		 * ----------------
 		 */
-		sdesc->rs_ntup = sdesc->rs_ctup = NULL;
-		sdesc->rs_nbuf = sdesc->rs_cbuf = InvalidBuffer;
-		sdesc->rs_ptup = NULL;
-		sdesc->rs_pbuf = UnknownBuffer;
+		scan->rs_ntup = scan->rs_ctup = NULL;
+		scan->rs_nbuf = scan->rs_cbuf = InvalidBuffer;
+		scan->rs_ptup = NULL;
+		scan->rs_pbuf = UnknownBuffer;
 	}
 	else
 	{
@@ -140,35 +140,35 @@ initsdesc(HeapScanDesc sdesc,
 		 *	forward scan
 		 * ----------------
 		 */
-		sdesc->rs_ctup = sdesc->rs_ptup = NULL;
-		sdesc->rs_cbuf = sdesc->rs_pbuf = InvalidBuffer;
-		sdesc->rs_ntup = NULL;
-		sdesc->rs_nbuf = UnknownBuffer;
+		scan->rs_ctup = scan->rs_ptup = NULL;
+		scan->rs_cbuf = scan->rs_pbuf = InvalidBuffer;
+		scan->rs_ntup = NULL;
+		scan->rs_nbuf = UnknownBuffer;
 	}							/* invalid too */
 
 	/* we don't have a marked position... */
-	ItemPointerSetInvalid(&(sdesc->rs_mptid));
-	ItemPointerSetInvalid(&(sdesc->rs_mctid));
-	ItemPointerSetInvalid(&(sdesc->rs_mntid));
-	ItemPointerSetInvalid(&(sdesc->rs_mcd));
+	ItemPointerSetInvalid(&(scan->rs_mptid));
+	ItemPointerSetInvalid(&(scan->rs_mctid));
+	ItemPointerSetInvalid(&(scan->rs_mntid));
+	ItemPointerSetInvalid(&(scan->rs_mcd));
 
 	/* ----------------
 	 *	copy the scan key, if appropriate
 	 * ----------------
 	 */
 	if (key != NULL)
-		memmove(sdesc->rs_key, key, nkeys * sizeof(ScanKeyData));
+		memmove(scan->rs_key, key, nkeys * sizeof(ScanKeyData));
 }
 
 /* ----------------
- *		unpinsdesc - code common to heap_rescan and heap_endscan
+ *		unpinscan - code common to heap_rescan and heap_endscan
  * ----------------
  */
 static void
-unpinsdesc(HeapScanDesc sdesc)
+unpinscan(HeapScanDesc scan)
 {
-	if (BufferIsValid(sdesc->rs_pbuf))
-		ReleaseBuffer(sdesc->rs_pbuf);
+	if (BufferIsValid(scan->rs_pbuf))
+		ReleaseBuffer(scan->rs_pbuf);
 
 	/* ------------------------------------
 	 *	Scan will pin buffer one for each non-NULL tuple pointer
@@ -176,11 +176,11 @@ unpinsdesc(HeapScanDesc sdesc)
 	 *	times.
 	 * ------------------------------------
 	 */
-	if (BufferIsValid(sdesc->rs_cbuf))
-		ReleaseBuffer(sdesc->rs_cbuf);
+	if (BufferIsValid(scan->rs_cbuf))
+		ReleaseBuffer(scan->rs_cbuf);
 
-	if (BufferIsValid(sdesc->rs_nbuf))
-		ReleaseBuffer(sdesc->rs_nbuf);
+	if (BufferIsValid(scan->rs_nbuf))
+		ReleaseBuffer(scan->rs_nbuf);
 }
 
 /* ------------------------------------------
@@ -202,13 +202,18 @@ nextpage(int page, int dir)
  *
  *		routine used by heap_getnext() which does most of the
  *		real work in scanning tuples.
+ *
+ *		The scan routines handle their own buffer lock/unlocking, so
+ *		there is no reason to request the buffer number unless
+ *		to want to perform some other operation with the result,
+ *		like pass it to another function.
  * ----------------
  */
 static HeapTuple
 heapgettup(Relation relation,
 		   ItemPointer tid,
 		   int dir,
-		   Buffer *b,
+		   Buffer *buf,
 		   Snapshot snapshot,
 		   int nkeys,
 		   ScanKey key)
@@ -248,7 +253,7 @@ heapgettup(Relation relation,
 		elog(DEBUG, "heapgettup(%s, tid=0x%x, dir=%d, ...)",
 			 RelationGetRelationName(relation), tid, dir);
 	}
-	elog(DEBUG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", b, nkeys, key);
+	elog(DEBUG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", buf, nkeys, key);
 
 	elog(DEBUG, "heapgettup: relation(%c)=`%s', %p",
 		 relation->rd_rel->relkind, &relation->rd_rel->relname,
@@ -278,19 +283,19 @@ heapgettup(Relation relation,
 		/* assume it is a valid TID XXX */
 		if (ItemPointerIsValid(tid) == false)
 		{
-			*b = InvalidBuffer;
+			*buf= InvalidBuffer;
 			return (NULL);
 		}
-		*b = RelationGetBufferWithBuffer(relation,
+		*buf = RelationGetBufferWithBuffer(relation,
 										 ItemPointerGetBlockNumber(tid),
-										 *b);
+										 *buf);
 
 #ifndef NO_BUFFERISVALID
-		if (!BufferIsValid(*b))
+		if (!BufferIsValid(*buf))
 			elog(ERROR, "heapgettup: failed ReadBuffer");
 #endif
 
-		dp = (Page) BufferGetPage(*b);
+		dp = (Page) BufferGetPage(*buf);
 		lineoff = ItemPointerGetOffsetNumber(tid);
 		lpp = PageGetItemId(dp, lineoff);
 
@@ -316,17 +321,17 @@ heapgettup(Relation relation,
 		}
 		if (page < 0)
 		{
-			*b = InvalidBuffer;
+			*buf = InvalidBuffer;
 			return (NULL);
 		}
 
-		*b = RelationGetBufferWithBuffer(relation, page, *b);
+		*buf = RelationGetBufferWithBuffer(relation, page, *buf);
 #ifndef NO_BUFFERISVALID
-		if (!BufferIsValid(*b))
+		if (!BufferIsValid(*buf))
 			elog(ERROR, "heapgettup: failed ReadBuffer");
 #endif
 
-		dp = (Page) BufferGetPage(*b);
+		dp = (Page) BufferGetPage(*buf);
 		lines = PageGetMaxOffsetNumber(dp);
 		if (tid == NULL)
 		{
@@ -360,18 +365,18 @@ heapgettup(Relation relation,
 
 		if (page >= pages)
 		{
-			*b = InvalidBuffer;
+			*buf = InvalidBuffer;
 			return (NULL);
 		}
 		/* page and lineoff now reference the physically next tid */
 
-		*b = RelationGetBufferWithBuffer(relation, page, *b);
+		*buf = RelationGetBufferWithBuffer(relation, page, *buf);
 #ifndef NO_BUFFERISVALID
-		if (!BufferIsValid(*b))
+		if (!BufferIsValid(*buf))
 			elog(ERROR, "heapgettup: failed ReadBuffer");
 #endif
 
-		dp = (Page) BufferGetPage(*b);
+		dp = (Page) BufferGetPage(*buf);
 		lines = PageGetMaxOffsetNumber(dp);
 	}
 
@@ -401,7 +406,7 @@ heapgettup(Relation relation,
 			 *	if current tuple qualifies, return it.
 			 * ----------------
 			 */
-			HeapTupleSatisfies(lpp, relation, *b, (PageHeader) dp,
+			HeapTupleSatisfies(lpp, relation, *buf, (PageHeader) dp,
 							   snapshot, nkeys, key, rtup);
 			if (rtup != NULL)
 			{
@@ -409,7 +414,6 @@ heapgettup(Relation relation,
 
 				if (ItemPointerGetBlockNumber(iptr) != page)
 				{
-
 					/*
 					 * set block id to the correct page number --- this is
 					 * a hack to support the virtual fragment concept
@@ -448,19 +452,19 @@ heapgettup(Relation relation,
 		 */
 		if (page < 0 || page >= pages)
 		{
-			if (BufferIsValid(*b))
-				ReleaseBuffer(*b);
-			*b = InvalidBuffer;
+			if (BufferIsValid(*buf))
+				ReleaseBuffer(*buf);
+			*buf = InvalidBuffer;
 			return (NULL);
 		}
 
-		*b = ReleaseAndReadBuffer(*b, relation, page);
+		*buf = ReleaseAndReadBuffer(*buf, relation, page);
 
 #ifndef NO_BUFFERISVALID
-		if (!BufferIsValid(*b))
+		if (!BufferIsValid(*buf))
 			elog(ERROR, "heapgettup: failed ReadBuffer");
 #endif
-		dp = (Page) BufferGetPage(*b);
+		dp = (Page) BufferGetPage(*buf);
 		lines = lineoff = PageGetMaxOffsetNumber((Page) dp);
 		linesleft = lines - 1;
 		if (dir < 0)
@@ -584,7 +588,7 @@ heap_beginscan(Relation relation,
 			   unsigned nkeys,
 			   ScanKey key)
 {
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 
 	/* ----------------
 	 *	increment access statistics
@@ -620,29 +624,29 @@ heap_beginscan(Relation relation,
 	 *	allocate and initialize scan descriptor
 	 * ----------------
 	 */
-	sdesc = (HeapScanDesc) palloc(sizeof(HeapScanDescData));
+	scan = (HeapScanDesc) palloc(sizeof(HeapScanDescData));
 
 	relation->rd_nblocks = smgrnblocks(DEFAULT_SMGR, relation);
-	sdesc->rs_rd = relation;
+	scan->rs_rd = relation;
 
 	if (nkeys)
 
 		/*
-		 * we do this here instead of in initsdesc() because heap_rescan
-		 * also calls initsdesc() and we don't want to allocate memory
+		 * we do this here instead of in initscan() because heap_rescan
+		 * also calls initscan() and we don't want to allocate memory
 		 * again
 		 */
-		sdesc->rs_key = (ScanKey) palloc(sizeof(ScanKeyData) * nkeys);
+		scan->rs_key = (ScanKey) palloc(sizeof(ScanKeyData) * nkeys);
 	else
-		sdesc->rs_key = NULL;
+		scan->rs_key = NULL;
 
-	initsdesc(sdesc, relation, atend, nkeys, key);
+	initscan(scan, relation, atend, nkeys, key);
 
-	sdesc->rs_atend = atend;
-	sdesc->rs_snapshot = snapshot;
-	sdesc->rs_nkeys = (short) nkeys;
+	scan->rs_atend = atend;
+	scan->rs_snapshot = snapshot;
+	scan->rs_nkeys = (short) nkeys;
 
-	return (sdesc);
+	return (scan);
 }
 
 /* ----------------
@@ -650,7 +654,7 @@ heap_beginscan(Relation relation,
  * ----------------
  */
 void
-heap_rescan(HeapScanDesc sdesc,
+heap_rescan(HeapScanDesc scan,
 			bool scanFromEnd,
 			ScanKey key)
 {
@@ -667,14 +671,14 @@ heap_rescan(HeapScanDesc sdesc,
 	 *	unpin scan buffers
 	 * ----------------
 	 */
-	unpinsdesc(sdesc);
+	unpinscan(scan);
 
 	/* ----------------
 	 *	reinitialize scan descriptor
 	 * ----------------
 	 */
-	initsdesc(sdesc, sdesc->rs_rd, scanFromEnd, sdesc->rs_nkeys, key);
-	sdesc->rs_atend = (bool) scanFromEnd;
+	initscan(scan, scan->rs_rd, scanFromEnd, scan->rs_nkeys, key);
+	scan->rs_atend = (bool) scanFromEnd;
 }
 
 /* ----------------
@@ -685,7 +689,7 @@ heap_rescan(HeapScanDesc sdesc,
  * ----------------
  */
 void
-heap_endscan(HeapScanDesc sdesc)
+heap_endscan(HeapScanDesc scan)
 {
 	/* ----------------
 	 *	increment access statistics
@@ -700,36 +704,38 @@ heap_endscan(HeapScanDesc sdesc)
 	 *	unpin scan buffers
 	 * ----------------
 	 */
-	unpinsdesc(sdesc);
+	unpinscan(scan);
 
 	/* ----------------
 	 *	decrement relation reference count and free scan descriptor storage
 	 * ----------------
 	 */
-	RelationDecrementReferenceCount(sdesc->rs_rd);
+	RelationDecrementReferenceCount(scan->rs_rd);
 
 	/* ----------------
 	 * Non 2-phase read locks on catalog relations
 	 * ----------------
 	 */
-	if (IsSystemRelationName(RelationGetRelationName(sdesc->rs_rd)->data))
+	if (IsSystemRelationName(RelationGetRelationName(scan->rs_rd)->data))
 
-		RelationUnsetLockForRead(sdesc->rs_rd);
+		RelationUnsetLockForRead(scan->rs_rd);
 
-	pfree(sdesc);				/* XXX */
+	pfree(scan);				/* XXX */
 }
 
 /* ----------------
  *		heap_getnext	- retrieve next tuple in scan
  *
  *		Fix to work with index relations.
+ *		We don't return the buffer anymore, but you can get it from the
+ *		returned HeapTuple.
  * ----------------
  */
 
 #ifdef HEAPDEBUGALL
 #define HEAPDEBUG_1 \
-elog(DEBUG, "heap_getnext([%s,nkeys=%d],backw=%d,0x%x) called", \
-	 sdesc->rs_rd->rd_rel->relname.data, sdesc->rs_nkeys, backw, b)
+elog(DEBUG, "heap_getnext([%s,nkeys=%d],backw=%d) called", \
+	 scan->rs_rd->rd_rel->relname.data, scan->rs_nkeys, backw)
 
 #define HEAPDEBUG_2 \
 	 elog(DEBUG, "heap_getnext called with backw (no tracing yet)")
@@ -760,12 +766,9 @@ elog(DEBUG, "heap_getnext([%s,nkeys=%d],backw=%d,0x%x) called", \
 
 
 HeapTuple
-heap_getnext(HeapScanDesc scandesc,
-			 int backw,
-			 Buffer *b)
+heap_getnext(HeapScanDesc scandesc, int backw)
 {
-	HeapScanDesc sdesc = scandesc;
-	Buffer		localb;
+	HeapScanDesc scan = scandesc;
 
 	/* ----------------
 	 *	increment access statistics
@@ -780,16 +783,13 @@ heap_getnext(HeapScanDesc scandesc,
 	 *	argument checks
 	 * ----------------
 	 */
-	if (sdesc == NULL)
+	if (scan == NULL)
 		elog(ERROR, "heap_getnext: NULL relscan");
 
 	/* ----------------
 	 *	initialize return buffer to InvalidBuffer
 	 * ----------------
 	 */
-	if (!PointerIsValid(b))
-		b = &localb;
-	(*b) = InvalidBuffer;
 
 	HEAPDEBUG_1;				/* heap_getnext( info ) */
 
@@ -801,11 +801,11 @@ heap_getnext(HeapScanDesc scandesc,
 		 */
 		HEAPDEBUG_2;			/* heap_getnext called with backw */
 
-		if (sdesc->rs_ptup == sdesc->rs_ctup &&
-			BufferIsInvalid(sdesc->rs_pbuf))
+		if (scan->rs_ptup == scan->rs_ctup &&
+			BufferIsInvalid(scan->rs_pbuf))
 		{
-			if (BufferIsValid(sdesc->rs_nbuf))
-				ReleaseBuffer(sdesc->rs_nbuf);
+			if (BufferIsValid(scan->rs_nbuf))
+				ReleaseBuffer(scan->rs_nbuf);
 			return (NULL);
 		}
 
@@ -813,37 +813,37 @@ heap_getnext(HeapScanDesc scandesc,
 		 * Copy the "current" tuple/buffer to "next". Pin/unpin the
 		 * buffers accordingly
 		 */
-		if (sdesc->rs_nbuf != sdesc->rs_cbuf)
+		if (scan->rs_nbuf != scan->rs_cbuf)
 		{
-			if (BufferIsValid(sdesc->rs_nbuf))
-				ReleaseBuffer(sdesc->rs_nbuf);
-			if (BufferIsValid(sdesc->rs_cbuf))
-				IncrBufferRefCount(sdesc->rs_cbuf);
+			if (BufferIsValid(scan->rs_nbuf))
+				ReleaseBuffer(scan->rs_nbuf);
+			if (BufferIsValid(scan->rs_cbuf))
+				IncrBufferRefCount(scan->rs_cbuf);
 		}
-		sdesc->rs_ntup = sdesc->rs_ctup;
-		sdesc->rs_nbuf = sdesc->rs_cbuf;
+		scan->rs_ntup = scan->rs_ctup;
+		scan->rs_nbuf = scan->rs_cbuf;
 
-		if (sdesc->rs_ptup != NULL)
+		if (scan->rs_ptup != NULL)
 		{
-			if (sdesc->rs_cbuf != sdesc->rs_pbuf)
+			if (scan->rs_cbuf != scan->rs_pbuf)
 			{
-				if (BufferIsValid(sdesc->rs_cbuf))
-					ReleaseBuffer(sdesc->rs_cbuf);
-				if (BufferIsValid(sdesc->rs_pbuf))
-					IncrBufferRefCount(sdesc->rs_pbuf);
+				if (BufferIsValid(scan->rs_cbuf))
+					ReleaseBuffer(scan->rs_cbuf);
+				if (BufferIsValid(scan->rs_pbuf))
+					IncrBufferRefCount(scan->rs_pbuf);
 			}
-			sdesc->rs_ctup = sdesc->rs_ptup;
-			sdesc->rs_cbuf = sdesc->rs_pbuf;
+			scan->rs_ctup = scan->rs_ptup;
+			scan->rs_cbuf = scan->rs_pbuf;
 		}
 		else
 		{						/* NONTUP */
 			ItemPointer iptr;
 
-			iptr = (sdesc->rs_ctup != NULL) ?
-				&(sdesc->rs_ctup->t_ctid) : (ItemPointer) NULL;
+			iptr = (scan->rs_ctup != NULL) ?
+				&(scan->rs_ctup->t_ctid) : (ItemPointer) NULL;
 
 			/*
-			 * Don't release sdesc->rs_cbuf at this point, because
+			 * Don't release scan->rs_cbuf at this point, because
 			 * heapgettup doesn't increase PrivateRefCount if it is
 			 * already set. On a backward scan, both rs_ctup and rs_ntup
 			 * usually point to the same buffer page, so
@@ -851,33 +851,33 @@ heap_getnext(HeapScanDesc scandesc,
 			 * instance ctup is stored in a TupleTableSlot).  - 01/09/94
 			 */
 
-			sdesc->rs_ctup = (HeapTuple)
-				heapgettup(sdesc->rs_rd,
+			scan->rs_ctup = (HeapTuple)
+				heapgettup(scan->rs_rd,
 						   iptr,
 						   -1,
-						   &(sdesc->rs_cbuf),
-						   sdesc->rs_snapshot,
-						   sdesc->rs_nkeys,
-						   sdesc->rs_key);
+						   &(scan->rs_cbuf),
+						   scan->rs_snapshot,
+						   scan->rs_nkeys,
+						   scan->rs_key);
 		}
 
-		if (sdesc->rs_ctup == NULL && !BufferIsValid(sdesc->rs_cbuf))
+		if (scan->rs_ctup == NULL && !BufferIsValid(scan->rs_cbuf))
 		{
-			if (BufferIsValid(sdesc->rs_pbuf))
-				ReleaseBuffer(sdesc->rs_pbuf);
-			sdesc->rs_ptup = NULL;
-			sdesc->rs_pbuf = InvalidBuffer;
-			if (BufferIsValid(sdesc->rs_nbuf))
-				ReleaseBuffer(sdesc->rs_nbuf);
-			sdesc->rs_ntup = NULL;
-			sdesc->rs_nbuf = InvalidBuffer;
+			if (BufferIsValid(scan->rs_pbuf))
+				ReleaseBuffer(scan->rs_pbuf);
+			scan->rs_ptup = NULL;
+			scan->rs_pbuf = InvalidBuffer;
+			if (BufferIsValid(scan->rs_nbuf))
+				ReleaseBuffer(scan->rs_nbuf);
+			scan->rs_ntup = NULL;
+			scan->rs_nbuf = InvalidBuffer;
 			return (NULL);
 		}
 
-		if (BufferIsValid(sdesc->rs_pbuf))
-			ReleaseBuffer(sdesc->rs_pbuf);
-		sdesc->rs_ptup = NULL;
-		sdesc->rs_pbuf = UnknownBuffer;
+		if (BufferIsValid(scan->rs_pbuf))
+			ReleaseBuffer(scan->rs_pbuf);
+		scan->rs_ptup = NULL;
+		scan->rs_pbuf = UnknownBuffer;
 
 	}
 	else
@@ -886,11 +886,11 @@ heap_getnext(HeapScanDesc scandesc,
 		 *	handle forward scan
 		 * ----------------
 		 */
-		if (sdesc->rs_ctup == sdesc->rs_ntup &&
-			BufferIsInvalid(sdesc->rs_nbuf))
+		if (scan->rs_ctup == scan->rs_ntup &&
+			BufferIsInvalid(scan->rs_nbuf))
 		{
-			if (BufferIsValid(sdesc->rs_pbuf))
-				ReleaseBuffer(sdesc->rs_pbuf);
+			if (BufferIsValid(scan->rs_pbuf))
+				ReleaseBuffer(scan->rs_pbuf);
 			HEAPDEBUG_3;		/* heap_getnext returns NULL at end */
 			return (NULL);
 		}
@@ -899,38 +899,38 @@ heap_getnext(HeapScanDesc scandesc,
 		 * Copy the "current" tuple/buffer to "previous". Pin/unpin the
 		 * buffers accordingly
 		 */
-		if (sdesc->rs_pbuf != sdesc->rs_cbuf)
+		if (scan->rs_pbuf != scan->rs_cbuf)
 		{
-			if (BufferIsValid(sdesc->rs_pbuf))
-				ReleaseBuffer(sdesc->rs_pbuf);
-			if (BufferIsValid(sdesc->rs_cbuf))
-				IncrBufferRefCount(sdesc->rs_cbuf);
+			if (BufferIsValid(scan->rs_pbuf))
+				ReleaseBuffer(scan->rs_pbuf);
+			if (BufferIsValid(scan->rs_cbuf))
+				IncrBufferRefCount(scan->rs_cbuf);
 		}
-		sdesc->rs_ptup = sdesc->rs_ctup;
-		sdesc->rs_pbuf = sdesc->rs_cbuf;
+		scan->rs_ptup = scan->rs_ctup;
+		scan->rs_pbuf = scan->rs_cbuf;
 
-		if (sdesc->rs_ntup != NULL)
+		if (scan->rs_ntup != NULL)
 		{
-			if (sdesc->rs_cbuf != sdesc->rs_nbuf)
+			if (scan->rs_cbuf != scan->rs_nbuf)
 			{
-				if (BufferIsValid(sdesc->rs_cbuf))
-					ReleaseBuffer(sdesc->rs_cbuf);
-				if (BufferIsValid(sdesc->rs_nbuf))
-					IncrBufferRefCount(sdesc->rs_nbuf);
+				if (BufferIsValid(scan->rs_cbuf))
+					ReleaseBuffer(scan->rs_cbuf);
+				if (BufferIsValid(scan->rs_nbuf))
+					IncrBufferRefCount(scan->rs_nbuf);
 			}
-			sdesc->rs_ctup = sdesc->rs_ntup;
-			sdesc->rs_cbuf = sdesc->rs_nbuf;
+			scan->rs_ctup = scan->rs_ntup;
+			scan->rs_cbuf = scan->rs_nbuf;
 			HEAPDEBUG_5;		/* heap_getnext next tuple was cached */
 		}
 		else
 		{						/* NONTUP */
 			ItemPointer iptr;
 
-			iptr = (sdesc->rs_ctup != NULL) ?
-				&sdesc->rs_ctup->t_ctid : (ItemPointer) NULL;
+			iptr = (scan->rs_ctup != NULL) ?
+				&scan->rs_ctup->t_ctid : (ItemPointer) NULL;
 
 			/*
-			 * Don't release sdesc->rs_cbuf at this point, because
+			 * Don't release scan->rs_cbuf at this point, because
 			 * heapgettup doesn't increase PrivateRefCount if it is
 			 * already set. On a forward scan, both rs_ctup and rs_ptup
 			 * usually point to the same buffer page, so
@@ -938,34 +938,34 @@ heap_getnext(HeapScanDesc scandesc,
 			 * instance ctup is stored in a TupleTableSlot).  - 01/09/93
 			 */
 
-			sdesc->rs_ctup = (HeapTuple)
-				heapgettup(sdesc->rs_rd,
+			scan->rs_ctup = (HeapTuple)
+				heapgettup(scan->rs_rd,
 						   iptr,
 						   1,
-						   &sdesc->rs_cbuf,
-						   sdesc->rs_snapshot,
-						   sdesc->rs_nkeys,
-						   sdesc->rs_key);
+						   &scan->rs_cbuf,
+						   scan->rs_snapshot,
+						   scan->rs_nkeys,
+						   scan->rs_key);
 		}
 
-		if (sdesc->rs_ctup == NULL && !BufferIsValid(sdesc->rs_cbuf))
+		if (scan->rs_ctup == NULL && !BufferIsValid(scan->rs_cbuf))
 		{
-			if (BufferIsValid(sdesc->rs_nbuf))
-				ReleaseBuffer(sdesc->rs_nbuf);
-			sdesc->rs_ntup = NULL;
-			sdesc->rs_nbuf = InvalidBuffer;
-			if (BufferIsValid(sdesc->rs_pbuf))
-				ReleaseBuffer(sdesc->rs_pbuf);
-			sdesc->rs_ptup = NULL;
-			sdesc->rs_pbuf = InvalidBuffer;
+			if (BufferIsValid(scan->rs_nbuf))
+				ReleaseBuffer(scan->rs_nbuf);
+			scan->rs_ntup = NULL;
+			scan->rs_nbuf = InvalidBuffer;
+			if (BufferIsValid(scan->rs_pbuf))
+				ReleaseBuffer(scan->rs_pbuf);
+			scan->rs_ptup = NULL;
+			scan->rs_pbuf = InvalidBuffer;
 			HEAPDEBUG_6;		/* heap_getnext returning EOS */
 			return (NULL);
 		}
 
-		if (BufferIsValid(sdesc->rs_nbuf))
-			ReleaseBuffer(sdesc->rs_nbuf);
-		sdesc->rs_ntup = NULL;
-		sdesc->rs_nbuf = UnknownBuffer;
+		if (BufferIsValid(scan->rs_nbuf))
+			ReleaseBuffer(scan->rs_nbuf);
+		scan->rs_ntup = NULL;
+		scan->rs_nbuf = UnknownBuffer;
 	}
 
 	/* ----------------
@@ -973,24 +973,31 @@ heap_getnext(HeapScanDesc scandesc,
 	 *	point to the proper return buffer and return the tuple.
 	 * ----------------
 	 */
-	(*b) = sdesc->rs_cbuf;
 
 	HEAPDEBUG_7;				/* heap_getnext returning tuple */
 
-	return (sdesc->rs_ctup);
+	return scan->rs_ctup;
 }
 
 /* ----------------
  *		heap_fetch		- retrive tuple with tid
  *
  *		Currently ignores LP_IVALID during processing!
+ *
+ *		Because this is not part of a scan, there is no way to
+ *		automatically lock/unlock the shared buffers.
+ *		For this reason, we require that the user retrieve the buffer
+ *		value, and they are required to BuffferRelease() it when they
+ *		are done.  If they want to make a copy of it before releasing it,
+ *		they can call heap_copytyple().
+ 
  * ----------------
  */
 HeapTuple
 heap_fetch(Relation relation,
 		   Snapshot snapshot,
 		   ItemPointer tid,
-		   Buffer *b)
+		   Buffer *userbuf)
 {
 	ItemId		lp;
 	Buffer		buffer;
@@ -998,6 +1005,8 @@ heap_fetch(Relation relation,
 	HeapTuple	tuple;
 	OffsetNumber offnum;
 
+	AssertMacro(PointerIsValid(userbuf));	/* see comments above */
+	
 	/* ----------------
 	 *	increment access statistics
 	 * ----------------
@@ -1061,17 +1070,12 @@ heap_fetch(Relation relation,
 	/* ----------------
 	 *	all checks passed, now either return a copy of the tuple
 	 *	or pin the buffer page and return a pointer, depending on
-	 *	whether caller gave us a valid b.
+	 *	whether caller gave us a valid buf.
 	 * ----------------
 	 */
 
-	if (PointerIsValid(b))
-		*b = buffer;
-	else
-	{
-		tuple = heap_copytuple(tuple);
-		ReleaseBuffer(buffer);
-	}
+	*userbuf = buffer;	/* user is required to ReleaseBuffer() this */
+
 	return (tuple);
 }
 
@@ -1161,7 +1165,7 @@ heap_delete(Relation relation, ItemPointer tid)
 	ItemId		lp;
 	HeapTuple	tp;
 	PageHeader	dp;
-	Buffer		b;
+	Buffer		buf;
 
 	/* ----------------
 	 *	increment access statistics
@@ -1182,16 +1186,16 @@ heap_delete(Relation relation, ItemPointer tid)
 	 */
 	RelationSetLockForWrite(relation);
 
-	b = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
+	buf = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
 
 #ifndef NO_BUFFERISVALID
-	if (!BufferIsValid(b))
+	if (!BufferIsValid(buf))
 	{							/* XXX L_SH better ??? */
 		elog(ERROR, "heap_delete: failed ReadBuffer");
 	}
 #endif							/* NO_BUFFERISVALID */
 
-	dp = (PageHeader) BufferGetPage(b);
+	dp = (PageHeader) BufferGetPage(buf);
 	lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid));
 
 	/*
@@ -1208,20 +1212,20 @@ heap_delete(Relation relation, ItemPointer tid)
 		*/
 		if (IsSystemRelationName(RelationGetRelationName(relation)->data))
 			RelationUnsetLockForWrite(relation);
-		ReleaseBuffer(b);
+		ReleaseBuffer(buf);
 		return (1);
 	}
 	/* ----------------
 	 *	check that we're deleteing a valid item
 	 * ----------------
 	 */
-	HeapTupleSatisfies(lp, relation, b, dp,
+	HeapTupleSatisfies(lp, relation, buf, dp,
 					   false, 0, (ScanKey) NULL, tp);
 	if (!tp)
 	{
 
 		/* XXX call something else */
-		ReleaseBuffer(b);
+		ReleaseBuffer(buf);
 
 		elog(ERROR, "heap_delete: (am)invalid tid");
 	}
@@ -1248,7 +1252,7 @@ heap_delete(Relation relation, ItemPointer tid)
 	RelationInvalidateHeapTuple(relation, tp);
 	SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
 
-	WriteBuffer(b);
+	WriteBuffer(buf);
 	if (IsSystemRelationName(RelationGetRelationName(relation)->data))
 		RelationUnsetLockForWrite(relation);
 
@@ -1426,7 +1430,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
  * ----------------
  */
 void
-heap_markpos(HeapScanDesc sdesc)
+heap_markpos(HeapScanDesc scan)
 {
 
 	/* ----------------
@@ -1438,50 +1442,50 @@ heap_markpos(HeapScanDesc sdesc)
 
 	/* Note: no locking manipulations needed */
 
-	if (sdesc->rs_ptup == NULL &&
-		BufferIsUnknown(sdesc->rs_pbuf))
+	if (scan->rs_ptup == NULL &&
+		BufferIsUnknown(scan->rs_pbuf))
 	{							/* == NONTUP */
-		sdesc->rs_ptup = (HeapTuple)
-			heapgettup(sdesc->rs_rd,
-					   (sdesc->rs_ctup == NULL) ?
-					   (ItemPointer) NULL : &sdesc->rs_ctup->t_ctid,
+		scan->rs_ptup = (HeapTuple)
+			heapgettup(scan->rs_rd,
+					   (scan->rs_ctup == NULL) ?
+					   (ItemPointer) NULL : &scan->rs_ctup->t_ctid,
 					   -1,
-					   &sdesc->rs_pbuf,
-					   sdesc->rs_snapshot,
-					   sdesc->rs_nkeys,
-					   sdesc->rs_key);
+					   &scan->rs_pbuf,
+					   scan->rs_snapshot,
+					   scan->rs_nkeys,
+					   scan->rs_key);
 
 	}
-	else if (sdesc->rs_ntup == NULL &&
-			 BufferIsUnknown(sdesc->rs_nbuf))
+	else if (scan->rs_ntup == NULL &&
+			 BufferIsUnknown(scan->rs_nbuf))
 	{							/* == NONTUP */
-		sdesc->rs_ntup = (HeapTuple)
-			heapgettup(sdesc->rs_rd,
-					   (sdesc->rs_ctup == NULL) ?
-					   (ItemPointer) NULL : &sdesc->rs_ctup->t_ctid,
+		scan->rs_ntup = (HeapTuple)
+			heapgettup(scan->rs_rd,
+					   (scan->rs_ctup == NULL) ?
+					   (ItemPointer) NULL : &scan->rs_ctup->t_ctid,
 					   1,
-					   &sdesc->rs_nbuf,
-					   sdesc->rs_snapshot,
-					   sdesc->rs_nkeys,
-					   sdesc->rs_key);
+					   &scan->rs_nbuf,
+					   scan->rs_snapshot,
+					   scan->rs_nkeys,
+					   scan->rs_key);
 	}
 
 	/* ----------------
 	 * Should not unpin the buffer pages.  They may still be in use.
 	 * ----------------
 	 */
-	if (sdesc->rs_ptup != NULL)
-		sdesc->rs_mptid = sdesc->rs_ptup->t_ctid;
+	if (scan->rs_ptup != NULL)
+		scan->rs_mptid = scan->rs_ptup->t_ctid;
 	else
-		ItemPointerSetInvalid(&sdesc->rs_mptid);
-	if (sdesc->rs_ctup != NULL)
-		sdesc->rs_mctid = sdesc->rs_ctup->t_ctid;
+		ItemPointerSetInvalid(&scan->rs_mptid);
+	if (scan->rs_ctup != NULL)
+		scan->rs_mctid = scan->rs_ctup->t_ctid;
 	else
-		ItemPointerSetInvalid(&sdesc->rs_mctid);
-	if (sdesc->rs_ntup != NULL)
-		sdesc->rs_mntid = sdesc->rs_ntup->t_ctid;
+		ItemPointerSetInvalid(&scan->rs_mctid);
+	if (scan->rs_ntup != NULL)
+		scan->rs_mntid = scan->rs_ntup->t_ctid;
 	else
-		ItemPointerSetInvalid(&sdesc->rs_mntid);
+		ItemPointerSetInvalid(&scan->rs_mntid);
 }
 
 /* ----------------
@@ -1506,7 +1510,7 @@ heap_markpos(HeapScanDesc sdesc)
  * ----------------
  */
 void
-heap_restrpos(HeapScanDesc sdesc)
+heap_restrpos(HeapScanDesc scan)
 {
 	/* ----------------
 	 *	increment access statistics
@@ -1519,50 +1523,50 @@ heap_restrpos(HeapScanDesc sdesc)
 
 	/* Note: no locking manipulations needed */
 
-	unpinsdesc(sdesc);
+	unpinscan(scan);
 
 	/* force heapgettup to pin buffer for each loaded tuple */
-	sdesc->rs_pbuf = InvalidBuffer;
-	sdesc->rs_cbuf = InvalidBuffer;
-	sdesc->rs_nbuf = InvalidBuffer;
+	scan->rs_pbuf = InvalidBuffer;
+	scan->rs_cbuf = InvalidBuffer;
+	scan->rs_nbuf = InvalidBuffer;
 
-	if (!ItemPointerIsValid(&sdesc->rs_mptid))
-		sdesc->rs_ptup = NULL;
+	if (!ItemPointerIsValid(&scan->rs_mptid))
+		scan->rs_ptup = NULL;
 	else
 	{
-		sdesc->rs_ptup = (HeapTuple)
-			heapgettup(sdesc->rs_rd,
-					   &sdesc->rs_mptid,
+		scan->rs_ptup = (HeapTuple)
+			heapgettup(scan->rs_rd,
+					   &scan->rs_mptid,
 					   0,
-					   &sdesc->rs_pbuf,
+					   &scan->rs_pbuf,
 					   false,
 					   0,
 					   (ScanKey) NULL);
 	}
 
-	if (!ItemPointerIsValid(&sdesc->rs_mctid))
-		sdesc->rs_ctup = NULL;
+	if (!ItemPointerIsValid(&scan->rs_mctid))
+		scan->rs_ctup = NULL;
 	else
 	{
-		sdesc->rs_ctup = (HeapTuple)
-			heapgettup(sdesc->rs_rd,
-					   &sdesc->rs_mctid,
+		scan->rs_ctup = (HeapTuple)
+			heapgettup(scan->rs_rd,
+					   &scan->rs_mctid,
 					   0,
-					   &sdesc->rs_cbuf,
+					   &scan->rs_cbuf,
 					   false,
 					   0,
 					   (ScanKey) NULL);
 	}
 
-	if (!ItemPointerIsValid(&sdesc->rs_mntid))
-		sdesc->rs_ntup = NULL;
+	if (!ItemPointerIsValid(&scan->rs_mntid))
+		scan->rs_ntup = NULL;
 	else
 	{
-		sdesc->rs_ntup = (HeapTuple)
-			heapgettup(sdesc->rs_rd,
-					   &sdesc->rs_mntid,
+		scan->rs_ntup = (HeapTuple)
+			heapgettup(scan->rs_rd,
+					   &scan->rs_mntid,
 					   0,
-					   &sdesc->rs_nbuf,
+					   &scan->rs_nbuf,
 					   false,
 					   0,
 					   (ScanKey) NULL);
diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c
index 229ca5d1a270a0c4b4decd1b09292ca5c8a865ab..59e2cb1b546d6245790009688407121a575c3a66 100644
--- a/src/backend/access/index/genam.c
+++ b/src/backend/access/index/genam.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/index/genam.c,v 1.12 1998/06/15 19:27:53 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/index/genam.c,v 1.13 1998/08/19 02:01:09 momjian Exp $
  *
  * NOTES
  *	  many of the old access method routines have been turned into
@@ -216,14 +216,15 @@ IndexScanMarkPosition(IndexScanDesc scan)
 
 	if (scan->flags & ScanUncheckedPrevious)
 	{
-		result =
-			index_getnext(scan, BackwardScanDirection);
+		result = index_getnext(scan, BackwardScanDirection);
 
 		if (result != NULL)
+		{
 			scan->previousItemData = result->index_iptr;
+			pfree(result);
+		}
 		else
 			ItemPointerSetInvalid(&scan->previousItemData);
-
 	}
 	else if (scan->flags & ScanUncheckedNext)
 	{
@@ -231,7 +232,10 @@ IndexScanMarkPosition(IndexScanDesc scan)
 			index_getnext(scan, ForwardScanDirection);
 
 		if (result != NULL)
+		{
 			scan->nextItemData = result->index_iptr;
+			pfree(result);
+		}
 		else
 			ItemPointerSetInvalid(&scan->nextItemData);
 	}
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index e6af2ff9e6a536cf2d73f2753c26dd393ed887f6..3f3721341ac5eac5a370f125973d8522b1484343 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.22 1998/06/15 18:39:23 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.23 1998/08/19 02:01:10 momjian Exp $
  *
  * INTERFACE ROUTINES
  *		index_open		- open an index relation by relationId
@@ -331,8 +331,7 @@ index_getnext(IndexScanDesc scan,
 	 *	have the am's gettuple proc do all the work.
 	 * ----------------
 	 */
-	result = (RetrieveIndexResult)
-		fmgr(procedure, scan, direction);
+	result = (RetrieveIndexResult)fmgr(procedure, scan, direction);
 
 	return result;
 }
@@ -376,8 +375,7 @@ GetIndexValue(HeapTuple tuple,
 			  int attOff,
 			  AttrNumber attrNums[],
 			  FuncIndexInfo *fInfo,
-			  bool *attNull,
-			  Buffer buffer)
+			  bool *attNull)
 {
 	Datum		returnVal;
 	bool		isNull;
diff --git a/src/backend/access/index/istrat.c b/src/backend/access/index/istrat.c
index 480644857ce56485874bf76eab6fb8d8eb955fbd..b4c6117069a6cfaa041b86f41e040843e8835b78 100644
--- a/src/backend/access/index/istrat.c
+++ b/src/backend/access/index/istrat.c
@@ -8,13 +8,14 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.25 1998/08/11 22:39:32 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.26 1998/08/19 02:01:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "postgres.h"
 
+#include "miscadmin.h"
 #include "access/heapam.h"
 #include "access/istrat.h"
 #include "catalog/catname.h"
@@ -22,6 +23,7 @@
 #include "catalog/pg_amproc.h"
 #include "catalog/pg_index.h"
 #include "catalog/pg_operator.h"
+#include "utils/syscache.h"
 #include "fmgr.h"
 #include "utils/memutils.h"		/* could have been access/itup.h */
 
@@ -30,8 +32,7 @@ static bool StrategyEvaluationIsValid(StrategyEvaluation evaluation);
 static bool
 StrategyExpressionIsValid(StrategyExpression expression,
 						  StrategyNumber maxStrategy);
-static ScanKey
-StrategyMapGetScanKeyEntry(StrategyMap map,
+static ScanKey StrategyMapGetScanKeyEntry(StrategyMap map,
 						   StrategyNumber strategyNumber);
 static bool
 StrategyOperatorIsValid(StrategyOperator operator,
@@ -95,8 +96,7 @@ IndexStrategyGetStrategyMap(IndexStrategy indexStrategy,
 	Assert(AttributeNumberIsValid(attrNum));
 
 	maxStrategyNum = AMStrategies(maxStrategyNum);		/* XXX */
-	return
-		&indexStrategy->strategyMapData[maxStrategyNum * (attrNum - 1)];
+	return &indexStrategy->strategyMapData[maxStrategyNum * (attrNum - 1)];
 }
 
 /*
@@ -108,8 +108,7 @@ AttributeNumberGetIndexStrategySize(AttrNumber maxAttributeNumber,
 									StrategyNumber maxStrategyNumber)
 {
 	maxStrategyNumber = AMStrategies(maxStrategyNumber);		/* XXX */
-	return
-		maxAttributeNumber * maxStrategyNumber * sizeof(ScanKeyData);
+	return maxAttributeNumber * maxStrategyNumber * sizeof(ScanKeyData);
 }
 
 #ifdef USE_ASSERT_CHECKING
@@ -483,39 +482,52 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation,
 								 Oid operatorObjectId,
 								 ScanKey entry)
 {
-	HeapScanDesc scan;
-	ScanKeyData scanKeyData;
 	HeapTuple	tuple;
+	HeapScanDesc scan = NULL;
 
-	ScanKeyEntryInitialize(&scanKeyData, 0,
-						   ObjectIdAttributeNumber,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(operatorObjectId));
+	if (!IsBootstrapProcessingMode())
+	{
+		tuple = SearchSysCacheTuple(OPROID,
+									ObjectIdGetDatum(operatorObjectId),
+									0, 0, 0);
+	}
+	else
+	{
+		ScanKeyData scanKeyData;
+	
+		ScanKeyEntryInitialize(&scanKeyData, 0,
+							   ObjectIdAttributeNumber,
+							   F_OIDEQ,
+							   ObjectIdGetDatum(operatorObjectId));
 
-	scan = heap_beginscan(operatorRelation, false, SnapshotNow,
-						  1, &scanKeyData);
+		scan = heap_beginscan(operatorRelation, false, SnapshotNow,
+							  1, &scanKeyData);
+	
+		tuple = heap_getnext(scan, 0);
+	}
 
-	tuple = heap_getnext(scan, false, (Buffer *) NULL);
 	if (!HeapTupleIsValid(tuple))
 	{
+		if (IsBootstrapProcessingMode())
+			heap_endscan(scan);
 		elog(ERROR, "OperatorObjectIdFillScanKeyEntry: unknown operator %lu",
 			 (uint32) operatorObjectId);
 	}
 
 	entry->sk_flags = 0;
-	entry->sk_procedure =
-		((OperatorTupleForm) GETSTRUCT(tuple))->oprcode;
+	entry->sk_procedure = ((OperatorTupleForm) GETSTRUCT(tuple))->oprcode;
 	fmgr_info(entry->sk_procedure, &entry->sk_func);
 	entry->sk_nargs = entry->sk_func.fn_nargs;
 
+	if (IsBootstrapProcessingMode())
+		heap_endscan(scan);
+	
 	if (!RegProcedureIsValid(entry->sk_procedure))
 	{
 		elog(ERROR,
 		"OperatorObjectIdFillScanKeyEntry: no procedure for operator %lu",
 			 (uint32) operatorObjectId);
 	}
-
-	heap_endscan(scan);
 }
 
 
@@ -532,28 +544,38 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
 					   StrategyNumber maxSupportNumber,
 					   AttrNumber maxAttributeNumber)
 {
-	Relation	relation;
+	Relation	relation = NULL;
+	HeapScanDesc scan = NULL;
+	ScanKeyData entry[2];
 	Relation	operatorRelation;
-	HeapScanDesc scan;
 	HeapTuple	tuple;
-	ScanKeyData entry[2];
 	StrategyMap map;
 	AttrNumber	attributeNumber;
 	int			attributeIndex;
 	Oid			operatorClassObjectId[MaxIndexAttributeNumber];
 
-	maxStrategyNumber = AMStrategies(maxStrategyNumber);
-
-	ScanKeyEntryInitialize(&entry[0], 0, Anum_pg_index_indexrelid,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(indexObjectId));
+	if (!IsBootstrapProcessingMode())
+	{
+		tuple = SearchSysCacheTuple(INDEXRELID,
+									ObjectIdGetDatum(indexObjectId),
+									0, 0, 0);
+	}
+	else
+	{
+		ScanKeyEntryInitialize(&entry[0], 0, Anum_pg_index_indexrelid,
+							   F_OIDEQ,
+							   ObjectIdGetDatum(indexObjectId));
+	
+		relation = heap_openr(IndexRelationName);
+		scan = heap_beginscan(relation, false, SnapshotNow, 1, entry);
+		tuple = heap_getnext(scan, 0);
+	}
 
-	relation = heap_openr(IndexRelationName);
-	scan = heap_beginscan(relation, false, SnapshotNow, 1, entry);
-	tuple = heap_getnext(scan, 0, (Buffer *) NULL);
 	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "IndexSupportInitialize: corrupted catalogs");
 
+	maxStrategyNumber = AMStrategies(maxStrategyNumber);
+
 	/*
 	 * XXX note that the following assumes the INDEX tuple is well formed
 	 * and that the key[] and class[] are 0 terminated.
@@ -574,9 +596,12 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
 		operatorClassObjectId[attributeIndex] = iform->indclass[attributeIndex];
 	}
 
-	heap_endscan(scan);
-	heap_close(relation);
-
+	if (IsBootstrapProcessingMode())
+	{
+		heap_endscan(scan);
+		heap_close(relation);
+	}
+	
 	/* if support routines exist for this access method, load them */
 	if (maxSupportNumber > 0)
 	{
@@ -606,8 +631,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
 
 			scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
 
-			while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
-				   HeapTupleIsValid(tuple))
+			while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 			{
 				form = (Form_pg_amproc) GETSTRUCT(tuple);
 				loc[(form->amprocnum - 1)] = form->amproc;
@@ -647,8 +671,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy,
 
 		scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
 
-		while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
-			   HeapTupleIsValid(tuple))
+		while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 		{
 			Form_pg_amop form;
 
diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c
index 43a09be03efae816bc1e485801fd0ef4b7ee3082..45ec7b241deb54ee53ff4af8d7b6a84d8947d031 100644
--- a/src/backend/access/nbtree/nbtcompare.c
+++ b/src/backend/access/nbtree/nbtcompare.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.16 1998/04/26 04:05:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.17 1998/08/19 02:01:13 momjian Exp $
  *
  *	NOTES
  *		These functions are stored in pg_amproc.  For each operator class
@@ -30,81 +30,96 @@
 int32
 btint2cmp(int16 a, int16 b)
 {
-	return ((int32) (a - b));
+	return (int32) (a - b);
 }
 
 int32
 btint4cmp(int32 a, int32 b)
 {
-	return (a - b);
+	return a - b;
 }
 
 int32
 btint24cmp(int16 a, int32 b)
 {
-	return (((int32) a) - b);
+	return ((int32) a) - b;
 }
 
 int32
 btint42cmp(int32 a, int16 b)
 {
-	return (a - ((int32) b));
+	return a - ((int32) b);
 }
 
 int32
 btfloat4cmp(float32 a, float32 b)
 {
 	if (*a > *b)
-		return (1);
+		return 1;
 	else if (*a == *b)
-		return (0);
+		return 0;
 	else
-		return (-1);
+		return -1;
 }
 
 int32
 btfloat8cmp(float64 a, float64 b)
 {
 	if (*a > *b)
-		return (1);
+		return 1;
 	else if (*a == *b)
-		return (0);
+		return 0;
 	else
-		return (-1);
+		return -1;
 }
 
 int32
 btoidcmp(Oid a, Oid b)
 {
 	if (a > b)
-		return (1);
+		return 1;
 	else if (a == b)
-		return (0);
+		return 0;
 	else
-		return (-1);
+		return -1;
 }
 
+int32
+btoid8cmp(Oid a[], Oid b[])
+{
+	int i;
+	for (i=0; i < 8; i++)
+		/* we use this because we need the int4gt, etc */
+		if (!int4eq(a[i], b[i])) 
+			if (int4gt(a[i], b[i]))
+				return 1;
+			else
+				return -1;
+	return 0;
+}
+
+
 int32
 btabstimecmp(AbsoluteTime a, AbsoluteTime b)
 {
 	if (AbsoluteTimeIsBefore(a, b))
-		return (-1);
+		return -1;
 	else if (AbsoluteTimeIsBefore(b, a))
-		return (1);
+		return 1;
 	else
-		return (0);
+		return 0;
 }
 
 int32
 btcharcmp(char a, char b)
 {
-	return ((int32) ((uint8) a - (uint8) b));
+	return (int32) ((uint8) a - (uint8) b);
 }
 
 int32
 btnamecmp(NameData *a, NameData *b)
 {
-	return (strncmp(a->data, b->data, NAMEDATALEN));
+	return strncmp(a->data, b->data, NAMEDATALEN);
 }
 
 int32
@@ -162,7 +177,7 @@ bttextcmp(struct varlena * a, struct varlena * b)
 #endif
 
 	if (res != 0 || VARSIZE(a) == VARSIZE(b))
-		return (res);
+		return res;
 
 	/*
 	 * The two strings are the same in the first len bytes, and they are
@@ -170,7 +185,7 @@ bttextcmp(struct varlena * a, struct varlena * b)
 	 */
 
 	if (VARSIZE(a) < VARSIZE(b))
-		return (-1);
+		return -1;
 	else
-		return (1);
+		return 1;
 }
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 046cce37a0cec6cc69728c799c63b289e656a0e1..b575476ba8a66a62d8477b386d4c415e60ba3f65 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.27 1998/07/27 19:37:39 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.28 1998/08/19 02:01:15 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,7 +53,8 @@ _bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, Relation heapRel
 	BlockNumber blkno;
 	int			natts = rel->rd_rel->relnatts;
 	InsertIndexResult res;
-
+	Buffer		buffer;
+	
 	itup = &(btitem->bti_itup);
 
 	/* we need a scan key to do our search, so build one */
@@ -120,11 +121,12 @@ _bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, Relation heapRel
 			{					/* they're equal */
 				btitem = (BTItem) PageGetItem(page, PageGetItemId(page, offset));
 				itup = &(btitem->bti_itup);
-				htup = heap_fetch(heapRel, SnapshotSelf, &(itup->t_tid), NULL);
+				htup = heap_fetch(heapRel, SnapshotSelf, &(itup->t_tid), &buffer);
 				if (htup != (HeapTuple) NULL)
 				{				/* it is a duplicate */
 					elog(ERROR, "Cannot insert a duplicate key into a unique index");
 				}
+				/* htup null so no buffer to release */
 				/* get next offnum */
 				if (offset < maxoff)
 					offset = OffsetNumberNext(offset);
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c
index c30d7d56acaaeeb5bdec771fb3056763f5a48557..406cd4677351e31a6da80a069c9f135f20346bba 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.28 1998/07/30 05:04:49 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.29 1998/08/19 02:01:16 momjian Exp $
  *
  * NOTES
  *	  This file contains only the public interface routines.
@@ -66,7 +66,6 @@ btbuild(Relation heap,
 		PredInfo *predInfo)
 {
 	HeapScanDesc hscan;
-	Buffer		buffer;
 	HeapTuple	htup;
 	IndexTuple	itup;
 	TupleDesc	htupdesc,
@@ -113,7 +112,7 @@ btbuild(Relation heap,
 #endif
 
 	/* see if index is unique */
-	isunique = IndexIsUniqueNoCache(RelationGetRelationId(index));
+	isunique = IndexIsUniqueNoCache(RelationGetRelid(index));
 
 	/* initialize the btree index metadata page (if this is a new index) */
 	if (oldPred == NULL)
@@ -155,9 +154,6 @@ btbuild(Relation heap,
 #endif							/* OMIT_PARTIAL_INDEX */
 
 	/* start a heap scan */
-	hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
-	htup = heap_getnext(hscan, 0, &buffer);
-
 	/* build the index */
 	nhtups = nitups = 0;
 
@@ -167,9 +163,10 @@ btbuild(Relation heap,
 		res = (InsertIndexResult) NULL;
 	}
 
-	for (; HeapTupleIsValid(htup); htup = heap_getnext(hscan, 0, &buffer))
-	{
+	hscan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
 
+	while (HeapTupleIsValid(htup = heap_getnext(hscan, 0)))
+	{
 		nhtups++;
 
 		/*
@@ -228,8 +225,7 @@ btbuild(Relation heap,
 											attoff,
 											attnum,
 											finfo,
-											&attnull,
-											buffer);
+											&attnull);
 			nulls[attoff] = (attnull ? 'n' : ' ');
 		}
 
@@ -323,8 +319,8 @@ btbuild(Relation heap,
 	 */
 	if (IsNormalProcessingMode())
 	{
-		hrelid = heap->rd_id;
-		irelid = index->rd_id;
+		hrelid = RelationGetRelid(heap);
+		irelid = RelationGetRelid(index);
 		heap_close(heap);
 		index_close(index);
 		UpdateStats(hrelid, nhtups, true);
@@ -371,7 +367,7 @@ btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid, Relation
 	btitem = _bt_formitem(itup);
 
 	res = _bt_doinsert(rel, btitem,
-					 IndexIsUnique(RelationGetRelationId(rel)), heapRel);
+					 IndexIsUnique(RelationGetRelid(rel)), heapRel);
 
 	pfree(btitem);
 	pfree(itup);
diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c
index 7aa9d2ac5716da481ae5eba41062021e5b8e45ed..b6566e936a9a023599a5afbc16115951836899ca 100644
--- a/src/backend/access/nbtree/nbtscan.c
+++ b/src/backend/access/nbtree/nbtscan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.15 1998/07/30 05:04:50 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.16 1998/08/19 02:01:17 momjian Exp $
  *
  *
  * NOTES
@@ -96,10 +96,10 @@ _bt_adjscans(Relation rel, ItemPointer tid, int op)
 	BTScanList	l;
 	Oid			relid;
 
-	relid = rel->rd_id;
+	relid = RelationGetRelid(rel);
 	for (l = BTScans; l != (BTScanList) NULL; l = l->btsl_next)
 	{
-		if (relid == l->btsl_scan->relation->rd_id)
+		if (relid == RelationGetRelid(l->btsl_scan->relation))
 			_bt_scandel(l->btsl_scan, op,
 						ItemPointerGetBlockNumber(tid),
 						ItemPointerGetOffsetNumber(tid));
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c
index f4fd602898c899c19e08c08575024ffe5e31eded..f8a8e860dc3a064b685efcb55a791cd4ece3005d 100644
--- a/src/backend/access/nbtree/nbtutils.c
+++ b/src/backend/access/nbtree/nbtutils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtutils.c,v 1.20 1998/06/15 19:27:59 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtutils.c,v 1.21 1998/08/19 02:01:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,8 +61,7 @@ _bt_mkscankey(Relation rel, IndexTuple itup)
 			proc = index_getprocid(rel, i + 1, BTORDER_PROC);
 			flag = 0x0;
 		}
-		ScanKeyEntryInitialize(&skey[i],
-							   flag, (AttrNumber) (i + 1), proc, arg);
+		ScanKeyEntryInitialize(&skey[i], flag, (AttrNumber) (i + 1), proc, arg);
 	}
 
 	return (skey);
diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c
index f8ea84a6d0cd585226041927bf6b5917d0515787..c86fec6c3a8405861ada2cc86957dbe0ef38df9b 100644
--- a/src/backend/access/rtree/rtree.c
+++ b/src/backend/access/rtree/rtree.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.25 1998/07/27 19:37:41 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.26 1998/08/19 02:01:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,6 @@ rtbuild(Relation heap,
 		PredInfo *predInfo)
 {
 	HeapScanDesc scan;
-	Buffer		buffer;
 	AttrNumber	i;
 	HeapTuple	htup;
 	IndexTuple	itup;
@@ -95,6 +94,7 @@ rtbuild(Relation heap,
 	InsertIndexResult res;
 	Datum	   *d;
 	bool	   *nulls;
+	Buffer		buffer = InvalidBuffer;
 	int			nb,
 				nh,
 				ni;
@@ -164,15 +164,14 @@ rtbuild(Relation heap,
 		slot = NULL;
 	}
 #endif							/* OMIT_PARTIAL_INDEX */
-	scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
-	htup = heap_getnext(scan, 0, &buffer);
 
 	/* count the tuples as we insert them */
 	nh = ni = 0;
 
-	for (; HeapTupleIsValid(htup); htup = heap_getnext(scan, 0, &buffer))
-	{
+ 	scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL);
 
+	while (HeapTupleIsValid(htup = heap_getnext(scan, 0)))
+	{
 		nh++;
 
 		/*
@@ -234,8 +233,7 @@ rtbuild(Relation heap,
 									  attoff,
 									  attnum,
 									  finfo,
-									  &attnull,
-									  buffer);
+									  &attnull);
 			nulls[attoff] = (attnull ? 'n' : ' ');
 		}
 
@@ -278,8 +276,8 @@ rtbuild(Relation heap,
 	 * flushed.  We close them to guarantee that they will be.
 	 */
 
-	hrelid = heap->rd_id;
-	irelid = index->rd_id;
+	hrelid = RelationGetRelid(heap);
+	irelid = RelationGetRelid(index);
 	heap_close(heap);
 	index_close(index);
 
diff --git a/src/backend/access/rtree/rtscan.c b/src/backend/access/rtree/rtscan.c
index 672d0e2005fa8c30c314b2d0b3fffb3b8e9105f8..2c14968d4eff25f6e111f84de7b3c27587836c8f 100644
--- a/src/backend/access/rtree/rtscan.c
+++ b/src/backend/access/rtree/rtscan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtscan.c,v 1.16 1998/06/15 19:28:01 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtscan.c,v 1.17 1998/08/19 02:01:21 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -290,10 +290,10 @@ rtadjscans(Relation r, int op, BlockNumber blkno, OffsetNumber offnum)
 	RTScanList	l;
 	Oid			relid;
 
-	relid = r->rd_id;
+	relid = RelationGetRelid(r);
 	for (l = RTScans; l != (RTScanList) NULL; l = l->rtsl_next)
 	{
-		if (l->rtsl_scan->relation->rd_id == relid)
+		if (RelationGetRelid(l->rtsl_scan->relation) == relid)
 			rtadjone(l->rtsl_scan, op, blkno, offnum);
 	}
 }
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index 3e16196d33ced3bfbc3a4029b69f55c3a8c2f02f..393434ebc4d30780ac886016307ff225902bed8b 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.19 1998/08/06 05:12:16 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.20 1998/08/19 02:01:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -78,8 +78,8 @@ static Oid objectid;
 	int			ival;
 }
 
-%type <list>  boot_arg_list
-%type <ielem> boot_index_params boot_index_on
+%type <list>  boot_index_params
+%type <ielem> boot_index_param
 %type <ival> boot_const boot_ident
 %type <ival> optbootstrap optoideq boot_tuple boot_tuplelist
 
@@ -225,15 +225,12 @@ Boot_InsertStmt:
 Boot_DeclareIndexStmt:
 		  XDECLARE INDEX boot_ident ON boot_ident USING boot_ident LPAREN boot_index_params RPAREN
 				{
-					List *params;
-
 					DO_START;
 
-					params = lappend(NIL, (List*)$9);
 					DefineIndex(LexIDStr($5),
 								LexIDStr($3),
 								LexIDStr($7),
-								params, NIL, 0, 0, NIL);
+								$9, NIL, 0, 0, NIL);
 					DO_END;
 				}
 		;
@@ -241,39 +238,21 @@ Boot_DeclareIndexStmt:
 Boot_BuildIndsStmt:
 		  XBUILD INDICES		{ build_indices(); }
 
+
 boot_index_params:
-		boot_index_on boot_ident
-				{
-					IndexElem *n = (IndexElem*)$1;
-					n->class = LexIDStr($2);
-					$$ = n;
-				}
+		boot_index_params COMMA boot_index_param	{ $$ = lappend($1, $3); }
+		| boot_index_param							{ $$ = lcons($1, NIL); }
+		;
 
-boot_index_on:
-		  boot_ident
-				{
-					IndexElem *n = makeNode(IndexElem);
-					n->name = LexIDStr($1);
-					$$ = n;
-				}
-		| boot_ident LPAREN boot_arg_list RPAREN
+boot_index_param:
+		boot_ident boot_ident
 				{
 					IndexElem *n = makeNode(IndexElem);
 					n->name = LexIDStr($1);
-					n->args = (List*)$3;
+					n->class = LexIDStr($2);
 					$$ = n;
 				}
 
-boot_arg_list:
-		  boot_ident
-				{
-					$$ = lappend(NIL, makeString(LexIDStr($1)));
-				}
-		| boot_arg_list COMMA boot_ident
-				{
-					$$ = lappend((List*)$1, makeString(LexIDStr($3)));
-				}
-
 optbootstrap:
 			XBOOTSTRAP	{ $$ = 1; }
 		|				{ $$ = 0; }
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index aab6a82f78c96219531f701d9cccab23429cb78b..bab7d219db9f89c9ba169c607fb0cd0d3e119f2b 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -7,7 +7,7 @@
  * Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.47 1998/07/27 19:37:43 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.48 1998/08/19 02:01:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -448,8 +448,8 @@ boot_openrel(char *relname)
 {
 	int			i;
 	struct typmap **app;
-	Relation	rdesc;
-	HeapScanDesc sdesc;
+	Relation	rel;
+	HeapScanDesc scan;
 	HeapTuple	tup;
 
 	if (strlen(relname) >= NAMEDATALEN - 1)
@@ -458,25 +458,27 @@ boot_openrel(char *relname)
 	if (Typ == (struct typmap **) NULL)
 	{
 		StartPortalAllocMode(DefaultAllocMode, 0);
-		rdesc = heap_openr(TypeRelationName);
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
-		for (i = 0; PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)); ++i);
-		heap_endscan(sdesc);
+		rel = heap_openr(TypeRelationName);
+		scan = heap_beginscan(rel, 0, SnapshotNow, 0, (ScanKey) NULL);
+		i = 0;
+		while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
+			++i;
+		heap_endscan(scan);
 		app = Typ = ALLOC(struct typmap *, i + 1);
 		while (i-- > 0)
 			*app++ = ALLOC(struct typmap, 1);
 		*app = (struct typmap *) NULL;
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
+		scan = heap_beginscan(rel, 0, SnapshotNow, 0, (ScanKey) NULL);
 		app = Typ;
-		while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
+		while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
 		{
 			(*app)->am_oid = tup->t_oid;
 			memmove((char *) &(*app++)->am_typ,
 					(char *) GETSTRUCT(tup),
 					sizeof((*app)->am_typ));
 		}
-		heap_endscan(sdesc);
-		heap_close(rdesc);
+		heap_endscan(scan);
+		heap_close(rel);
 		EndPortalAllocMode();
 	}
 
@@ -505,7 +507,7 @@ boot_openrel(char *relname)
 		 * defined yet.
 		 */
 		if (namestrcmp(&attrtypes[i]->attname, "attisset") == 0)
-			attrtypes[i]->attisset = get_attisset(reldesc->rd_id,
+			attrtypes[i]->attisset = get_attisset(RelationGetRelid(reldesc),
 											 attrtypes[i]->attname.data);
 		else
 			attrtypes[i]->attisset = false;
@@ -786,8 +788,8 @@ static int
 gettype(char *type)
 {
 	int			i;
-	Relation	rdesc;
-	HeapScanDesc sdesc;
+	Relation	rel;
+	HeapScanDesc scan;
 	HeapTuple	tup;
 	struct typmap **app;
 
@@ -811,27 +813,27 @@ gettype(char *type)
 		}
 		if (DebugMode)
 			printf("bootstrap.c: External Type: %s\n", type);
-		rdesc = heap_openr(TypeRelationName);
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
+		rel = heap_openr(TypeRelationName);
+		scan = heap_beginscan(rel, 0, SnapshotNow, 0, (ScanKey) NULL);
 		i = 0;
-		while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
+		while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
 			++i;
-		heap_endscan(sdesc);
+		heap_endscan(scan);
 		app = Typ = ALLOC(struct typmap *, i + 1);
 		while (i-- > 0)
 			*app++ = ALLOC(struct typmap, 1);
 		*app = (struct typmap *) NULL;
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 0, (ScanKey) NULL);
+		scan = heap_beginscan(rel, 0, SnapshotNow, 0, (ScanKey) NULL);
 		app = Typ;
-		while (PointerIsValid(tup = heap_getnext(sdesc, 0, (Buffer *) NULL)))
+		while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
 		{
 			(*app)->am_oid = tup->t_oid;
 			memmove((char *) &(*app++)->am_typ,
 					(char *) GETSTRUCT(tup),
 					sizeof((*app)->am_typ));
 		}
-		heap_endscan(sdesc);
-		heap_close(rdesc);
+		heap_endscan(scan);
+		heap_close(rel);
 		return (gettype(type));
 	}
 	elog(ERROR, "Error: unknown type '%s'.\n", type);
@@ -1167,7 +1169,7 @@ build_indices()
 		 */
 		heap = heap_openr(ILHead->il_heap);
 
-		if (!BootstrapAlreadySeen(heap->rd_id))
-			UpdateStats(heap->rd_id, 0, true);
+		if (!BootstrapAlreadySeen(RelationGetRelid(heap)))
+			UpdateStats(RelationGetRelid(heap), 0, true);
 	}
 }
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index 322e65bb8e00ca206f42076aad7e26834863a2bb..45772f5e0483e998f342ff4f284c3767da0f0ac1 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.13 1998/08/11 18:28:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.14 1998/08/19 02:01:27 momjian Exp $
  *
  * NOTES
  *	  See acl.h.
@@ -33,6 +33,7 @@
 #include "fmgr.h"
 #include "parser/parse_agg.h"
 #include "parser/parse_func.h"
+#include "storage/bufmgr.h"
 #include "utils/builtins.h"
 #include "utils/memutils.h"
 #include "utils/syscache.h"
@@ -97,16 +98,10 @@ ChangeAcl(char *relname,
 	Acl		   *old_acl = (Acl *) NULL,
 			   *new_acl;
 	Relation	relation;
-	static ScanKeyData relkey[1] = {
-		{0, Anum_pg_class_relname, F_NAMEEQ}
-	};
-	HeapScanDesc hsdp;
-	HeapTuple	htp;
-	Buffer		buffer;
+	HeapTuple	tuple;
 	Datum		values[Natts_pg_class];
 	char		nulls[Natts_pg_class];
 	char		replaces[Natts_pg_class];
-	ItemPointerData tmp_ipd;
 	Relation	idescs[Num_pg_class_indices];
 	int			free_old_acl = 0;
 
@@ -115,40 +110,34 @@ ChangeAcl(char *relname,
 	 * there's no ACL, create a default using the pg_class.relowner field.
 	 *
 	 * We can't use the syscache here, since we need to do a heap_replace on
-	 * the tuple we find.  Feh.
+	 * the tuple we find.
 	 */
 	relation = heap_openr(RelationRelationName);
 	if (!RelationIsValid(relation))
 		elog(ERROR, "ChangeAcl: could not open '%s'??",
 			 RelationRelationName);
-	fmgr_info(F_NAMEEQ, &relkey[0].sk_func);
-	relkey[0].sk_nargs = relkey[0].sk_func.fn_nargs;
-	relkey[0].sk_argument = NameGetDatum(relname);
-	hsdp = heap_beginscan(relation,
-						  0,
-						  SnapshotNow,
-						  (unsigned) 1,
-						  relkey);
-	htp = heap_getnext(hsdp, 0, &buffer);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(RELNAME,
+								PointerGetDatum(relname),
+								0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 	{
-		heap_endscan(hsdp);
 		heap_close(relation);
 		elog(ERROR, "ChangeAcl: class \"%s\" not found",
 			 relname);
 		return;
 	}
-	if (!heap_attisnull(htp, Anum_pg_class_relacl))
-		old_acl = (Acl *) heap_getattr(htp,
+
+	if (!heap_attisnull(tuple, Anum_pg_class_relacl))
+		old_acl = (Acl *) heap_getattr(tuple,
 									   Anum_pg_class_relacl,
-									RelationGetTupleDescriptor(relation),
+									   RelationGetTupleDescriptor(relation),
 									   (bool *) NULL);
 	if (!old_acl || ACL_NUM(old_acl) < 1)
 	{
 #ifdef ACLDEBUG_TRACE
 		elog(DEBUG, "ChangeAcl: using default ACL");
 #endif
-/*		old_acl = acldefault(((Form_pg_class) GETSTRUCT(htp))->relowner); */
+/*		old_acl = acldefault(((Form_pg_class) GETSTRUCT(tuple))->relowner); */
 		old_acl = acldefault(relname);
 		free_old_acl = 1;
 	}
@@ -170,19 +159,16 @@ ChangeAcl(char *relname,
 	}
 	replaces[Anum_pg_class_relacl - 1] = 'r';
 	values[Anum_pg_class_relacl - 1] = (Datum) new_acl;
-	htp = heap_modifytuple(htp, buffer, relation, values, nulls, replaces);
-	/* XXX is this necessary? */
-	ItemPointerCopy(&htp->t_ctid, &tmp_ipd);
+	tuple = heap_modifytuple(tuple, relation, values, nulls, replaces);
 	/* XXX handle index on pg_class? */
 	setheapoverride(true);
-	heap_replace(relation, &tmp_ipd, htp);
+	heap_replace(relation, &tuple->t_ctid, tuple);
 	setheapoverride(false);
-	heap_endscan(hsdp);
 
 	/* keep the catalog indices up to date */
 	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices,
 					   idescs);
-	CatalogIndexInsert(idescs, Num_pg_class_indices, relation, htp);
+	CatalogIndexInsert(idescs, Num_pg_class_indices, relation, tuple);
 	CatalogCloseIndices(Num_pg_class_indices, idescs);
 
 	heap_close(relation);
@@ -194,13 +180,14 @@ ChangeAcl(char *relname,
 AclId
 get_grosysid(char *groname)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	AclId		id = 0;
 
-	htp = SearchSysCacheTuple(GRONAME, PointerGetDatum(groname),
-							  0, 0, 0);
-	if (HeapTupleIsValid(htp))
-		id = ((Form_pg_group) GETSTRUCT(htp))->grosysid;
+	tuple = SearchSysCacheTuple(GRONAME,
+								PointerGetDatum(groname),
+							  	0, 0, 0);
+	if (HeapTupleIsValid(tuple))
+		id = ((Form_pg_group) GETSTRUCT(tuple))->grosysid;
 	else
 		elog(ERROR, "non-existent group \"%s\"", groname);
 	return (id);
@@ -209,13 +196,14 @@ get_grosysid(char *groname)
 char *
 get_groname(AclId grosysid)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	char	   *name = NULL;
 
-	htp = SearchSysCacheTuple(GROSYSID, PointerGetDatum(grosysid),
-							  0, 0, 0);
-	if (HeapTupleIsValid(htp))
-		name = (((Form_pg_group) GETSTRUCT(htp))->groname).data;
+	tuple = SearchSysCacheTuple(GROSYSID,
+								ObjectIdGetDatum(grosysid),
+							  	0, 0, 0);
+	if (HeapTupleIsValid(tuple))
+		name = (((Form_pg_group) GETSTRUCT(tuple))->groname).data;
 	else
 		elog(NOTICE, "get_groname: group %d not found", grosysid);
 	return (name);
@@ -225,7 +213,7 @@ static int32
 in_group(AclId uid, AclId gid)
 {
 	Relation	relation;
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	Acl		   *tmp;
 	unsigned	i,
 				num;
@@ -239,12 +227,13 @@ in_group(AclId uid, AclId gid)
 			 GroupRelationName);
 		return (0);
 	}
-	htp = SearchSysCacheTuple(GROSYSID, ObjectIdGetDatum(gid),
-							  0, 0, 0);
-	if (HeapTupleIsValid(htp) &&
-		!heap_attisnull(htp, Anum_pg_group_grolist))
+	tuple = SearchSysCacheTuple(GROSYSID,
+								ObjectIdGetDatum(gid),
+							  	0, 0, 0);
+	if (HeapTupleIsValid(tuple) &&
+		!heap_attisnull(tuple, Anum_pg_group_grolist))
 	{
-		tmp = (IdList *) heap_getattr(htp,
+		tmp = (IdList *) heap_getattr(tuple,
 									  Anum_pg_group_grolist,
 									RelationGetTupleDescriptor(relation),
 									  (bool *) NULL);
@@ -371,26 +360,27 @@ aclcheck(char *relname, Acl *acl, AclId id, AclIdType idtype, AclMode mode)
 int32
 pg_aclcheck(char *relname, char *usename, AclMode mode)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	AclId		id;
 	Acl		   *acl = (Acl *) NULL,
 			   *tmp;
 	int32		result;
 	Relation	relation;
 
-	htp = SearchSysCacheTuple(USENAME, PointerGetDatum(usename),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(usename),
+							  	0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "pg_aclcheck: user \"%s\" not found",
 			 usename);
-	id = (AclId) ((Form_pg_shadow) GETSTRUCT(htp))->usesysid;
+	id = (AclId) ((Form_pg_shadow) GETSTRUCT(tuple))->usesysid;
 
 	/*
 	 * for the 'pg_database' relation, check the usecreatedb field before
 	 * checking normal permissions
 	 */
 	if (strcmp(DatabaseRelationName, relname) == 0 &&
-		(((Form_pg_shadow) GETSTRUCT(htp))->usecreatedb))
+		(((Form_pg_shadow) GETSTRUCT(tuple))->usecreatedb))
 	{
 
 		/*
@@ -409,7 +399,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 	 */
 	if (((mode & ACL_WR) || (mode & ACL_AP)) &&
 		IsSystemRelationName(relname) &&
-		!((Form_pg_shadow) GETSTRUCT(htp))->usecatupd)
+		!((Form_pg_shadow) GETSTRUCT(tuple))->usecatupd)
 	{
 		elog(DEBUG, "pg_aclcheck: catalog update to \"%s\": permission denied",
 			 relname);
@@ -419,7 +409,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 	/*
 	 * Otherwise, superusers bypass all permission-checking.
 	 */
-	if (((Form_pg_shadow) GETSTRUCT(htp))->usesuper)
+	if (((Form_pg_shadow) GETSTRUCT(tuple))->usesuper)
 	{
 #ifdef ACLDEBUG_TRACE
 		elog(DEBUG, "pg_aclcheck: \"%s\" is superuser",
@@ -429,18 +419,19 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 	}
 
 #ifndef ACLDEBUG
-	htp = SearchSysCacheTuple(RELNAME, PointerGetDatum(relname),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(RELNAME,
+							   PointerGetDatum(relname),
+							   0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 	{
 		elog(ERROR, "pg_aclcheck: class \"%s\" not found",
 			 relname);
 		/* an elog(ERROR) kills us, so no need to return anything. */
 	}
-	if (!heap_attisnull(htp, Anum_pg_class_relacl))
+	if (!heap_attisnull(tuple, Anum_pg_class_relacl))
 	{
 		relation = heap_openr(RelationRelationName);
-		tmp = (Acl *) heap_getattr(htp,
+		tmp = (Acl *) heap_getattr(tuple,
 								   Anum_pg_class_relacl,
 								   RelationGetTupleDescriptor(relation),
 								   (bool *) NULL);
@@ -458,7 +449,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 		int4		ownerId;
 
 		relation = heap_openr(RelationRelationName);
-		ownerId = (int4) heap_getattr(htp,
+		ownerId = (int4) heap_getattr(tuple,
 									 Anum_pg_class_relowner,
 									 RelationGetTupleDescriptor(relation),
 									 (bool *) NULL);
@@ -469,7 +460,6 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 		static ScanKeyData relkey[1] = {
 			{0, Anum_pg_class_relname, F_NAMEEQ}
 		};
-		HeapScanDesc hsdp;
 
 		relation = heap_openr(RelationRelationName);
 		if (!RelationIsValid(relation))
@@ -478,23 +468,19 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 				 RelationRelationName);
 			return ACLCHECK_NO_CLASS;
 		}
-		fmgr_info(F_NAMEEQ,
-				  &relkey[0].sk_func,
-				  &relkey[0].sk_nargs);
-		relkey[0].sk_argument = NameGetDatum(relname);
-		hsdp = heap_beginscan(relation, 0, SnapshotNow, 1, relkey);
-		htp = heap_getnext(hsdp, 0, (Buffer *) 0);
-		if (HeapTupleIsValid(htp) &&
-			!heap_attisnull(htp, Anum_pg_class_relacl))
+		tuple = SearchSysCacheTuple(RELNAME,
+								   PointerGetDatum(relname),
+								   0, 0, 0);
+		if (HeapTupleIsValid(tuple) &&
+			!heap_attisnull(tuple, Anum_pg_class_relacl))
 		{
-			tmp = (Acl *) heap_getattr(htp,
+			tmp = (Acl *) heap_getattr(tuple,
 									   Anum_pg_class_relacl,
-									RelationGetTupleDescriptor(relation),
+										RelationGetTupleDescriptor(relation),
 									   (bool *) NULL);
 			acl = makeacl(ACL_NUM(tmp));
 			memmove((char *) acl, (char *) tmp, ACL_SIZE(tmp));
 		}
-		heap_endscan(hsdp);
 		heap_close(relation);
 	}
 #endif
@@ -509,21 +495,22 @@ pg_ownercheck(char *usename,
 			  char *value,
 			  int cacheid)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	AclId		user_id,
 				owner_id = 0;
 
-	htp = SearchSysCacheTuple(USENAME, PointerGetDatum(usename),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(usename),
+							  	0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "pg_ownercheck: user \"%s\" not found",
 			 usename);
-	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(htp))->usesysid;
+	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(tuple))->usesysid;
 
 	/*
 	 * Superusers bypass all permission-checking.
 	 */
-	if (((Form_pg_shadow) GETSTRUCT(htp))->usesuper)
+	if (((Form_pg_shadow) GETSTRUCT(tuple))->usesuper)
 	{
 #ifdef ACLDEBUG_TRACE
 		elog(DEBUG, "pg_ownercheck: user \"%s\" is superuser",
@@ -532,33 +519,33 @@ pg_ownercheck(char *usename,
 		return (1);
 	}
 
-	htp = SearchSysCacheTuple(cacheid, PointerGetDatum(value),
+	tuple = SearchSysCacheTuple(cacheid, PointerGetDatum(value),
 							  0, 0, 0);
 	switch (cacheid)
 	{
 		case OPROID:
-			if (!HeapTupleIsValid(htp))
+			if (!HeapTupleIsValid(tuple))
 				elog(ERROR, "pg_ownercheck: operator %ld not found",
 					 PointerGetDatum(value));
-			owner_id = ((OperatorTupleForm) GETSTRUCT(htp))->oprowner;
+			owner_id = ((OperatorTupleForm) GETSTRUCT(tuple))->oprowner;
 			break;
 		case PRONAME:
-			if (!HeapTupleIsValid(htp))
+			if (!HeapTupleIsValid(tuple))
 				elog(ERROR, "pg_ownercheck: function \"%s\" not found",
 					 value);
-			owner_id = ((Form_pg_proc) GETSTRUCT(htp))->proowner;
+			owner_id = ((Form_pg_proc) GETSTRUCT(tuple))->proowner;
 			break;
 		case RELNAME:
-			if (!HeapTupleIsValid(htp))
+			if (!HeapTupleIsValid(tuple))
 				elog(ERROR, "pg_ownercheck: class \"%s\" not found",
 					 value);
-			owner_id = ((Form_pg_class) GETSTRUCT(htp))->relowner;
+			owner_id = ((Form_pg_class) GETSTRUCT(tuple))->relowner;
 			break;
 		case TYPNAME:
-			if (!HeapTupleIsValid(htp))
+			if (!HeapTupleIsValid(tuple))
 				elog(ERROR, "pg_ownercheck: type \"%s\" not found",
 					 value);
-			owner_id = ((TypeTupleForm) GETSTRUCT(htp))->typowner;
+			owner_id = ((TypeTupleForm) GETSTRUCT(tuple))->typowner;
 			break;
 		default:
 			elog(ERROR, "pg_ownercheck: invalid cache id: %d",
@@ -575,21 +562,22 @@ pg_func_ownercheck(char *usename,
 				   int nargs,
 				   Oid *arglist)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	AclId		user_id,
 				owner_id;
 
-	htp = SearchSysCacheTuple(USENAME, PointerGetDatum(usename),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(usename),
+							  	0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "pg_func_ownercheck: user \"%s\" not found",
 			 usename);
-	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(htp))->usesysid;
+	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(tuple))->usesysid;
 
 	/*
 	 * Superusers bypass all permission-checking.
 	 */
-	if (((Form_pg_shadow) GETSTRUCT(htp))->usesuper)
+	if (((Form_pg_shadow) GETSTRUCT(tuple))->usesuper)
 	{
 #ifdef ACLDEBUG_TRACE
 		elog(DEBUG, "pg_ownercheck: user \"%s\" is superuser",
@@ -598,15 +586,15 @@ pg_func_ownercheck(char *usename,
 		return (1);
 	}
 
-	htp = SearchSysCacheTuple(PRONAME,
+	tuple = SearchSysCacheTuple(PRONAME,
 							  PointerGetDatum(funcname),
-							  PointerGetDatum(nargs),
+							  Int32GetDatum(nargs),
 							  PointerGetDatum(arglist),
 							  0);
-	if (!HeapTupleIsValid(htp))
+	if (!HeapTupleIsValid(tuple))
 		func_error("pg_func_ownercheck", funcname, nargs, arglist, NULL);
 
-	owner_id = ((Form_pg_proc) GETSTRUCT(htp))->proowner;
+	owner_id = ((Form_pg_proc) GETSTRUCT(tuple))->proowner;
 
 	return (user_id == owner_id);
 }
@@ -616,21 +604,22 @@ pg_aggr_ownercheck(char *usename,
 				   char *aggname,
 				   Oid basetypeID)
 {
-	HeapTuple	htp;
+	HeapTuple	tuple;
 	AclId		user_id,
 				owner_id;
 
-	htp = SearchSysCacheTuple(USENAME, PointerGetDatum(usename),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(usename),
+							  	0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "pg_aggr_ownercheck: user \"%s\" not found",
 			 usename);
-	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(htp))->usesysid;
+	user_id = (AclId) ((Form_pg_shadow) GETSTRUCT(tuple))->usesysid;
 
 	/*
 	 * Superusers bypass all permission-checking.
 	 */
-	if (((Form_pg_shadow) GETSTRUCT(htp))->usesuper)
+	if (((Form_pg_shadow) GETSTRUCT(tuple))->usesuper)
 	{
 #ifdef ACLDEBUG_TRACE
 		elog(DEBUG, "pg_aggr_ownercheck: user \"%s\" is superuser",
@@ -639,16 +628,15 @@ pg_aggr_ownercheck(char *usename,
 		return (1);
 	}
 
-	htp = SearchSysCacheTuple(AGGNAME,
+	tuple = SearchSysCacheTuple(AGGNAME,
 							  PointerGetDatum(aggname),
-							  PointerGetDatum(basetypeID),
-							  0,
-							  0);
+							  ObjectIdGetDatum(basetypeID),
+							  0, 0);
 
-	if (!HeapTupleIsValid(htp))
+	if (!HeapTupleIsValid(tuple))
 		agg_error("pg_aggr_ownercheck", aggname, basetypeID);
 
-	owner_id = ((Form_pg_aggregate) GETSTRUCT(htp))->aggowner;
+	owner_id = ((Form_pg_aggregate) GETSTRUCT(tuple))->aggowner;
 
 	return (user_id == owner_id);
 }
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index 844c1502f6718cc30033e9b1a6fbbc8bf0bc2f43..76dfa70630e751d737fa7b5de3ed55817c669883 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.15 1998/02/26 04:30:31 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.16 1998/08/19 02:01:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -174,7 +174,7 @@ fillatt(TupleDesc tupleDesc)
 	for (i = 0; i < natts;)
 	{
 		tuple = SearchSysCacheTuple(TYPOID,
-								  Int32GetDatum((*attributeP)->atttypid),
+									ObjectIdGetDatum((*attributeP)->atttypid),
 									0, 0, 0);
 		if (!HeapTupleIsValid(tuple))
 		{
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 1d6708a076d487867ddb6a0c6a66e2fccb77b773..7d70b7a453d17809b5a44c3b6a500a03a2c7a7f4 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.57 1998/08/17 16:03:31 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.58 1998/08/19 02:01:30 momjian Exp $
  *
  * INTERFACE ROUTINES
  *		heap_create()			- Create an uncataloged heap relation
@@ -56,6 +56,7 @@
 #include "utils/builtins.h"
 #include "utils/mcxt.h"
 #include "utils/relcache.h"
+#include "utils/syscache.h"
 #include "utils/tqual.h"
 
 #ifndef HAVE_MEMMOVE
@@ -69,9 +70,9 @@ AddPgRelationTuple(Relation pg_class_desc,
 				 Relation new_rel_desc, Oid new_rel_oid, unsigned natts,
 				 char relkind);
 static void AddToTempRelList(Relation r);
-static void DeletePgAttributeTuples(Relation rdesc);
-static void DeletePgRelationTuple(Relation rdesc);
-static void DeletePgTypeTuple(Relation rdesc);
+static void DeletePgAttributeTuples(Relation rel);
+static void DeletePgRelationTuple(Relation rel);
+static void DeletePgTypeTuple(Relation rel);
 static int	RelationAlreadyExists(Relation pg_class_desc, char relname[]);
 static void RelationRemoveIndexes(Relation relation);
 static void RelationRemoveInheritance(Relation relation);
@@ -157,7 +158,7 @@ static TempRelList *tempRels = NULL;
  *		heap_create		- Create an uncataloged heap relation
  *
  *		Fields relpages, reltuples, reltuples, relkeys, relhistory,
- *		relisindexed, and relkind of rdesc->rd_rel are initialized
+ *		relisindexed, and relkind of rel->rd_rel are initialized
  *		to all zeros, as are rd_last and rd_hook.  Rd_refcnt is set to 1.
  *
  *		Remove the system relation specific code to elsewhere eventually.
@@ -176,7 +177,7 @@ heap_create(char *name,
 {
 	unsigned	i;
 	Oid			relid;
-	Relation	rdesc;
+	Relation	rel;
 	int			len;
 	bool		nailme = false;
 	char	   *relname = name;
@@ -259,13 +260,13 @@ heap_create(char *name,
 	 */
 	len = sizeof(RelationData);
 
-	rdesc = (Relation) palloc(len);
-	MemSet((char *) rdesc, 0, len);
+	rel = (Relation) palloc(len);
+	MemSet((char *) rel, 0, len);
 
 	/* ----------
 	   create a new tuple descriptor from the one passed in
 	*/
-	rdesc->rd_att = CreateTupleDescCopyConstr(tupDesc);
+	rel->rd_att = CreateTupleDescCopyConstr(tupDesc);
 
 	/* ----------------
 	 *	initialize the fields of our new relation descriptor
@@ -279,29 +280,29 @@ heap_create(char *name,
 	 * ----------------
 	 */
 	if (nailme)
-		rdesc->rd_isnailed = true;
+		rel->rd_isnailed = true;
 
-	RelationSetReferenceCount(rdesc, 1);
+	RelationSetReferenceCount(rel, 1);
 
-	rdesc->rd_rel = (Form_pg_class) palloc(sizeof *rdesc->rd_rel);
+	rel->rd_rel = (Form_pg_class) palloc(sizeof *rel->rd_rel);
 
-	MemSet((char *) rdesc->rd_rel, 0,
-		   sizeof *rdesc->rd_rel);
-	namestrcpy(&(rdesc->rd_rel->relname), relname);
-	rdesc->rd_rel->relkind = RELKIND_UNCATALOGED;
-	rdesc->rd_rel->relnatts = natts;
+	MemSet((char *) rel->rd_rel, 0,
+		   sizeof *rel->rd_rel);
+	namestrcpy(&(rel->rd_rel->relname), relname);
+	rel->rd_rel->relkind = RELKIND_UNCATALOGED;
+	rel->rd_rel->relnatts = natts;
 	if (tupDesc->constr)
-		rdesc->rd_rel->relchecks = tupDesc->constr->num_check;
+		rel->rd_rel->relchecks = tupDesc->constr->num_check;
 
 	for (i = 0; i < natts; i++)
-		rdesc->rd_att->attrs[i]->attrelid = relid;
+		rel->rd_att->attrs[i]->attrelid = relid;
 
-	rdesc->rd_id = relid;
+	RelationGetRelid(rel) = relid;
 
 	if (nailme)
 	{
 		/* for system relations, set the reltype field here */
-		rdesc->rd_rel->reltype = relid;
+		rel->rd_rel->reltype = relid;
 	}
 
 	/* ----------------
@@ -309,18 +310,18 @@ heap_create(char *name,
 	 * ----------------
 	 */
 
-	rdesc->rd_istemp = isTemp;
+	rel->rd_istemp = isTemp;
 
 	/* ----------------
 	 *	have the storage manager create the relation.
 	 * ----------------
 	 */
 
-	rdesc->rd_tmpunlinked = TRUE;		/* change once table is created */
-	rdesc->rd_fd = (File) smgrcreate(DEFAULT_SMGR, rdesc);
-	rdesc->rd_tmpunlinked = FALSE;
+	rel->rd_tmpunlinked = TRUE;		/* change once table is created */
+	rel->rd_fd = (File) smgrcreate(DEFAULT_SMGR, rel);
+	rel->rd_tmpunlinked = FALSE;
 
-	RelationRegisterRelation(rdesc);
+	RelationRegisterRelation(rel);
 
 	MemoryContextSwitchTo(oldcxt);
 
@@ -329,9 +330,9 @@ heap_create(char *name,
 	 * properly disposed of at the end of transaction
 	 */
 	if (isTemp)
-		AddToTempRelList(rdesc);
+		AddToTempRelList(rel);
 
-	return (rdesc);
+	return (rel);
 }
 
 
@@ -477,14 +478,13 @@ RelationAlreadyExists(Relation pg_class_desc, char relname[])
 
 	if (!IsBootstrapProcessingMode())
 	{
-		tup = ClassNameIndexScan(pg_class_desc, relname);
+		tup = SearchSysCacheTuple(RELNAME,
+									PointerGetDatum(relname),
+									0, 0, 0);
 		if (HeapTupleIsValid(tup))
-		{
-			pfree(tup);
-			return ((int) true);
-		}
+			return true;
 		else
-			return ((int) false);
+			return false;
 	}
 
 	/* ----------------
@@ -513,7 +513,7 @@ RelationAlreadyExists(Relation pg_class_desc, char relname[])
 	 *	didn't find an existing relation.
 	 * ----------------
 	 */
-	tup = heap_getnext(pg_class_scan, 0, (Buffer *) NULL);
+	tup = heap_getnext(pg_class_scan, 0);
 
 	/* ----------------
 	 *	end the scan and return existance of relation.
@@ -521,8 +521,7 @@ RelationAlreadyExists(Relation pg_class_desc, char relname[])
 	 */
 	heap_endscan(pg_class_scan);
 
-	return
-		(PointerIsValid(tup) == true);
+	return HeapTupleIsValid(tup);
 }
 
 /* --------------------------------
@@ -539,7 +538,7 @@ AddNewAttributeTuples(Oid new_rel_oid,
 	AttributeTupleForm *dpp;
 	unsigned	i;
 	HeapTuple	tup;
-	Relation	rdesc;
+	Relation	rel;
 	bool		hasindex;
 	Relation	idescs[Num_pg_attr_indices];
 	int			natts = tupdesc->natts;
@@ -548,15 +547,15 @@ AddNewAttributeTuples(Oid new_rel_oid,
 	 *	open pg_attribute
 	 * ----------------
 	 */
-	rdesc = heap_openr(AttributeRelationName);
+	rel = heap_openr(AttributeRelationName);
 
 	/* -----------------
 	 * Check if we have any indices defined on pg_attribute.
 	 * -----------------
 	 */
-	Assert(rdesc);
-	Assert(rdesc->rd_rel);
-	hasindex = RelationGetRelationTupleForm(rdesc)->relhasindex;
+	Assert(rel);
+	Assert(rel->rd_rel);
+	hasindex = RelationGetRelationTupleForm(rel)->relhasindex;
 	if (hasindex)
 		CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, idescs);
 
@@ -584,9 +583,9 @@ AddNewAttributeTuples(Oid new_rel_oid,
 							 ATTRIBUTE_TUPLE_SIZE,
 							 (char *) *dpp);
 
-		heap_insert(rdesc, tup);
+		heap_insert(rel, tup);
 		if (hasindex)
-			CatalogIndexInsert(idescs, Num_pg_attr_indices, rdesc, tup);
+			CatalogIndexInsert(idescs, Num_pg_attr_indices, rel, tup);
 
 		pfree(tup);
 		dpp++;
@@ -606,16 +605,16 @@ AddNewAttributeTuples(Oid new_rel_oid,
 							 ATTRIBUTE_TUPLE_SIZE,
 							 (char *) *dpp);
 
-		heap_insert(rdesc, tup);
+		heap_insert(rel, tup);
 
 		if (hasindex)
-			CatalogIndexInsert(idescs, Num_pg_attr_indices, rdesc, tup);
+			CatalogIndexInsert(idescs, Num_pg_attr_indices, rel, tup);
 
 		pfree(tup);
 		dpp++;
 	}
 
-	heap_close(rdesc);
+	heap_close(rel);
 
 	/*
 	 * close pg_attribute indices
@@ -878,7 +877,8 @@ RelationRemoveInheritance(Relation relation)
 	HeapTuple	tuple;
 	HeapScanDesc scan;
 	ScanKeyData entry;
-
+	bool		found = false;
+	
 	/* ----------------
 	 *	open pg_inherits
 	 * ----------------
@@ -892,7 +892,7 @@ RelationRemoveInheritance(Relation relation)
 	 */
 	ScanKeyEntryInitialize(&entry, 0x0, Anum_pg_inherits_inhparent,
 						   F_OIDEQ,
-					  ObjectIdGetDatum(RelationGetRelationId(relation)));
+					  ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	scan = heap_beginscan(catalogRelation,
 						  false,
@@ -904,7 +904,7 @@ RelationRemoveInheritance(Relation relation)
 	 *	if any subclasses exist, then we disallow the deletion.
 	 * ----------------
 	 */
-	tuple = heap_getnext(scan, 0, (Buffer *) NULL);
+	tuple = heap_getnext(scan, 0);
 	if (HeapTupleIsValid(tuple))
 	{
 		heap_endscan(scan);
@@ -928,12 +928,10 @@ RelationRemoveInheritance(Relation relation)
 						  1,
 						  &entry);
 
-	for (;;)
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 	{
-		tuple = heap_getnext(scan, 0, (Buffer *) NULL);
-		if (!HeapTupleIsValid(tuple))
-			break;
 		heap_delete(catalogRelation, &tuple->t_ctid);
+		found = true;
 	}
 
 	heap_endscan(scan);
@@ -943,8 +941,7 @@ RelationRemoveInheritance(Relation relation)
 	 *	now remove dead IPL tuples
 	 * ----------------
 	 */
-	catalogRelation =
-		heap_openr(InheritancePrecidenceListRelationName);
+	catalogRelation = heap_openr(InheritancePrecidenceListRelationName);
 
 	entry.sk_attno = Anum_pg_ipl_iplrel;
 
@@ -954,13 +951,8 @@ RelationRemoveInheritance(Relation relation)
 						  1,
 						  &entry);
 
-	for (;;)
-	{
-		tuple = heap_getnext(scan, 0, (Buffer *) NULL);
-		if (!HeapTupleIsValid(tuple))
-			break;
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 		heap_delete(catalogRelation, &tuple->t_ctid);
-	}
 
 	heap_endscan(scan);
 	heap_close(catalogRelation);
@@ -980,10 +972,10 @@ RelationRemoveIndexes(Relation relation)
 	ScanKeyData entry;
 
 	indexRelation = heap_openr(IndexRelationName);
-
+	
 	ScanKeyEntryInitialize(&entry, 0x0, Anum_pg_index_indrelid,
 						   F_OIDEQ,
-					  ObjectIdGetDatum(RelationGetRelationId(relation)));
+					  	   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	scan = heap_beginscan(indexRelation,
 						  false,
@@ -991,14 +983,8 @@ RelationRemoveIndexes(Relation relation)
 						  1,
 						  &entry);
 
-	for (;;)
-	{
-		tuple = heap_getnext(scan, 0, (Buffer *) NULL);
-		if (!HeapTupleIsValid(tuple))
-			break;
-
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 		index_destroy(((IndexTupleForm) GETSTRUCT(tuple))->indexrelid);
-	}
 
 	heap_endscan(scan);
 	heap_close(indexRelation);
@@ -1010,11 +996,9 @@ RelationRemoveIndexes(Relation relation)
  * --------------------------------
  */
 static void
-DeletePgRelationTuple(Relation rdesc)
+DeletePgRelationTuple(Relation rel)
 {
 	Relation	pg_class_desc;
-	HeapScanDesc pg_class_scan;
-	ScanKeyData key;
 	HeapTuple	tup;
 
 	/* ----------------
@@ -1023,42 +1007,23 @@ DeletePgRelationTuple(Relation rdesc)
 	 */
 	pg_class_desc = heap_openr(RelationRelationName);
 
-	/* ----------------
-	 *	create a scan key to locate the relation oid of the
-	 *	relation to delete
-	 * ----------------
-	 */
-	ScanKeyEntryInitialize(&key, 0, ObjectIdAttributeNumber,
-						   F_INT4EQ, rdesc->rd_att->attrs[0]->attrelid);
-
-	pg_class_scan = heap_beginscan(pg_class_desc,
-								   0,
-								   SnapshotNow,
-								   1,
-								   &key);
-
-	/* ----------------
-	 *	use heap_getnext() to fetch the pg_class tuple.  If this
-	 *	tuple is not valid then something's wrong.
-	 * ----------------
-	 */
-	tup = heap_getnext(pg_class_scan, 0, (Buffer *) NULL);
-
-	if (!PointerIsValid(tup))
+	tup = SearchSysCacheTupleCopy(RELOID,
+									ObjectIdGetDatum(rel->rd_att->attrs[0]->attrelid),
+									0, 0, 0);
+	if (!HeapTupleIsValid(tup))
 	{
-		heap_endscan(pg_class_scan);
 		heap_close(pg_class_desc);
 		elog(ERROR, "DeletePgRelationTuple: %s relation nonexistent",
-			 &rdesc->rd_rel->relname);
+			 &rel->rd_rel->relname);
 	}
 
 	/* ----------------
 	 *	delete the relation tuple from pg_class, and finish up.
 	 * ----------------
 	 */
-	heap_endscan(pg_class_scan);
 	heap_delete(pg_class_desc, &tup->t_ctid);
-
+	pfree(tup);
+	
 	heap_close(pg_class_desc);
 }
 
@@ -1068,57 +1033,36 @@ DeletePgRelationTuple(Relation rdesc)
  * --------------------------------
  */
 static void
-DeletePgAttributeTuples(Relation rdesc)
+DeletePgAttributeTuples(Relation rel)
 {
 	Relation	pg_attribute_desc;
-	HeapScanDesc pg_attribute_scan;
-	ScanKeyData key;
 	HeapTuple	tup;
-
+	int2		attnum;
+	
 	/* ----------------
 	 *	open pg_attribute
 	 * ----------------
 	 */
 	pg_attribute_desc = heap_openr(AttributeRelationName);
 
-	/* ----------------
-	 *	create a scan key to locate the attribute tuples to delete
-	 *	and begin the scan.
-	 * ----------------
-	 */
-	ScanKeyEntryInitialize(&key, 0, Anum_pg_attribute_attrelid,
-						   F_INT4EQ, rdesc->rd_att->attrs[0]->attrelid);
-
 	/* -----------------
 	 * Get a write lock _before_ getting the read lock in the scan
 	 * ----------------
 	 */
 	RelationSetLockForWrite(pg_attribute_desc);
 
-	pg_attribute_scan = heap_beginscan(pg_attribute_desc,
-									   0,
-									   SnapshotNow,
-									   1,
-									   &key);
+	attnum = FirstLowInvalidHeapAttributeNumber + 1; /* cmax */
 
-	/* ----------------
-	 *	use heap_getnext() / amdelete() until all attribute tuples
-	 *	have been deleted.
-	 * ----------------
-	 */
-	while (tup = heap_getnext(pg_attribute_scan, 0, (Buffer *) NULL),
-		   PointerIsValid(tup))
+	while (HeapTupleIsValid(tup = SearchSysCacheTupleCopy(ATTNUM,
+									ObjectIdGetDatum(rel->rd_att->attrs[0]->attrelid),
+									Int16GetDatum(attnum),
+									0, 0)))
 	{
-
 		heap_delete(pg_attribute_desc, &tup->t_ctid);
+		pfree(tup);
+		attnum++;
 	}
 
-	/* ----------------
-	 *	finish up.
-	 * ----------------
-	 */
-	heap_endscan(pg_attribute_scan);
-
 	/* ----------------
 	 * Release the write lock
 	 * ----------------
@@ -1127,7 +1071,6 @@ DeletePgAttributeTuples(Relation rdesc)
 	heap_close(pg_attribute_desc);
 }
 
-
 /* --------------------------------
  *		DeletePgTypeTuple
  *
@@ -1138,7 +1081,7 @@ DeletePgAttributeTuples(Relation rdesc)
  * --------------------------------
  */
 static void
-DeletePgTypeTuple(Relation rdesc)
+DeletePgTypeTuple(Relation rel)
 {
 	Relation	pg_type_desc;
 	HeapScanDesc pg_type_scan;
@@ -1162,7 +1105,7 @@ DeletePgTypeTuple(Relation rdesc)
 	 * ----------------
 	 */
 	ScanKeyEntryInitialize(&key, 0, Anum_pg_type_typrelid, F_INT4EQ,
-						   rdesc->rd_att->attrs[0]->attrelid);
+						   rel->rd_att->attrs[0]->attrelid);
 
 	pg_type_scan = heap_beginscan(pg_type_desc,
 								  0,
@@ -1175,14 +1118,14 @@ DeletePgTypeTuple(Relation rdesc)
 	 *	tuple is not valid then something's wrong.
 	 * ----------------
 	 */
-	tup = heap_getnext(pg_type_scan, 0, (Buffer *) NULL);
+	tup = heap_getnext(pg_type_scan, 0);
 
-	if (!PointerIsValid(tup))
+	if (!HeapTupleIsValid(tup))
 	{
 		heap_endscan(pg_type_scan);
 		heap_close(pg_type_desc);
 		elog(ERROR, "DeletePgTypeTuple: %s type nonexistent",
-			 &rdesc->rd_rel->relname);
+			 &rel->rd_rel->relname);
 	}
 
 	/* ----------------
@@ -1212,7 +1155,7 @@ DeletePgTypeTuple(Relation rdesc)
 	 *	the schema.
 	 * ----------------
 	 */
-	atttup = heap_getnext(pg_attribute_scan, 0, (Buffer *) NULL);
+	atttup = heap_getnext(pg_attribute_scan, 0);
 
 	if (PointerIsValid(atttup))
 	{
@@ -1224,7 +1167,7 @@ DeletePgTypeTuple(Relation rdesc)
 		heap_close(pg_attribute_desc);
 
 		elog(ERROR, "DeletePgTypeTuple: att of type %s exists in relation %d",
-			 &rdesc->rd_rel->relname, relid);
+			 &rel->rd_rel->relname, relid);
 	}
 	heap_endscan(pg_attribute_scan);
 	heap_close(pg_attribute_desc);
@@ -1235,9 +1178,9 @@ DeletePgTypeTuple(Relation rdesc)
 	 *	we release the read lock on pg_type.  -mer 13 Aug 1991
 	 * ----------------
 	 */
-	heap_endscan(pg_type_scan);
 	heap_delete(pg_type_desc, &tup->t_ctid);
 
+	heap_endscan(pg_type_scan);
 	heap_close(pg_type_desc);
 }
 
@@ -1249,7 +1192,7 @@ DeletePgTypeTuple(Relation rdesc)
 void
 heap_destroy_with_catalog(char *relname)
 {
-	Relation	rdesc;
+	Relation	rel;
 	Oid			rid;
 
 	/* ----------------
@@ -1257,50 +1200,50 @@ heap_destroy_with_catalog(char *relname)
 	 *	heap_openr() returns NULL.
 	 * ----------------
 	 */
-	rdesc = heap_openr(relname);
-	if (rdesc == NULL)
+	rel = heap_openr(relname);
+	if (rel == NULL)
 		elog(ERROR, "Relation %s Does Not Exist!", relname);
 
-	RelationSetLockForWrite(rdesc);
-	rid = rdesc->rd_id;
+	RelationSetLockForWrite(rel);
+	rid = rel->rd_id;
 
 	/* ----------------
 	 *	prevent deletion of system relations
 	 * ----------------
 	 */
-	if (IsSystemRelationName(RelationGetRelationName(rdesc)->data))
+	if (IsSystemRelationName(RelationGetRelationName(rel)->data))
 		elog(ERROR, "amdestroy: cannot destroy %s relation",
-			 &rdesc->rd_rel->relname);
+			 &rel->rd_rel->relname);
 
 	/* ----------------
 	 *	remove inheritance information
 	 * ----------------
 	 */
-	RelationRemoveInheritance(rdesc);
+	RelationRemoveInheritance(rel);
 
 	/* ----------------
 	 *	remove indexes if necessary
 	 * ----------------
 	 */
-	if (rdesc->rd_rel->relhasindex)
-		RelationRemoveIndexes(rdesc);
+	if (rel->rd_rel->relhasindex)
+		RelationRemoveIndexes(rel);
 
 	/* ----------------
 	 *	remove rules if necessary
 	 * ----------------
 	 */
-	if (rdesc->rd_rules != NULL)
+	if (rel->rd_rules != NULL)
 		RelationRemoveRules(rid);
 
 	/* triggers */
-	if (rdesc->rd_rel->reltriggers > 0)
-		RelationRemoveTriggers(rdesc);
+	if (rel->rd_rel->reltriggers > 0)
+		RelationRemoveTriggers(rel);
 
 	/* ----------------
 	 *	delete attribute tuples
 	 * ----------------
 	 */
-	DeletePgAttributeTuples(rdesc);
+	DeletePgAttributeTuples(rel);
 
 	/* ----------------
 	 *	delete type tuple.	here we want to see the effects
@@ -1308,41 +1251,41 @@ heap_destroy_with_catalog(char *relname)
 	 * ----------------
 	 */
 	setheapoverride(true);
-	DeletePgTypeTuple(rdesc);
+	DeletePgTypeTuple(rel);
 	setheapoverride(false);
 
 	/* ----------------
 	 *	delete relation tuple
 	 * ----------------
 	 */
-	DeletePgRelationTuple(rdesc);
+	DeletePgRelationTuple(rel);
 
 	/*
 	 * release dirty buffers of this relation
 	 */
-	ReleaseRelationBuffers(rdesc);
+	ReleaseRelationBuffers(rel);
 
 	/* ----------------
 	 *	flush the relation from the relcache
 	 * ----------------
 	 * Does nothing!!! Flushing moved below.	- vadim 06/04/97
-	RelationIdInvalidateRelationCacheByRelationId(rdesc->rd_id);
+	RelationIdInvalidateRelationCacheByRelationId(rel->rd_id);
 	 */
 
-	RemoveConstraints(rdesc);
+	RemoveConstraints(rel);
 
 	/* ----------------
 	 *	unlink the relation and finish up.
 	 * ----------------
 	 */
-	if (!(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked))
-		smgrunlink(DEFAULT_SMGR, rdesc);
+	if (!(rel->rd_istemp) || !(rel->rd_tmpunlinked))
+		smgrunlink(DEFAULT_SMGR, rel);
 
-	rdesc->rd_tmpunlinked = TRUE;
+	rel->rd_tmpunlinked = TRUE;
 
-	RelationUnsetLockForWrite(rdesc);
+	RelationUnsetLockForWrite(rel);
 
-	heap_close(rdesc);
+	heap_close(rel);
 
 	/* ok - flush the relation from the relcache */
 	RelationForgetRelation(rid);
@@ -1355,14 +1298,14 @@ heap_destroy_with_catalog(char *relname)
  */
 
 void
-heap_destroy(Relation rdesc)
+heap_destroy(Relation rel)
 {
-	ReleaseRelationBuffers(rdesc);
-	if (!(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked))
-		smgrunlink(DEFAULT_SMGR, rdesc);
-	rdesc->rd_tmpunlinked = TRUE;
-	heap_close(rdesc);
-	RemoveFromTempRelList(rdesc);
+	ReleaseRelationBuffers(rel);
+	if (!(rel->rd_istemp) || !(rel->rd_tmpunlinked))
+		smgrunlink(DEFAULT_SMGR, rel);
+	rel->rd_tmpunlinked = TRUE;
+	heap_close(rel);
+	RemoveFromTempRelList(rel);
 }
 
 
@@ -1456,17 +1399,17 @@ void
 DestroyTempRels(void)
 {
 	int			i;
-	Relation	rdesc;
+	Relation	rel;
 
 	if (!tempRels)
 		return;
 
 	for (i = 0; i < tempRels->num; i++)
 	{
-		rdesc = tempRels->rels[i];
-		/* rdesc may be NULL if it has been removed from the list already */
-		if (rdesc)
-			heap_destroy(rdesc);
+		rel = tempRels->rels[i];
+		/* rel may be NULL if it has been removed from the list already */
+		if (rel)
+			heap_destroy(rel);
 	}
 	free(tempRels->rels);
 	free(tempRels);
@@ -1649,7 +1592,7 @@ RemoveAttrDefault(Relation rel)
 
 	adscan = heap_beginscan(adrel, 0, SnapshotNow, 1, &key);
 
-	while (tup = heap_getnext(adscan, 0, (Buffer *) NULL), PointerIsValid(tup))
+	while (HeapTupleIsValid(tup = heap_getnext(adscan, 0)))
 		heap_delete(adrel, &tup->t_ctid);
 
 	heap_endscan(adscan);
@@ -1676,7 +1619,7 @@ RemoveRelCheck(Relation rel)
 
 	rcscan = heap_beginscan(rcrel, 0, SnapshotNow, 1, &key);
 
-	while (tup = heap_getnext(rcscan, 0, (Buffer *) NULL), PointerIsValid(tup))
+	while (HeapTupleIsValid(tup = heap_getnext(rcscan, 0)))
 		heap_delete(rcrel, &tup->t_ctid);
 
 	heap_endscan(rcscan);
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 00eccbac6228951379e33db0fffcb6ebb92f644c..05b7df73800b6fef80530de796f6f6525934755d 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.47 1998/07/27 19:37:47 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.48 1998/08/19 02:01:32 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -65,8 +65,7 @@
 
 /* non-export function prototypes */
 static Oid
-RelationNameGetObjectId(char *relationName, Relation pg_class,
-						bool setHasIndexAttribute);
+RelationNameGetObjectId(char *relationName, Relation pg_class);
 static Oid	GetHeapRelationOid(char *heapRelationName, char *indexRelationName);
 static TupleDesc BuildFuncTupleDesc(FuncIndexInfo *funcInfo);
 static TupleDesc
@@ -130,26 +129,15 @@ static FormData_pg_attribute sysatts[] = {
  * RelationNameGetObjectId --
  *		Returns the object identifier for a relation given its name.
  *
- * >	The HASINDEX attribute for the relation with this name will
- * >	be set if it exists and if it is indicated by the call argument.
- * What a load of bull.  This setHasIndexAttribute is totally ignored.
- * This is yet another silly routine to scan the catalogs which should
- * probably be replaced by SearchSysCacheTuple. -cim 1/19/91
- *
- * Note:
- *		Assumes relation name is valid.
- *		Assumes relation descriptor is valid.
  * ----------------------------------------------------------------
  */
 static Oid
 RelationNameGetObjectId(char *relationName,
-						Relation pg_class,
-						bool setHasIndexAttribute)
+						Relation pg_class)
 {
 	HeapScanDesc pg_class_scan;
 	HeapTuple	pg_class_tuple;
 	Oid			relationObjectId;
-	Buffer		buffer;
 	ScanKeyData key;
 
 	/*
@@ -159,20 +147,20 @@ RelationNameGetObjectId(char *relationName,
 
 	if (!IsBootstrapProcessingMode())
 	{
-		pg_class_tuple = ClassNameIndexScan(pg_class, relationName);
-		if (HeapTupleIsValid(pg_class_tuple))
-		{
-			relationObjectId = pg_class_tuple->t_oid;
-			pfree(pg_class_tuple);
-		}
+		HeapTuple 	tuple;
+	
+		tuple = SearchSysCacheTuple(RELNAME,
+									PointerGetDatum(relationName),
+									0, 0, 0);
+	
+		if (HeapTupleIsValid(tuple))
+			return tuple->t_oid;
 		else
-			relationObjectId = InvalidOid;
-
-		return (relationObjectId);
+			return InvalidOid;
 	}
 
 	/* ----------------
-	 *	Bootstrap time, do this the hard way.
+	 *	BOOTSTRAP TIME, do this the hard way.
 	 *	begin a scan of pg_class for the named relation
 	 * ----------------
 	 */
@@ -187,15 +175,12 @@ RelationNameGetObjectId(char *relationName,
 	 *	(the oid of the tuple we found).
 	 * ----------------
 	 */
-	pg_class_tuple = heap_getnext(pg_class_scan, 0, &buffer);
+	pg_class_tuple = heap_getnext(pg_class_scan, 0);
 
 	if (!HeapTupleIsValid(pg_class_tuple))
 		relationObjectId = InvalidOid;
 	else
-	{
 		relationObjectId = pg_class_tuple->t_oid;
-		ReleaseBuffer(buffer);
-	}
 
 	/* ----------------
 	 *	cleanup and return results
@@ -203,8 +188,7 @@ RelationNameGetObjectId(char *relationName,
 	 */
 	heap_endscan(pg_class_scan);
 
-	return
-		relationObjectId;
+	return relationObjectId;
 }
 
 
@@ -219,10 +203,6 @@ GetHeapRelationOid(char *heapRelationName, char *indexRelationName)
 	Oid			indoid;
 	Oid			heapoid;
 
-	/* ----------------
-	 *	XXX ADD INDEXING HERE
-	 * ----------------
-	 */
 	/* ----------------
 	 *	open pg_class and get the oid of the relation
 	 *	corresponding to the name of the index relation.
@@ -230,34 +210,18 @@ GetHeapRelationOid(char *heapRelationName, char *indexRelationName)
 	 */
 	pg_class = heap_openr(RelationRelationName);
 
-	indoid = RelationNameGetObjectId(indexRelationName,
-									 pg_class,
-									 false);
+	indoid = RelationNameGetObjectId(indexRelationName, pg_class);
 
 	if (OidIsValid(indoid))
 		elog(ERROR, "Cannot create index: '%s' already exists",
 			 indexRelationName);
 
-	/* ----------------
-	 *	get the object id of the heap relation
-	 * ----------------
-	 */
-	heapoid = RelationNameGetObjectId(heapRelationName,
-									  pg_class,
-									  true);
+	heapoid = RelationNameGetObjectId(heapRelationName, pg_class);
 
-	/* ----------------
-	 *	  check that the heap relation exists..
-	 * ----------------
-	 */
 	if (!OidIsValid(heapoid))
 		elog(ERROR, "Cannot create index on '%s': relation does not exist",
 			 heapRelationName);
 
-	/* ----------------
-	 *	  close pg_class and return the heap relation oid
-	 * ----------------
-	 */
 	heap_close(pg_class);
 
 	return heapoid;
@@ -508,7 +472,7 @@ AccessMethodObjectIdGetAccessMethodTupleForm(Oid accessMethodObjectId)
 	pg_am_desc = heap_openr(AccessMethodRelationName);
 	pg_am_scan = heap_beginscan(pg_am_desc, 0, SnapshotNow, 1, &key);
 
-	pg_am_tuple = heap_getnext(pg_am_scan, 0, (Buffer *) NULL);
+	pg_am_tuple = heap_getnext(pg_am_scan, 0);
 
 	/* ----------------
 	 *	return NULL if not found
@@ -597,7 +561,7 @@ UpdateRelationRelation(Relation indexRelation)
 	 *	company.
 	 * ----------------
 	 */
-	tuple->t_oid = indexRelation->rd_id;
+	tuple->t_oid = RelationGetRelid(indexRelation);
 	heap_insert(pg_class, tuple);
 
 	/*
@@ -649,8 +613,7 @@ static void
 AppendAttributeTuples(Relation indexRelation, int numatts)
 {
 	Relation	pg_attribute;
-	HeapTuple	tuple;
-	HeapTuple	newtuple;
+	HeapTuple	init_tuple, cur_tuple = NULL, new_tuple;
 	bool		hasind;
 	Relation	idescs[Num_pg_attr_indices];
 
@@ -686,7 +649,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts)
 	value[Anum_pg_attribute_attnum - 1] = Int16GetDatum(1);
 	value[Anum_pg_attribute_attcacheoff - 1] = Int32GetDatum(-1);
 
-	tuple = heap_addheader(Natts_pg_attribute,
+	init_tuple = heap_addheader(Natts_pg_attribute,
 						   sizeof *(indexRelation->rd_att->attrs[0]),
 						   (char *) (indexRelation->rd_att->attrs[0]));
 
@@ -701,19 +664,19 @@ AppendAttributeTuples(Relation indexRelation, int numatts)
 	 *	insert the first attribute tuple.
 	 * ----------------
 	 */
-	tuple = heap_modifytuple(tuple,
-							 InvalidBuffer,
+	cur_tuple = heap_modifytuple(init_tuple,
 							 pg_attribute,
 							 value,
 							 nullv,
 							 replace);
-
-	heap_insert(pg_attribute, tuple);
+	pfree(init_tuple);
+	
+	heap_insert(pg_attribute, cur_tuple);
 	if (hasind)
-		CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, tuple);
+		CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, cur_tuple);
 
 	/* ----------------
-	 *	now we use the information in the index tuple
+	 *	now we use the information in the index cur_tuple
 	 *	descriptor to form the remaining attribute tuples.
 	 * ----------------
 	 */
@@ -725,42 +688,37 @@ AppendAttributeTuples(Relation indexRelation, int numatts)
 		 *	process the remaining attributes...
 		 * ----------------
 		 */
-		memmove(GETSTRUCT(tuple),
+		memmove(GETSTRUCT(cur_tuple),
 				(char *) indexTupDesc->attrs[i],
 				sizeof(FormData_pg_attribute));
 
 		value[Anum_pg_attribute_attnum - 1] = Int16GetDatum(i + 1);
 
-		newtuple = heap_modifytuple(tuple,
-									InvalidBuffer,
+		new_tuple = heap_modifytuple(cur_tuple,
 									pg_attribute,
 									value,
 									nullv,
 									replace);
+		pfree(cur_tuple);
 
-		heap_insert(pg_attribute, newtuple);
+		heap_insert(pg_attribute,new_tuple);
 		if (hasind)
-			CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, newtuple);
+			CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, new_tuple);
 
 		/* ----------------
-		 *	ModifyHeapTuple returns a new copy of a tuple
+		 *	ModifyHeapTuple returns a new copy of a cur_tuple
 		 *	so we free the original and use the copy..
 		 * ----------------
 		 */
-		pfree(tuple);
-		tuple = newtuple;
+		 cur_tuple = new_tuple;
 	}
 
-	/* ----------------
-	 *	close the attribute relation and free the tuple
-	 * ----------------
-	 */
+	if (cur_tuple)
+		pfree(cur_tuple);
 	heap_close(pg_attribute);
-
 	if (hasind)
 		CatalogCloseIndices(Num_pg_attr_indices, idescs);
 
-	pfree(tuple);
 }
 
 /* ----------------------------------------------------------------
@@ -899,9 +857,6 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
 	Relation	pg_index;
 	HeapTuple	tuple;
 	HeapTuple	newtup;
-	ScanKeyData entry;
-	HeapScanDesc scan;
-	Buffer		buffer;
 	int			i;
 	Datum		values[Natts_pg_index];
 	char		nulls[Natts_pg_index];
@@ -941,14 +896,11 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
 	/* open the index system catalog relation */
 	pg_index = heap_openr(IndexRelationName);
 
-	ScanKeyEntryInitialize(&entry, 0x0, Anum_pg_index_indexrelid,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(indexoid));
-
-	scan = heap_beginscan(pg_index, 0, SnapshotNow, 1, &entry);
-	tuple = heap_getnext(scan, 0, &buffer);
-	heap_endscan(scan);
-
+	tuple = SearchSysCacheTuple(INDEXRELID,
+								  ObjectIdGetDatum(indexoid),
+								  0, 0, 0);
+	Assert(HeapTupleIsValid(tuple));
+	
 	for (i = 0; i < Natts_pg_index; i++)
 	{
 		nulls[i] = heap_attisnull(tuple, i + 1) ? 'n' : ' ';
@@ -959,10 +911,11 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
 	replace[Anum_pg_index_indpred - 1] = 'r';
 	values[Anum_pg_index_indpred - 1] = (Datum) predText;
 
-	newtup = heap_modifytuple(tuple, buffer, pg_index, values, nulls, replace);
+	newtup = heap_modifytuple(tuple, pg_index, values, nulls, replace);
 
-	heap_replace(pg_index, &(newtup->t_ctid), newtup);
+	heap_replace(pg_index, &newtup->t_ctid, newtup);
 
+	pfree(newtup);
 	heap_close(pg_index);
 	pfree(predText);
 }
@@ -1028,13 +981,13 @@ InitIndexStrategy(int numatts,
 	 *	catalogs, even though our transaction has not yet committed.
 	 * ----------------
 	 */
-	setheapoverride(1);
+	setheapoverride(true);
 
 	IndexSupportInitialize(strategy, support,
 						   attrelid, accessMethodObjectId,
 						   amstrategies, amsupport, numatts);
 
-	setheapoverride(0);
+	setheapoverride(false);
 
 	/* ----------------
 	 *	store the strategy information in the index reldesc
@@ -1221,9 +1174,8 @@ index_destroy(Oid indexId)
 	Relation	indexRelation;
 	Relation	catalogRelation;
 	HeapTuple	tuple;
-	HeapScanDesc scan;
-	ScanKeyData entry;
-
+	int16		attnum;
+	
 	Assert(OidIsValid(indexId));
 
 	indexRelation = index_open(indexId);
@@ -1234,17 +1186,14 @@ index_destroy(Oid indexId)
 	 */
 	catalogRelation = heap_openr(RelationRelationName);
 
-	ScanKeyEntryInitialize(&entry, 0x0, ObjectIdAttributeNumber,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(indexId));;
-
-	scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
-	tuple = heap_getnext(scan, 0, (Buffer *) NULL);
+	tuple = SearchSysCacheTupleCopy(RELOID,
+									ObjectIdGetDatum(indexId),
+									0, 0, 0);
 
 	AssertState(HeapTupleIsValid(tuple));
 
 	heap_delete(catalogRelation, &tuple->t_ctid);
-	heap_endscan(scan);
+	pfree(tuple);
 	heap_close(catalogRelation);
 
 	/* ----------------
@@ -1253,33 +1202,35 @@ index_destroy(Oid indexId)
 	 */
 	catalogRelation = heap_openr(AttributeRelationName);
 
-	entry.sk_attno = Anum_pg_attribute_attrelid;
-
-	scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
+	attnum = 1; /* indexes start at 1 */
 
-	while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
-		   HeapTupleIsValid(tuple))
+	while (HeapTupleIsValid(tuple = SearchSysCacheTupleCopy(ATTNUM,
+									ObjectIdGetDatum(indexId),
+									Int16GetDatum(attnum),
+									0, 0)))
+	{
 		heap_delete(catalogRelation, &tuple->t_ctid);
-	heap_endscan(scan);
+		pfree(tuple);
+		attnum++;
+	}
+
 	heap_close(catalogRelation);
 
 	/* ----------------
 	 * fix INDEX relation
 	 * ----------------
 	 */
-	catalogRelation = heap_openr(IndexRelationName);
-
-	entry.sk_attno = Anum_pg_index_indexrelid;
+	tuple = SearchSysCacheTupleCopy(INDEXRELID,
+								  ObjectIdGetDatum(indexId),
+								  0, 0, 0);
 
-	scan = heap_beginscan(catalogRelation, 0, SnapshotNow, 1, &entry);
-	tuple = heap_getnext(scan, 0, (Buffer *) NULL);
 	if (!HeapTupleIsValid(tuple))
 	{
 		elog(NOTICE, "IndexRelationDestroy: %s's INDEX tuple missing",
 			 RelationGetRelationName(indexRelation));
 	}
 	heap_delete(catalogRelation, &tuple->t_ctid);
-	heap_endscan(scan);
+	pfree(tuple);
 	heap_close(catalogRelation);
 
 	/*
@@ -1291,7 +1242,7 @@ index_destroy(Oid indexId)
 		elog(ERROR, "amdestroyr: unlink: %m");
 
 	index_close(indexRelation);
-	RelationForgetRelation(indexRelation->rd_id);
+	RelationForgetRelation(RelationGetRelid(indexRelation));
 }
 
 /* ----------------------------------------------------------------
@@ -1307,7 +1258,6 @@ FormIndexDatum(int numberOfAttributes,
 			   AttrNumber attributeNumber[],
 			   HeapTuple heapTuple,
 			   TupleDesc heapDescriptor,
-			   Buffer buffer,
 			   Datum *datum,
 			   char *nullv,
 			   FuncIndexInfoPtr fInfo)
@@ -1333,8 +1283,7 @@ FormIndexDatum(int numberOfAttributes,
 										  offset,
 										  attributeNumber,
 										  fInfo,
-										  &isNull,
-										  buffer));
+										  &isNull));
 
 		nullv[offset] = (isNull) ? 'n' : ' ';
 	}
@@ -1350,25 +1299,16 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
 {
 	Relation	whichRel;
 	Relation	pg_class;
-	HeapScanDesc pg_class_scan;
-	HeapTuple	htup;
+	HeapTuple	tuple;
 	HeapTuple	newtup;
 	long		relpages;
-	Buffer		buffer;
 	int			i;
 	Form_pg_class rd_rel;
 	Relation	idescs[Num_pg_class_indices];
-
-	static ScanKeyData key[1] = {
-		{0, ObjectIdAttributeNumber, F_OIDEQ}
-	};
 	Datum		values[Natts_pg_class];
 	char		nulls[Natts_pg_class];
 	char		replace[Natts_pg_class];
 
-	fmgr_info(F_OIDEQ, &key[0].sk_func);
-	key[0].sk_nargs = key[0].sk_func.fn_nargs;
-
 	/* ----------------
 	 * This routine handles updates for both the heap and index relation
 	 * statistics.	In order to guarantee that we're able to *see* the index
@@ -1399,21 +1339,16 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
 	pg_class = heap_openr(RelationRelationName);
 	if (!RelationIsValid(pg_class))
 		elog(ERROR, "UpdateStats: could not open RELATION relation");
-	key[0].sk_argument = ObjectIdGetDatum(relid);
 
-	pg_class_scan =
-		heap_beginscan(pg_class, 0, SnapshotNow, 1, key);
-
-	if (!HeapScanIsValid(pg_class_scan))
+	tuple = SearchSysCacheTupleCopy(RELOID,
+									ObjectIdGetDatum(relid),
+									0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 	{
 		heap_close(pg_class);
 		elog(ERROR, "UpdateStats: cannot scan RELATION relation");
 	}
 
-	/* if the heap_open above succeeded, then so will this heap_getnext() */
-	htup = heap_getnext(pg_class_scan, 0, &buffer);
-	heap_endscan(pg_class_scan);
-
 	/* ----------------
 	 *	update statistics
 	 * ----------------
@@ -1432,7 +1367,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
 
 	for (i = 0; i < Natts_pg_class; i++)
 	{
-		nulls[i] = heap_attisnull(htup, i + 1) ? 'n' : ' ';
+		nulls[i] = heap_attisnull(tuple, i + 1) ? 'n' : ' ';
 		replace[i] = ' ';
 		values[i] = (Datum) NULL;
 	}
@@ -1451,7 +1386,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
 		 * visibility of changes, so we cheat.
 		 */
 
-		rd_rel = (Form_pg_class) GETSTRUCT(htup);
+		rd_rel = (Form_pg_class) GETSTRUCT(tuple);
 		rd_rel->relpages = relpages;
 		rd_rel->reltuples = reltuples;
 		rd_rel->relhasindex = hasindex;
@@ -1466,14 +1401,15 @@ UpdateStats(Oid relid, long reltuples, bool hasindex)
 		replace[Anum_pg_class_relhasindex - 1] = 'r';
 		values[Anum_pg_class_relhasindex - 1] = CharGetDatum(hasindex);
 
-		newtup = heap_modifytuple(htup, buffer, pg_class, values,
-								  nulls, replace);
-		heap_replace(pg_class, &(newtup->t_ctid), newtup);
+		newtup = heap_modifytuple(tuple, pg_class, values, nulls, replace);
+		heap_replace(pg_class, &newtup->t_ctid, newtup);
+		pfree(newtup);
 		CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs);
 		CatalogIndexInsert(idescs, Num_pg_class_indices, pg_class, newtup);
 		CatalogCloseIndices(Num_pg_class_indices, idescs);
 	}
 
+	pfree(tuple);
 	heap_close(pg_class);
 	heap_close(whichRel);
 }
@@ -1521,8 +1457,6 @@ DefaultBuild(Relation heapRelation,
 {
 	HeapScanDesc scan;
 	HeapTuple	heapTuple;
-	Buffer		buffer;
-
 	IndexTuple	indexTuple;
 	TupleDesc	heapDescriptor;
 	TupleDesc	indexDescriptor;
@@ -1582,7 +1516,8 @@ DefaultBuild(Relation heapRelation,
 		tupleTable = ExecCreateTupleTable(1);
 		slot = ExecAllocTableSlot(tupleTable);
 		econtext = makeNode(ExprContext);
-		FillDummyExprContext(econtext, slot, heapDescriptor, buffer);
+					/* last parameter was junk being sent bjm 1998/08/17 */
+		FillDummyExprContext(econtext, slot, heapDescriptor, InvalidBuffer);
 	}
 	else
 	{
@@ -1611,10 +1546,8 @@ DefaultBuild(Relation heapRelation,
 	 *	with correct statistics when we're done building the index.
 	 * ----------------
 	 */
-	while (heapTuple = heap_getnext(scan, 0, &buffer),
-		   HeapTupleIsValid(heapTuple))
+	while (HeapTupleIsValid(heapTuple = heap_getnext(scan, 0)))
 	{
-
 		reltuples++;
 
 		/*
@@ -1659,7 +1592,6 @@ DefaultBuild(Relation heapRelation,
 					   attributeNumber, /* array of att nums to extract */
 					   heapTuple,		/* tuple from base relation */
 					   heapDescriptor,	/* heap tuple's descriptor */
-					   buffer,	/* buffer used in the scan */
 					   datum,	/* return: array of attributes */
 					   nullv,	/* return: array of char's */
 					   funcInfo);
@@ -1697,13 +1629,14 @@ DefaultBuild(Relation heapRelation,
 	 * the vacuum daemon, but we update them here to make the index useful
 	 * as soon as possible.
 	 */
-	UpdateStats(heapRelation->rd_id, reltuples, true);
-	UpdateStats(indexRelation->rd_id, indtuples, false);
+	UpdateStats(RelationGetRelid(heapRelation), reltuples, true);
+	UpdateStats(RelationGetRelid(indexRelation), indtuples, false);
 	if (oldPred != NULL)
 	{
 		if (indtuples == reltuples)
 			predicate = NULL;
-		UpdateIndexPredicate(indexRelation->rd_id, oldPred, predicate);
+		UpdateIndexPredicate(RelationGetRelid(indexRelation),
+							 oldPred, predicate);
 	}
 }
 
@@ -1814,12 +1747,11 @@ IndexIsUniqueNoCache(Oid indexId)
 
 	scandesc = heap_beginscan(pg_index, 0, SnapshotSelf, 1, skey);
 
-	tuple = heap_getnext(scandesc, 0, NULL);
+	/* NO CACHE */
+	tuple = heap_getnext(scandesc, 0);
 	if (!HeapTupleIsValid(tuple))
-	{
-		elog(ERROR, "IndexIsUniqueNoCache: can't find index id %d",
-			 indexId);
-	}
+		elog(ERROR, "IndexIsUniqueNoCache: can't find index id %d", indexId);
+
 	index = (IndexTupleForm) GETSTRUCT(tuple);
 	Assert(index->indexrelid == indexId);
 	isunique = index->indisunique;
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index ae4846cb05fdf2b773b9d68a03430936c025a632..5a4ab5ff03ecc860d142a1063676d3d618970db0 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.19 1998/07/27 19:37:48 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.20 1998/08/19 02:01:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,6 @@
 #include "nodes/execnodes.h"
 #include "storage/bufmgr.h"
 #include "utils/builtins.h"
-#include "utils/oidcompos.h"
 #include "utils/syscache.h"
 
 /*
@@ -62,10 +61,10 @@ char	   *Name_pg_relcheck_indices[Num_pg_relcheck_indices] = {RelCheckIndex};
 char	   *Name_pg_trigger_indices[Num_pg_trigger_indices] = {TriggerRelidIndex};
 
 
-static HeapTuple
-CatalogIndexFetchTuple(Relation heapRelation,
+static HeapTuple CatalogIndexFetchTuple(Relation heapRelation,
 					   Relation idesc,
-					   ScanKey skey);
+					   ScanKey skey,
+					   int16 num_keys);
 
 
 /*
@@ -127,7 +126,7 @@ CatalogIndexInsert(Relation *idescs,
 
 		indexDescriptor = RelationGetTupleDescriptor(idescs[i]);
 		pgIndexTup = SearchSysCacheTuple(INDEXRELID,
-										 Int32GetDatum(idescs[i]->rd_id),
+										 ObjectIdGetDatum(idescs[i]->rd_id),
 										 0, 0, 0);
 		Assert(pgIndexTup);
 		pgIndexP = (IndexTupleForm) GETSTRUCT(pgIndexTup);
@@ -156,13 +155,12 @@ CatalogIndexInsert(Relation *idescs,
 					   (AttrNumber *) &pgIndexP->indkey[0],
 					   heapTuple,
 					   heapDescriptor,
-					   InvalidBuffer,
 					   &datum,
 					   nulls,
 					   finfoP);
 
 		indexRes = index_insert(idescs[i], &datum, nulls,
-								&(heapTuple->t_ctid), heapRelation);
+								&heapTuple->t_ctid, heapRelation);
 		if (indexRes)
 			pfree(indexRes);
 	}
@@ -223,16 +221,16 @@ CatalogHasIndex(char *catName, Oid catId)
 static HeapTuple
 CatalogIndexFetchTuple(Relation heapRelation,
 					   Relation idesc,
-					   ScanKey skey)
+					   ScanKey skey,
+					   int16 num_keys)
 {
 	IndexScanDesc sd;
 	RetrieveIndexResult indexRes;
 	HeapTuple	tuple;
 	Buffer		buffer;
-
-	sd = index_beginscan(idesc, false, 1, skey);
+	
+	sd = index_beginscan(idesc, false, num_keys, skey);
 	tuple = (HeapTuple) NULL;
-
 	do
 	{
 		indexRes = index_getnext(sd, ForwardScanDirection);
@@ -249,10 +247,10 @@ CatalogIndexFetchTuple(Relation heapRelation,
 	} while (!HeapTupleIsValid(tuple));
 
 	if (HeapTupleIsValid(tuple))
-	{
 		tuple = heap_copytuple(tuple);
+
+	if (BufferIsValid(buffer))
 		ReleaseBuffer(buffer);
-	}
 
 	index_endscan(sd);
 	pfree(sd);
@@ -271,22 +269,25 @@ AttributeNameIndexScan(Relation heapRelation,
 					   char *attname)
 {
 	Relation	idesc;
-	ScanKeyData skey;
-	OidName		keyarg;
+	ScanKeyData skey[2];
 	HeapTuple	tuple;
 
-	keyarg = mkoidname(relid, attname);
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
-						   (RegProcedure) F_OIDNAMEEQ,
-						   (Datum) keyarg);
+						   (RegProcedure)F_OIDEQ,
+						   Int32GetDatum(relid));
+
+	ScanKeyEntryInitialize(&skey[1],
+						   (bits16) 0x0,
+						   (AttrNumber) 2,
+						   (RegProcedure)F_NAMEEQ,
+						   NameGetDatum(attname));
 
 	idesc = index_openr(AttributeNameIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 2);
 
 	index_close(idesc);
-	pfree(keyarg);
 
 	return tuple;
 }
@@ -297,22 +298,25 @@ AttributeNumIndexScan(Relation heapRelation,
 					  AttrNumber attnum)
 {
 	Relation	idesc;
-	ScanKeyData skey;
-	OidInt2		keyarg;
+	ScanKeyData skey[2];
 	HeapTuple	tuple;
 
-	keyarg = mkoidint2(relid, (uint16) attnum);
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
-						   (RegProcedure) F_OIDINT2EQ,
-						   (Datum) keyarg);
+						   (RegProcedure)F_OIDEQ,
+						   Int32GetDatum(relid));
+
+	ScanKeyEntryInitialize(&skey[1],
+						   (bits16) 0x0,
+						   (AttrNumber) 2,
+						   (RegProcedure)F_INT2EQ,
+						   Int16GetDatum(attnum));
 
 	idesc = index_openr(AttributeNumIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 2);
 
 	index_close(idesc);
-	pfree(keyarg);
 
 	return tuple;
 }
@@ -321,17 +325,17 @@ HeapTuple
 ProcedureOidIndexScan(Relation heapRelation, Oid procId)
 {
 	Relation	idesc;
-	ScanKeyData skey;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
 						   (Datum) procId);
 
 	idesc = index_openr(ProcedureOidIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
 	index_close(idesc);
 
@@ -343,92 +347,37 @@ ProcedureOidIndexScan(Relation heapRelation, Oid procId)
 HeapTuple
 ProcedureNameIndexScan(Relation heapRelation,
 					   char *procName,
-					   int nargs,
+					   int2 nargs,
 					   Oid *argTypes)
 {
 	Relation	idesc;
-	ScanKeyData skey;
-	HeapTuple	tuple;			/* tuple being tested */
-	HeapTuple	return_tuple;	/* The tuple pointer we eventually return */
-	IndexScanDesc sd;
-	RetrieveIndexResult indexRes;
-	Buffer		buffer;
-	Form_pg_proc pgProcP;
-	bool		ScanComplete;
-
-	/*
-	 * The index scan is complete, i.e. we've scanned everything there is
-	 * to scan.
-	 */
-	bool		FoundMatch;
-
-	/*
-	 * In scanning pg_proc, we have found a row that meets our search
-	 * criteria.
-	 */
+	ScanKeyData skey[3];
+	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_NAMEEQ,
 						   (Datum) procName);
 
-	idesc = index_openr(ProcedureNameIndex);
-
-	sd = index_beginscan(idesc, false, 1, &skey);
-
-	/*
-	 * for now, we do the work usually done by CatalogIndexFetchTuple by
-	 * hand, so that we can check that the other keys match.  when
-	 * multi-key indices are added, they will be used here.
-	 */
-	tuple = (HeapTuple) NULL;	/* initial value */
-	ScanComplete = false;		/* Scan hasn't begun yet */
-	FoundMatch = false;			/* No match yet; haven't even looked. */
-	while (!FoundMatch && !ScanComplete)
-	{
-		indexRes = index_getnext(sd, ForwardScanDirection);
-		if (indexRes)
-		{
-			ItemPointer iptr;
+	ScanKeyEntryInitialize(&skey[1],
+						   (bits16) 0x0,
+						   (AttrNumber) 2,
+						   (RegProcedure) F_INT2EQ,
+						   Int16GetDatum(nargs));
 
-			iptr = &indexRes->heap_iptr;
-			tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
-			pfree(indexRes);
-			if (HeapTupleIsValid(tuple))
-			{
-
-				/*
-				 * Here's a row for a procedure that has the sought
-				 * procedure name.	To be a match, though, we need it to
-				 * have the right number and type of arguments too, so we
-				 * check that now.
-				 */
-				pgProcP = (Form_pg_proc) GETSTRUCT(tuple);
-				if (pgProcP->pronargs == nargs &&
-					oid8eq(&(pgProcP->proargtypes[0]), argTypes))
-					FoundMatch = true;
-				else
-					ReleaseBuffer(buffer);
-			}
-		}
-		else
-			ScanComplete = true;
-	}
+	ScanKeyEntryInitialize(&skey[2],
+						   (bits16) 0x0,
+						   (AttrNumber) 3,
+						   (RegProcedure) F_OID8EQ,
+						   (Datum) argTypes);
 
-	if (FoundMatch)
-	{
-		Assert(HeapTupleIsValid(tuple));
-		return_tuple = heap_copytuple(tuple);
-		ReleaseBuffer(buffer);
-	}
-	else
-		return_tuple = (HeapTuple) NULL;
+	idesc = index_openr(ProcedureNameIndex);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 3);
 
-	index_endscan(sd);
 	index_close(idesc);
 
-	return return_tuple;
+	return tuple;
 }
 
 
@@ -437,40 +386,19 @@ HeapTuple
 ProcedureSrcIndexScan(Relation heapRelation, text *procSrc)
 {
 	Relation	idesc;
-	IndexScanDesc sd;
-	ScanKeyData skey;
-	RetrieveIndexResult indexRes;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
-	Buffer		buffer;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
-						   (AttrNumber) Anum_pg_proc_prosrc,
+						   (AttrNumber) 1,
 						   (RegProcedure) F_TEXTEQ,
 						   (Datum) procSrc);
 
 	idesc = index_openr(ProcedureSrcIndex);
-	sd = index_beginscan(idesc, false, 1, &skey);
-
-	indexRes = index_getnext(sd, ForwardScanDirection);
-	if (indexRes)
-	{
-		ItemPointer iptr;
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
-		iptr = &indexRes->heap_iptr;
-		tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
-		pfree(indexRes);
-	}
-	else
-		tuple = (HeapTuple) NULL;
-
-	if (HeapTupleIsValid(tuple))
-	{
-		tuple = heap_copytuple(tuple);
-		ReleaseBuffer(buffer);
-	}
-
-	index_endscan(sd);
+	index_close(idesc);
 
 	return tuple;
 }
@@ -479,17 +407,17 @@ HeapTuple
 TypeOidIndexScan(Relation heapRelation, Oid typeId)
 {
 	Relation	idesc;
-	ScanKeyData skey;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
 						   (Datum) typeId);
 
 	idesc = index_openr(TypeOidIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
 	index_close(idesc);
 
@@ -500,17 +428,17 @@ HeapTuple
 TypeNameIndexScan(Relation heapRelation, char *typeName)
 {
 	Relation	idesc;
-	ScanKeyData skey;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_NAMEEQ,
 						   (Datum) typeName);
 
 	idesc = index_openr(TypeNameIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
 	index_close(idesc);
 
@@ -521,18 +449,17 @@ HeapTuple
 ClassNameIndexScan(Relation heapRelation, char *relName)
 {
 	Relation	idesc;
-	ScanKeyData skey;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_NAMEEQ,
 						   (Datum) relName);
 
 	idesc = index_openr(ClassNameIndex);
-
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
 	index_close(idesc);
 	return tuple;
@@ -542,17 +469,17 @@ HeapTuple
 ClassOidIndexScan(Relation heapRelation, Oid relId)
 {
 	Relation	idesc;
-	ScanKeyData skey;
+	ScanKeyData skey[1];
 	HeapTuple	tuple;
 
-	ScanKeyEntryInitialize(&skey,
+	ScanKeyEntryInitialize(&skey[0],
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
 						   (Datum) relId);
 
 	idesc = index_openr(ClassOidIndex);
-	tuple = CatalogIndexFetchTuple(heapRelation, idesc, &skey);
+	tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 1);
 
 	index_close(idesc);
 
diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c
index 1a650b3d971342f9b0eebe307b0e7ca12a91f301..045bdd002f72378c1ca7dc5917713e1382a4be8e 100644
--- a/src/backend/catalog/pg_aggregate.c
+++ b/src/backend/catalog/pg_aggregate.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.14 1998/04/01 15:35:01 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.15 1998/08/19 02:01:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -155,7 +155,8 @@ AggregateCreate(char *aggName,
 			elog(ERROR, "AggregateCreate: bogus function '%s'", aggfinalfnName);
 	}
 
-	tup = SearchSysCacheTuple(AGGNAME, PointerGetDatum(aggName),
+	tup = SearchSysCacheTuple(AGGNAME,
+							  PointerGetDatum(aggName),
 							  ObjectIdGetDatum(xbase),
 							  0, 0);
 	if (HeapTupleIsValid(tup))
@@ -286,7 +287,7 @@ AggNameGetInitVal(char *aggName, Oid basetype, int xfuncno, bool *isNull)
 
 	tup = SearchSysCacheTuple(AGGNAME,
 							  PointerGetDatum(aggName),
-							  PointerGetDatum(basetype),
+							  ObjectIdGetDatum(basetype),
 							  0, 0);
 	if (!HeapTupleIsValid(tup))
 		elog(ERROR, "AggNameGetInitVal: cache lookup failed for aggregate '%s'",
@@ -325,7 +326,8 @@ AggNameGetInitVal(char *aggName, Oid basetype, int xfuncno, bool *isNull)
 	strInitVal = textout(textInitVal);
 	heap_close(aggRel);
 
-	tup = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(transtype),
+	tup = SearchSysCacheTuple(TYPOID,
+							  ObjectIdGetDatum(transtype),
 							  0, 0, 0);
 	if (!HeapTupleIsValid(tup))
 	{
diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c
index 80ffcb7d7da6c846ee528db4a2829b39c3812e33..22209ec1f3973d5b31eda9a613c1fea9a69248d9 100644
--- a/src/backend/catalog/pg_operator.c
+++ b/src/backend/catalog/pg_operator.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.26 1998/07/27 19:37:49 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.27 1998/08/19 02:01:36 momjian Exp $
  *
  * NOTES
  *	  these routines moved here from commands/define.c and somewhat cleaned up.
@@ -120,7 +120,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc,
 	 */
 	pg_operator_scan = heap_beginscan(pg_operator_desc,
 									  0,
-									  SnapshotSelf,
+									  SnapshotSelf, /* no cache? */
 									  3,
 									  opKey);
 
@@ -129,7 +129,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc,
 	 *	the proper return oid value.
 	 * ----------------
 	 */
-	tup = heap_getnext(pg_operator_scan, 0, (Buffer *) 0);
+	tup = heap_getnext(pg_operator_scan, 0);
 	operatorObjectId = HeapTupleIsValid(tup) ? tup->t_oid : InvalidOid;
 
 	/* ----------------
@@ -138,8 +138,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc,
 	 */
 	heap_endscan(pg_operator_scan);
 
-	return
-		operatorObjectId;
+	return operatorObjectId;
 }
 
 /* ----------------------------------------------------------------
@@ -462,8 +461,6 @@ OperatorDef(char *operatorName,
 
 	HeapScanDesc pg_operator_scan;
 	HeapTuple	tup;
-	Buffer		buffer;
-	ItemPointerData itemPointerData;
 	char		nulls[Natts_pg_operator];
 	char		replaces[Natts_pg_operator];
 	Datum		values[Natts_pg_operator];
@@ -549,7 +546,7 @@ OperatorDef(char *operatorName,
 							  PointerGetDatum(typeId),
 							  0);
 
-	if (!PointerIsValid(tup))
+	if (!HeapTupleIsValid(tup))
 		func_error("OperatorDef", procedureName, nargs, typeId, NULL);
 
 	values[Anum_pg_operator_oprcode - 1] = ObjectIdGetDatum(tup->t_oid);
@@ -693,7 +690,7 @@ OperatorDef(char *operatorName,
 	/* last three fields were filled in first */
 
 	/*
-	 * If we are adding to an operator shell, get its t_ctid and a buffer.
+	 * If we are adding to an operator shell, get its t_ctid
 	 */
 	pg_operator_desc = heap_openr(OperatorRelationName);
 
@@ -705,30 +702,27 @@ OperatorDef(char *operatorName,
 
 		pg_operator_scan = heap_beginscan(pg_operator_desc,
 										  0,
-										  SnapshotSelf,
+										  SnapshotSelf, /* no cache? */
 										  3,
 										  opKey);
 
-		tup = heap_getnext(pg_operator_scan, 0, &buffer);
+		tup = heap_getnext(pg_operator_scan, 0);
 		if (HeapTupleIsValid(tup))
 		{
 			tup = heap_modifytuple(tup,
-								   buffer,
 								   pg_operator_desc,
 								   values,
 								   nulls,
 								   replaces);
 
-			ItemPointerCopy(&tup->t_ctid, &itemPointerData);
 			setheapoverride(true);
-			heap_replace(pg_operator_desc, &itemPointerData, tup);
+			heap_replace(pg_operator_desc, &tup->t_ctid, tup);
 			setheapoverride(false);
 		}
 		else
 			elog(ERROR, "OperatorDef: no operator %d", other_oid);
 
 		heap_endscan(pg_operator_scan);
-
 	}
 	else
 	{
@@ -777,8 +771,6 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 	Relation	pg_operator_desc;
 	HeapScanDesc pg_operator_scan;
 	HeapTuple	tup;
-	Buffer		buffer;
-	ItemPointerData itemPointerData;
 	char		nulls[Natts_pg_operator];
 	char		replaces[Natts_pg_operator];
 	Datum		values[Natts_pg_operator];
@@ -804,11 +796,11 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 
 	pg_operator_scan = heap_beginscan(pg_operator_desc,
 									  0,
-									  SnapshotSelf,
+									  SnapshotSelf, /* no cache? */
 									  1,
 									  opKey);
 
-	tup = heap_getnext(pg_operator_scan, 0, &buffer);
+	tup = heap_getnext(pg_operator_scan, 0);
 
 	/* if the commutator and negator are the same operator, do one update */
 	if (commId == negId)
@@ -837,16 +829,13 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 				}
 
 				tup = heap_modifytuple(tup,
-									   buffer,
 									   pg_operator_desc,
 									   values,
 									   nulls,
 									   replaces);
 
-				ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-
 				setheapoverride(true);
-				heap_replace(pg_operator_desc, &itemPointerData, tup);
+				heap_replace(pg_operator_desc, &tup->t_ctid, tup);
 				setheapoverride(false);
 
 			}
@@ -855,10 +844,6 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 
 		heap_close(pg_operator_desc);
 
-		/* release the buffer properly */
-		if (BufferIsValid(buffer))
-			ReleaseBuffer(buffer);
-
 		return;
 	}
 
@@ -869,24 +854,17 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 		values[Anum_pg_operator_oprcom - 1] = ObjectIdGetDatum(baseId);
 		replaces[Anum_pg_operator_oprcom - 1] = 'r';
 		tup = heap_modifytuple(tup,
-							   buffer,
 							   pg_operator_desc,
 							   values,
 							   nulls,
 							   replaces);
 
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
 		setheapoverride(true);
-		heap_replace(pg_operator_desc, &itemPointerData, tup);
+		heap_replace(pg_operator_desc, &tup->t_ctid, tup);
 		setheapoverride(false);
 
 		values[Anum_pg_operator_oprcom - 1] = (Datum) NULL;
 		replaces[Anum_pg_operator_oprcom - 1] = ' ';
-
-		/* release the buffer properly */
-		if (BufferIsValid(buffer))
-			ReleaseBuffer(buffer);
-
 	}
 
 	/* check and update the negator, if necessary */
@@ -894,34 +872,27 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId)
 
 	pg_operator_scan = heap_beginscan(pg_operator_desc,
 									  0,
-									  SnapshotSelf,
+									  SnapshotSelf, /* no cache? */
 									  1,
 									  opKey);
 
-	tup = heap_getnext(pg_operator_scan, 0, &buffer);
+	tup = heap_getnext(pg_operator_scan, 0);
 	if (HeapTupleIsValid(tup) &&
 		!(OidIsValid(((OperatorTupleForm) GETSTRUCT(tup))->oprnegate)))
 	{
 		values[Anum_pg_operator_oprnegate - 1] = ObjectIdGetDatum(baseId);
 		replaces[Anum_pg_operator_oprnegate - 1] = 'r';
 		tup = heap_modifytuple(tup,
-							   buffer,
 							   pg_operator_desc,
 							   values,
 							   nulls,
 							   replaces);
 
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-
 		setheapoverride(true);
-		heap_replace(pg_operator_desc, &itemPointerData, tup);
+		heap_replace(pg_operator_desc, &tup->t_ctid, tup);
 		setheapoverride(false);
 	}
 
-	/* release the buffer properly */
-	if (BufferIsValid(buffer))
-		ReleaseBuffer(buffer);
-
 	heap_endscan(pg_operator_scan);
 
 	heap_close(pg_operator_desc);
diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index 44506a35c44e09cf22aac13a15b2dbf9f405b3d8..ecebeb84d19957c2866e5b0077f0c87c8e55b958 100644
--- a/src/backend/catalog/pg_proc.c
+++ b/src/backend/catalog/pg_proc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.18 1998/06/15 19:28:10 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.19 1998/08/19 02:01:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,7 +57,7 @@ ProcedureCreate(char *procedureName,
 				CommandDest dest)
 {
 	int			i;
-	Relation	rdesc;
+	Relation	rel;
 	HeapTuple	tup;
 	bool		defined;
 	uint16		parameterCount;
@@ -258,23 +258,23 @@ ProcedureCreate(char *procedureName,
 	values[i++] = (Datum) fmgr(F_TEXTIN, prosrc);		/* prosrc */
 	values[i++] = (Datum) fmgr(F_TEXTIN, probin);		/* probin */
 
-	rdesc = heap_openr(ProcedureRelationName);
+	rel = heap_openr(ProcedureRelationName);
 
-	tupDesc = rdesc->rd_att;
+	tupDesc = rel->rd_att;
 	tup = heap_formtuple(tupDesc,
 						 values,
 						 nulls);
 
-	heap_insert(rdesc, tup);
+	heap_insert(rel, tup);
 
-	if (RelationGetRelationTupleForm(rdesc)->relhasindex)
+	if (RelationGetRelationTupleForm(rel)->relhasindex)
 	{
 		Relation	idescs[Num_pg_proc_indices];
 
 		CatalogOpenIndices(Num_pg_proc_indices, Name_pg_proc_indices, idescs);
-		CatalogIndexInsert(idescs, Num_pg_proc_indices, rdesc, tup);
+		CatalogIndexInsert(idescs, Num_pg_proc_indices, rel, tup);
 		CatalogCloseIndices(Num_pg_proc_indices, idescs);
 	}
-	heap_close(rdesc);
+	heap_close(rel);
 	return tup->t_oid;
 }
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index a9ad27a3b2d1e71e70dfe1b979f935198edf811d..a23e73893f825dc1aab9ae3fd0a2a17c85250a28 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.26 1998/07/27 19:37:49 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.27 1998/08/19 02:01:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,6 +21,7 @@
 #include "fmgr.h"
 #include "miscadmin.h"
 #include "parser/parse_func.h"
+#include "storage/bufmgr.h"
 #include "storage/lmgr.h"
 #include "utils/builtins.h"
 #include "utils/syscache.h"
@@ -68,7 +69,7 @@ TypeGetWithOpenRelation(Relation pg_type_desc,
 
 	scan = heap_beginscan(pg_type_desc,
 						  0,
-						  SnapshotSelf,
+						  SnapshotSelf, /* cache? */
 						  1,
 						  typeKey);
 
@@ -76,7 +77,7 @@ TypeGetWithOpenRelation(Relation pg_type_desc,
 	 *	get the type tuple, if it exists.
 	 * ----------------
 	 */
-	tup = heap_getnext(scan, 0, (Buffer *) 0);
+	tup = heap_getnext(scan, 0);
 
 	/* ----------------
 	 *	if no type tuple exists for the given type name, then
@@ -99,8 +100,7 @@ TypeGetWithOpenRelation(Relation pg_type_desc,
 	heap_endscan(scan);
 	*defined = (bool) ((TypeTupleForm) GETSTRUCT(tup))->typisdefined;
 
-	return
-		tup->t_oid;
+	return tup->t_oid;
 }
 
 /* ----------------------------------------------------------------
@@ -143,8 +143,7 @@ TypeGet(char *typeName,			/* name of type to be fetched */
 	 */
 	heap_close(pg_type_desc);
 
-	return
-		typeoid;
+	return typeoid;
 }
 
 /* ----------------------------------------------------------------
@@ -312,11 +311,9 @@ TypeCreate(char *typeName,
 	char		replaces[Natts_pg_type];
 	Datum		values[Natts_pg_type];
 
-	Buffer		buffer;
 	char	   *procname;
 	char	   *procs[4];
 	bool		defined;
-	ItemPointerData itemPointerData;
 	NameData	name;
 	TupleDesc	tupDesc;
 	Oid			argList[8];
@@ -353,9 +350,7 @@ TypeCreate(char *typeName,
 	 * ----------------
 	 */
 	if (externalSize == 0)
-	{
 		externalSize = -1;		/* variable length */
-	}
 
 	/* ----------------
 	 *	initialize arrays needed by FormHeapTuple
@@ -470,7 +465,7 @@ TypeCreate(char *typeName,
 	typeKey[0].sk_argument = PointerGetDatum(typeName);
 	pg_type_scan = heap_beginscan(pg_type_desc,
 								  0,
-								  SnapshotSelf,
+								  SnapshotSelf, /* cache? */
 								  1,
 								  typeKey);
 
@@ -480,21 +475,17 @@ TypeCreate(char *typeName,
 	 *	already there.
 	 * ----------------
 	 */
-	tup = heap_getnext(pg_type_scan, 0, &buffer);
+	tup = heap_getnext(pg_type_scan, 0);
 	if (HeapTupleIsValid(tup))
 	{
 		tup = heap_modifytuple(tup,
-							   buffer,
 							   pg_type_desc,
 							   values,
 							   nulls,
 							   replaces);
 
-		/* XXX may not be necessary */
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-
 		setheapoverride(true);
-		heap_replace(pg_type_desc, &itemPointerData, tup);
+		heap_replace(pg_type_desc, &tup->t_ctid, tup);
 		setheapoverride(false);
 
 		typeObjectId = tup->t_oid;
@@ -529,9 +520,7 @@ TypeCreate(char *typeName,
 	RelationUnsetLockForWrite(pg_type_desc);
 	heap_close(pg_type_desc);
 
-
-	return
-		typeObjectId;
+	return typeObjectId;
 }
 
 /* ----------------------------------------------------------------
@@ -545,48 +534,42 @@ TypeRename(char *oldTypeName, char *newTypeName)
 {
 	Relation	pg_type_desc;
 	Relation	idescs[Num_pg_type_indices];
-	Oid			type_oid;
-	HeapTuple	tup;
-	bool		defined;
-	ItemPointerData itemPointerData;
-
-	/* check that that the new type is not already defined */
-	type_oid = TypeGet(newTypeName, &defined);
-	if (OidIsValid(type_oid) && defined)
-		elog(ERROR, "TypeRename: type %s already defined", newTypeName);
-
-	/* get the type tuple from the catalog index scan manager */
+	HeapTuple	oldtup, newtup;
+	
 	pg_type_desc = heap_openr(TypeRelationName);
-	tup = TypeNameIndexScan(pg_type_desc, oldTypeName);
-
-	/* ----------------
-	 *	change the name of the type
-	 * ----------------
-	 */
-	if (HeapTupleIsValid(tup))
-	{
-
-		namestrcpy(&(((TypeTupleForm) GETSTRUCT(tup))->typname), newTypeName);
-
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
 
-		setheapoverride(true);
-		heap_replace(pg_type_desc, &itemPointerData, tup);
-		setheapoverride(false);
+	oldtup = SearchSysCacheTupleCopy(TYPNAME,
+									 PointerGetDatum(oldTypeName),
+									 0, 0, 0);
 
-		/* update the system catalog indices */
-		CatalogOpenIndices(Num_pg_type_indices, Name_pg_type_indices, idescs);
-		CatalogIndexInsert(idescs, Num_pg_type_indices, pg_type_desc, tup);
-		CatalogCloseIndices(Num_pg_type_indices, idescs);
+	if (!HeapTupleIsValid(oldtup))
+	{
+		heap_close(pg_type_desc);
+		elog(ERROR, "TypeRename: type %s not defined", oldTypeName);
+	}
+	
+	newtup = SearchSysCacheTuple(TYPNAME,
+								 PointerGetDatum(newTypeName),
+								 0, 0, 0);
+	if (HeapTupleIsValid(newtup))
+	{
+		pfree(oldtup);
+		heap_close(pg_type_desc);
+		elog(ERROR, "TypeRename: type %s already defined", newTypeName);
+	}
+	
+	namestrcpy(&(((TypeTupleForm) GETSTRUCT(oldtup))->typname), newTypeName);
 
-		/* all done */
-		pfree(tup);
+	setheapoverride(true);
+	heap_replace(pg_type_desc, &oldtup->t_ctid, oldtup);
+	setheapoverride(false);
 
-	}
-	else
-		elog(ERROR, "TypeRename: type %s not defined", oldTypeName);
+	/* update the system catalog indices */
+	CatalogOpenIndices(Num_pg_type_indices, Name_pg_type_indices, idescs);
+	CatalogIndexInsert(idescs, Num_pg_type_indices, pg_type_desc, oldtup);
+	CatalogCloseIndices(Num_pg_type_indices, idescs);
 
-	/* finish up */
+	pfree(oldtup);
 	heap_close(pg_type_desc);
 }
 
diff --git a/src/backend/commands/_deadcode/version.c b/src/backend/commands/_deadcode/version.c
index 8f07001440a511c0d3353815e55d04d0f948e7c4..063b8f2f63172ff254bb9f230f5979f97e93cb33 100644
--- a/src/backend/commands/_deadcode/version.c
+++ b/src/backend/commands/_deadcode/version.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.13 1998/06/15 19:28:17 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.14 1998/08/19 02:01:58 momjian Exp $
  *
  * NOTES
  *	  At the point the version is defined, 2 physical relations are created
@@ -185,26 +185,26 @@ VersionCreate(char *vname, char *bname)
 static void
 setAttrList(char *bname)
 {
-	Relation	rdesc;
+	Relation	rel;
 	int			i = 0;
 	int			maxattrs = 0;
 	char	   *attrname;
 	char		temp_buf[512];
 	int			notfirst = 0;
 
-	rdesc = heap_openr(bname);
-	if (rdesc == NULL)
+	rel = heap_openr(bname);
+	if (rel == NULL)
 	{
 		elog(ERROR, "Unable to expand all -- amopenr failed ");
 		return;
 	}
-	maxattrs = RelationGetNumberOfAttributes(rdesc);
+	maxattrs = RelationGetNumberOfAttributes(rel);
 
 	attr_list[0] = '\0';
 
 	for (i = maxattrs - 1; i > -1; --i)
 	{
-		attrname = (rdesc->rd_att->attrs[i]->attname).data;
+		attrname = (rel->rd_att->attrs[i]->attname).data;
 
 		if (notfirst == 1)
 			sprintf(temp_buf, ", %s = new.%s", attrname, attrname);
@@ -216,7 +216,7 @@ setAttrList(char *bname)
 		strcat(attr_list, temp_buf);
 	}
 
-	heap_close(rdesc);
+	heap_close(rel);
 
 	return;
 }
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index 04d8103ee32f46f4641a93f4b756e24143f6a24b..75d0e9d4a0940314b498cc62e6ddaab9acbbc42d 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.36 1998/07/27 19:37:50 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.37 1998/08/19 02:01:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -172,7 +172,6 @@ Async_Notify(char *relname)
 	HeapScanDesc sRel;
 	TupleDesc	tdesc;
 	ScanKeyData key;
-	Buffer		b;
 	Datum		d,
 				value[3];
 	bool		isnull;
@@ -211,16 +210,14 @@ Async_Notify(char *relname)
 	value[0] = value[1] = value[2] = (Datum) 0;
 	value[Anum_pg_listener_notify - 1] = Int32GetDatum(1);
 
-	while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0, &b)))
+	while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0)))
 	{
-		d = heap_getattr(lTuple, Anum_pg_listener_notify,
-						 tdesc, &isnull);
+		d = heap_getattr(lTuple, Anum_pg_listener_notify, tdesc, &isnull);
 		if (!DatumGetInt32(d))
 		{
-			rTuple = heap_modifytuple(lTuple, b, lRel, value, nulls, repl);
+			rTuple = heap_modifytuple(lTuple, lRel, value, nulls, repl);
 			heap_replace(lRel, &lTuple->t_ctid, rTuple);
 		}
-		ReleaseBuffer(b);
 	}
 	heap_endscan(sRel);
 	RelationUnsetLockForWrite(lRel);
@@ -260,7 +257,6 @@ Async_NotifyAtCommit()
 	ScanKeyData key;
 	Datum		d;
 	bool		isnull;
-	Buffer		b;
 	extern TransactionState CurrentTransactionState;
 
 	if (!pendingNotifies)
@@ -286,7 +282,7 @@ Async_NotifyAtCommit()
 			sRel = heap_beginscan(lRel, 0, SnapshotNow, 1, &key);
 			tdesc = RelationGetTupleDescriptor(lRel);
 
-			while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0, &b)))
+			while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0)))
 			{
 				d = heap_getattr(lTuple, Anum_pg_listener_relname,
 								 tdesc, &isnull);
@@ -317,7 +313,6 @@ Async_NotifyAtCommit()
 #endif
 					}
 				}
-				ReleaseBuffer(b);
 			}
 			heap_endscan(sRel);
 			RelationUnsetLockForWrite(lRel);
@@ -400,11 +395,10 @@ Async_Listen(char *relname, int pid)
 	Datum		values[Natts_pg_listener];
 	char		nulls[Natts_pg_listener];
 	TupleDesc	tdesc;
-	HeapScanDesc s;
-	HeapTuple	htup,
-				tup;
+	HeapScanDesc scan;
+	HeapTuple	tuple,
+				newtup;
 	Relation	lDesc;
-	Buffer		b;
 	Datum		d;
 	int			i;
 	bool		isnull;
@@ -431,22 +425,21 @@ Async_Listen(char *relname, int pid)
 
 	/* is someone already listening.  One listener per relation */
 	tdesc = RelationGetTupleDescriptor(lDesc);
-	s = heap_beginscan(lDesc, 0, SnapshotNow, 0, (ScanKey) NULL);
-	while (HeapTupleIsValid(htup = heap_getnext(s, 0, &b)))
+	scan = heap_beginscan(lDesc, 0, SnapshotNow, 0, (ScanKey) NULL);
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 	{
-		d = heap_getattr(htup, Anum_pg_listener_relname, tdesc,
+		d = heap_getattr(tuple, Anum_pg_listener_relname, tdesc,
 						 &isnull);
 		relnamei = DatumGetPointer(d);
 		if (!strncmp(relnamei, relname, NAMEDATALEN))
 		{
-			d = heap_getattr(htup, Anum_pg_listener_pid, tdesc, &isnull);
+			d = heap_getattr(tuple, Anum_pg_listener_pid, tdesc, &isnull);
 			pid = DatumGetInt32(d);
 			if (pid == MyProcPid)
 				alreadyListener = 1;
 		}
-		ReleaseBuffer(b);
 	}
-	heap_endscan(s);
+	heap_endscan(scan);
 
 	if (alreadyListener)
 	{
@@ -456,12 +449,12 @@ Async_Listen(char *relname, int pid)
 	}
 
 	tupDesc = lDesc->rd_att;
-	tup = heap_formtuple(tupDesc,
+	newtup = heap_formtuple(tupDesc,
 						 values,
 						 nulls);
-	heap_insert(lDesc, tup);
+	heap_insert(lDesc, newtup);
 
-	pfree(tup);
+	pfree(newtup);
 
 	/*
 	 * if (alreadyListener) { elog(NOTICE,"Async_Listen: already one
@@ -504,7 +497,8 @@ Async_Unlisten(char *relname, int pid)
 	Relation	lDesc;
 	HeapTuple	lTuple;
 
-	lTuple = SearchSysCacheTuple(LISTENREL, PointerGetDatum(relname),
+	lTuple = SearchSysCacheTuple(LISTENREL,
+								 PointerGetDatum(relname),
 								 Int32GetDatum(pid),
 								 0, 0);
 	lDesc = heap_openr(ListenerRelationName);
@@ -556,7 +550,6 @@ Async_NotifyFrontEnd()
 				value[3];
 	char		repl[3],
 				nulls[3];
-	Buffer		b;
 	bool		isnull;
 
 	notifyFrontEndPending = 0;
@@ -585,11 +578,10 @@ Async_NotifyFrontEnd()
 	value[0] = value[1] = value[2] = (Datum) 0;
 	value[Anum_pg_listener_notify - 1] = Int32GetDatum(0);
 
-	while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0, &b)))
+	while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0)))
 	{
-		d = heap_getattr(lTuple, Anum_pg_listener_relname,
-						 tdesc, &isnull);
-		rTuple = heap_modifytuple(lTuple, b, lRel, value, nulls, repl);
+		d = heap_getattr(lTuple, Anum_pg_listener_relname, tdesc, &isnull);
+		rTuple = heap_modifytuple(lTuple, lRel, value, nulls, repl);
 		heap_replace(lRel, &lTuple->t_ctid, rTuple);
 
 		/* notifying the front end */
@@ -603,8 +595,9 @@ Async_NotifyFrontEnd()
 		}
 		else
 			elog(NOTICE, "Async_NotifyFrontEnd: no asynchronous notification to frontend on interactive sessions");
-		ReleaseBuffer(b);
 	}
+	heap_endscan(sRel);
+	heap_close(lRel);
 	CommitTransactionCommand();
 }
 
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index b31ee63e201ab131861798caf222b1ed841edf0a..6f291cf7a3867d1360dcd89f7401944d9b5483e1 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.27 1998/08/06 05:12:22 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.28 1998/08/19 02:01:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -128,7 +128,7 @@ cluster(char oldrelname[], char oldindexname[])
 		elog(ERROR, "cluster: unknown relation: \"%s\"",
 			 oldrelname);
 	}
-	OIDOldHeap = OldHeap->rd_id;/* Get OID for the index scan	*/
+	OIDOldHeap = RelationGetRelid(OldHeap);/* Get OID for the index scan	*/
 
 	OldIndex = index_openr(oldindexname);		/* Open old index relation	*/
 	if (!RelationIsValid(OldIndex))
@@ -136,7 +136,7 @@ cluster(char oldrelname[], char oldindexname[])
 		elog(ERROR, "cluster: unknown index: \"%s\"",
 			 oldindexname);
 	}
-	OIDOldIndex = OldIndex->rd_id;		/* OID for the index scan		  */
+	OIDOldIndex = RelationGetRelid(OldIndex);		/* OID for the index scan		  */
 
 	heap_close(OldHeap);
 	index_close(OldIndex);
@@ -150,7 +150,7 @@ cluster(char oldrelname[], char oldindexname[])
 	 * with a pg_vlock.
 	 */
 	NewHeap = copy_heap(OIDOldHeap);
-	OIDNewHeap = NewHeap->rd_id;
+	OIDNewHeap = RelationGetRelid(NewHeap);
 	strcpy(NewHeapName, NewHeap->rd_rel->relname.data);
 
 
@@ -257,7 +257,7 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
 	 */
 	Old_pg_index_Tuple =
 		SearchSysCacheTuple(INDEXRELID,
-							ObjectIdGetDatum(OldIndex->rd_id),
+							ObjectIdGetDatum(RelationGetRelid(OldIndex)),
 							0, 0, 0);
 
 	Assert(Old_pg_index_Tuple);
@@ -265,7 +265,7 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
 
 	Old_pg_index_relation_Tuple =
 		SearchSysCacheTuple(RELOID,
-							ObjectIdGetDatum(OldIndex->rd_id),
+							ObjectIdGetDatum(RelationGetRelid(OldIndex)),
 							0, 0, 0);
 
 	Assert(Old_pg_index_relation_Tuple);
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index c279d2fb62356711a0c5cc0d9e036b2fdfea8941..de6cbceb8cc96b2423dbbf4a28c243fc77828dfd 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.29 1998/07/27 19:37:51 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.30 1998/08/19 02:01:42 momjian Exp $
  *
  * NOTES
  *	  The PortalExecutorHeapMemory crap needs to be eliminated
@@ -272,7 +272,6 @@ PerformAddAttribute(char *relationName,
 {
 	Relation	relrdesc,
 				attrdesc;
-	HeapScanDesc attsdesc;
 	HeapTuple	reltup;
 	HeapTuple	attributeTuple;
 	AttributeTupleForm attribute;
@@ -281,8 +280,6 @@ PerformAddAttribute(char *relationName,
 	int			minattnum,
 				maxatts;
 	HeapTuple	tup;
-	ScanKeyData key[2];
-	ItemPointerData oldTID;
 	Relation	idescs[Num_pg_attr_indices];
 	Relation	ridescs[Num_pg_class_indices];
 	bool		hasindex;
@@ -334,7 +331,7 @@ PerformAddAttribute(char *relationName,
 				elog(ERROR, "PerformAddAttribute: unknown relation: \"%s\"",
 					 relationName);
 			}
-			myrelid = relrdesc->rd_id;
+			myrelid = RelationGetRelid(relrdesc);
 			heap_close(relrdesc);
 
 			/* this routine is actually in the planner */
@@ -364,9 +361,12 @@ PerformAddAttribute(char *relationName,
 	}
 
 	relrdesc = heap_openr(RelationRelationName);
-	reltup = ClassNameIndexScan(relrdesc, relationName);
 
-	if (!PointerIsValid(reltup))
+	reltup = SearchSysCacheTupleCopy(RELNAME,
+									 PointerGetDatum(relationName),
+									 0, 0, 0);
+
+	if (!HeapTupleIsValid(reltup))
 	{
 		heap_close(relrdesc);
 		elog(ERROR, "PerformAddAttribute: relation \"%s\" not found",
@@ -387,11 +387,10 @@ PerformAddAttribute(char *relationName,
 	maxatts = minattnum + 1;
 	if (maxatts > MaxHeapAttributeNumber)
 	{
-		pfree(reltup);			/* XXX temp */
-		heap_close(relrdesc);	/* XXX temp */
+		pfree(reltup);
+		heap_close(relrdesc);
 		elog(ERROR, "PerformAddAttribute: relations limited to %d attributes",
 			 MaxHeapAttributeNumber);
-		return;
 	}
 
 	attrdesc = heap_openr(AttributeRelationName);
@@ -406,18 +405,6 @@ PerformAddAttribute(char *relationName,
 	if (hasindex)
 		CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, idescs);
 
-	ScanKeyEntryInitialize(&key[0],
-						   (bits16) NULL,
-						   (AttrNumber) Anum_pg_attribute_attrelid,
-						   (RegProcedure) F_OIDEQ,
-						   (Datum) reltup->t_oid);
-
-	ScanKeyEntryInitialize(&key[1],
-						   (bits16) NULL,
-						   (AttrNumber) Anum_pg_attribute_attname,
-						   (RegProcedure) F_NAMEEQ,
-						   (Datum) NULL);
-
 	attributeD.attrelid = reltup->t_oid;
 
 	attributeTuple = heap_addheader(Natts_pg_attribute,
@@ -431,53 +418,44 @@ PerformAddAttribute(char *relationName,
 	{
 		HeapTuple	typeTuple;
 		TypeTupleForm form;
-		char	   *p;
+		char	   *typename;
 		int			attnelems;
 
-		/*
-		 * XXX use syscache here as an optimization
-		 */
-		key[1].sk_argument = (Datum) colDef->colname;
-		attsdesc = heap_beginscan(attrdesc, 0, SnapshotNow, 2, key);
-
+		tup = SearchSysCacheTuple(ATTNAME,
+									ObjectIdGetDatum(reltup->t_oid),
+									PointerGetDatum(colDef->colname),
+									0, 0);
 
-		tup = heap_getnext(attsdesc, 0, (Buffer *) NULL);
 		if (HeapTupleIsValid(tup))
 		{
-			pfree(reltup);		/* XXX temp */
-			heap_endscan(attsdesc);		/* XXX temp */
-			heap_close(attrdesc);		/* XXX temp */
-			heap_close(relrdesc);		/* XXX temp */
+			heap_close(attrdesc);
+			heap_close(relrdesc);
 			elog(ERROR, "PerformAddAttribute: attribute \"%s\" already exists in class \"%s\"",
-				 key[1].sk_argument,
-				 relationName);
-			return;
+				colDef->colname, relationName);
 		}
-		heap_endscan(attsdesc);
 
 		/*
 		 * check to see if it is an array attribute.
 		 */
 
-		p = colDef->typename->name;
+		typename = colDef->typename->name;
 
 		if (colDef->typename->arrayBounds)
 		{
 			attnelems = length(colDef->typename->arrayBounds);
-			p = makeArrayTypeName(colDef->typename->name);
+			typename = makeArrayTypeName(colDef->typename->name);
 		}
 		else
 			attnelems = 0;
 
 		typeTuple = SearchSysCacheTuple(TYPNAME,
-										PointerGetDatum(p),
+										PointerGetDatum(typename),
 										0, 0, 0);
 		form = (TypeTupleForm) GETSTRUCT(typeTuple);
 
 		if (!HeapTupleIsValid(typeTuple))
-			elog(ERROR, "Add: type \"%s\" nonexistent", p);
-		namestrcpy(&(attribute->attname), (char *) key[1].sk_argument);
-
+			elog(ERROR, "Add: type \"%s\" nonexistent", typename);
+		namestrcpy(&(attribute->attname), colDef->colname);
 		attribute->atttypid = typeTuple->t_oid;
 		attribute->attlen = form->typlen;
 		attributeD.attdisbursion = 0;
@@ -504,8 +482,7 @@ PerformAddAttribute(char *relationName,
 	heap_close(attrdesc);
 
 	((Form_pg_class) GETSTRUCT(reltup))->relnatts = maxatts;
-	oldTID = reltup->t_ctid;
-	heap_replace(relrdesc, &oldTID, reltup);
+	heap_replace(relrdesc, &reltup->t_ctid, reltup);
 
 	/* keep catalog indices current */
 	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, ridescs);
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 4265cdf5c02b4c66c7f28133859aae5c2dc36dc1..34372db2a7d8114dcefe039e569812357366b970 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.52 1998/07/27 19:37:51 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.53 1998/08/19 02:01:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -257,9 +257,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
 		fwrite(&ntuples, sizeof(int32), 1, fp);
 	}
 
-	for (tuple = heap_getnext(scandesc, 0, NULL);
-		 tuple != NULL;
-		 tuple = heap_getnext(scandesc, 0, NULL))
+	while (HeapTupleIsValid(tuple = heap_getnext(scandesc, 0)))
 	{
 
 		if (oids && !binary)
@@ -417,7 +415,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
 
 	if (rel->rd_rel->relhasindex)
 	{
-		GetIndexRelations(rel->rd_id, &n_indices, &index_rels);
+		GetIndexRelations(RelationGetRelid(rel), &n_indices, &index_rels);
 		if (n_indices > 0)
 		{
 			has_index = true;
@@ -435,7 +433,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
 				itupdescArr[i] = RelationGetTupleDescriptor(index_rels[i]);
 				pgIndexTup =
 					SearchSysCacheTuple(INDEXRELID,
-								  ObjectIdGetDatum(index_rels[i]->rd_id),
+								  ObjectIdGetDatum(RelationGetRelid(index_rels[i])),
 										0, 0, 0);
 				Assert(pgIndexTup);
 				pgIndexP[i] = (IndexTupleForm) GETSTRUCT(pgIndexTup);
@@ -758,7 +756,6 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
 								(AttrNumber *) &(pgIndexP[i]->indkey[0]),
 								   tuple,
 								   tupDesc,
-								   InvalidBuffer,
 								   idatum,
 								   index_nulls,
 								   finfoP[i]);
@@ -833,7 +830,6 @@ GetTypeElement(Oid type)
 									ObjectIdGetDatum(type),
 									0, 0, 0);
 
-
 	if (HeapTupleIsValid(typeTuple))
 		return ((int) ((TypeTupleForm) GETSTRUCT(typeTuple))->typelem);
 
@@ -913,9 +909,7 @@ GetIndexRelations(Oid main_relation_oid,
 	scan = head;
 	head->next = NULL;
 
-	for (tuple = heap_getnext(scandesc, 0, NULL);
-		 tuple != NULL;
-		 tuple = heap_getnext(scandesc, 0, NULL))
+	while (HeapTupleIsValid(tuple = heap_getnext(scandesc, 0)))
 	{
 
 		index_relation_oid =
@@ -1168,10 +1162,9 @@ CountTuples(Relation relation)
 
 	scandesc = heap_beginscan(relation, 0, SnapshotNow, 0, NULL);
 
-	for (tuple = heap_getnext(scandesc, 0, NULL), i = 0;
-		 tuple != NULL;
-		 tuple = heap_getnext(scandesc, 0, NULL), i++)
-		;
+	i = 0;
+	while (HeapTupleIsValid(tuple = heap_getnext(scandesc, 0)))
+		i++;
 	heap_endscan(scandesc);
 	return (i);
 }
diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c
index 1221fd8e50f97b180769d3f02d6de829ef24d59e..9ca0f0e722719f5760cd13e30cc9bb3c7aabf16e 100644
--- a/src/backend/commands/creatinh.c
+++ b/src/backend/commands/creatinh.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.31 1998/08/06 05:12:24 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.32 1998/08/19 02:01:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -404,7 +404,7 @@ StoreCatalogInheritance(Oid relationId, List *supers)
 		char		nullarr[Natts_pg_inherits];
 
 		tuple = SearchSysCacheTuple(RELNAME,
-								  PointerGetDatum(strVal(lfirst(entry))),
+									PointerGetDatum(strVal(lfirst(entry))),
 									0, 0, 0);
 		AssertArg(HeapTupleIsValid(tuple));
 
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index d202388c6859c06ccc906b6e682ccf0a2e23428c..a0438129dff95b7f8431816ed80c3bc13e721350 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.19 1998/08/11 18:28:13 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.20 1998/08/19 02:01:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -148,7 +148,6 @@ get_pg_dbtup(char *command, char *dbname, Relation dbrel)
 {
 	HeapTuple	dbtup;
 	HeapTuple	tup;
-	Buffer		buf;
 	HeapScanDesc scan;
 	ScanKeyData scanKey;
 
@@ -163,13 +162,10 @@ get_pg_dbtup(char *command, char *dbname, Relation dbrel)
 	 * since we want to return the tuple out of this proc, and we're going
 	 * to close the relation, copy the tuple and return the copy.
 	 */
-	tup = heap_getnext(scan, 0, &buf);
+	tup = heap_getnext(scan, 0);
 
 	if (HeapTupleIsValid(tup))
-	{
 		dbtup = heap_copytuple(tup);
-		ReleaseBuffer(buf);
-	}
 	else
 		dbtup = tup;
 
@@ -205,8 +201,9 @@ check_permissions(char *command,
 	char		path[MAXPGPATH + 1];
 
 	userName = GetPgUserName();
-	utup = SearchSysCacheTuple(USENAME, PointerGetDatum(userName),
-							   0, 0, 0);
+	utup = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(userName),
+							   	0, 0, 0);
 	*userIdP = ((Form_pg_shadow) GETSTRUCT(utup))->usesysid;
 	use_super = ((Form_pg_shadow) GETSTRUCT(utup))->usesuper;
 	use_createdb = ((Form_pg_shadow) GETSTRUCT(utup))->usecreatedb;
diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c
index 5afe352b0fbc36a1b8110c68a359eb6bb4b82521..7a0676a773881f845661f83df1627ed9a28f283f 100644
--- a/src/backend/commands/defind.c
+++ b/src/backend/commands/defind.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.21 1998/06/15 19:28:15 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.22 1998/08/19 02:01:48 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -118,7 +118,8 @@ DefineIndex(char *heapRelationName,
 	/*
 	 * compute access method id
 	 */
-	tuple = SearchSysCacheTuple(AMNAME, PointerGetDatum(accessMethodName),
+	tuple = SearchSysCacheTuple(AMNAME,
+								PointerGetDatum(accessMethodName),
 								0, 0, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
@@ -244,7 +245,8 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
 	/*
 	 * compute index relation id and access method id
 	 */
-	tuple = SearchSysCacheTuple(RELNAME, PointerGetDatum(indexRelationName),
+	tuple = SearchSysCacheTuple(RELNAME,
+								PointerGetDatum(indexRelationName),
 								0, 0, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 1abcdae87244b98fa8ec521ac8ef8bb223f4d0cf..f3c4d4b6e1b04f80ea7374ba98ec64c9c8a17721 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -53,7 +53,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
 	Oid			typev[8];
 	char		nulls[Natts_pg_language];
 	Datum		values[Natts_pg_language];
-	Relation	rdesc;
+	Relation	rel;
 	HeapTuple	tup;
 	TupleDesc	tupDesc;
 
@@ -90,7 +90,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
 	memset(typev, 0, sizeof(typev));
 	procTup = SearchSysCacheTuple(PRONAME,
 								  PointerGetDatum(stmt->plhandler),
-								  UInt16GetDatum(0),
+								  Int32GetDatum(0),
 								  PointerGetDatum(typev),
 								  0);
 	if (!HeapTupleIsValid(procTup))
@@ -121,14 +121,14 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
 	values[i++] = ObjectIdGetDatum(procTup->t_oid);
 	values[i++] = (Datum) fmgr(F_TEXTIN, stmt->plcompiler);
 
-	rdesc = heap_openr(LanguageRelationName);
+	rel = heap_openr(LanguageRelationName);
 
-	tupDesc = rdesc->rd_att;
+	tupDesc = rel->rd_att;
 	tup = heap_formtuple(tupDesc, values, nulls);
 
-	heap_insert(rdesc, tup);
+	heap_insert(rel, tup);
 
-	heap_close(rdesc);
+	heap_close(rel);
 	return;
 }
 
@@ -142,11 +142,7 @@ DropProceduralLanguage(DropPLangStmt *stmt)
 {
 	char		languageName[NAMEDATALEN];
 	HeapTuple	langTup;
-
-	Relation	rdesc;
-	HeapScanDesc scanDesc;
-	ScanKeyData scanKeyData;
-	HeapTuple	tup;
+	Relation	rel;
 
 	/* ----------------
 	 * Check permission
@@ -165,7 +161,7 @@ DropProceduralLanguage(DropPLangStmt *stmt)
 	 */
 	case_translate_language_name(stmt->plname, languageName);
 
-	langTup = SearchSysCacheTuple(LANNAME,
+	langTup = SearchSysCacheTupleCopy(LANNAME,
 								  PointerGetDatum(languageName),
 								  0, 0, 0);
 	if (!HeapTupleIsValid(langTup))
@@ -177,24 +173,9 @@ DropProceduralLanguage(DropPLangStmt *stmt)
 			 languageName);
 	}
 
-	/* ----------------
-	 * Now scan pg_language and delete the PL tuple
-	 * ----------------
-	 */
-	rdesc = heap_openr(LanguageRelationName);
-
-	ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_language_lanname,
-						   F_NAMEEQ, PointerGetDatum(languageName));
-
-	scanDesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, &scanKeyData);
-
-	tup = heap_getnext(scanDesc, 0, (Buffer *) NULL);
-
-	if (!HeapTupleIsValid(tup))
-		elog(ERROR, "Language with name '%s' not found", languageName);
-
-	heap_delete(rdesc, &(tup->t_ctid));
+	rel = heap_openr(LanguageRelationName);
+	heap_delete(rel, &langTup->t_ctid);
 
-	heap_endscan(scanDesc);
-	heap_close(rdesc);
+	pfree(langTup);
+	heap_close(rel);
 }
diff --git a/src/backend/commands/remove.c b/src/backend/commands/remove.c
index 8da3f9195870d7d180c6024b4eaff76cd9665f3e..014ddc6e19b3551c1abe04fd1bb944e7d57ff02d 100644
--- a/src/backend/commands/remove.c
+++ b/src/backend/commands/remove.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.26 1998/07/27 19:37:53 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.27 1998/08/19 02:01:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -51,16 +51,13 @@ RemoveOperator(char *operatorName,		/* operator name */
 			   char *typeName2) /* optional second type name */
 {
 	Relation	relation;
-	HeapScanDesc scan;
 	HeapTuple	tup;
 	Oid			typeId1 = InvalidOid;
 	Oid			typeId2 = InvalidOid;
 	bool		defined;
-	ItemPointerData itemPointerData;
-	Buffer		buffer;
-	ScanKeyData operatorKey[3];
 	char	   *userName;
-
+	char		oprtype;
+	
 	if (typeName1)
 	{
 		typeId1 = TypeGet(typeName1, &defined);
@@ -81,24 +78,20 @@ RemoveOperator(char *operatorName,		/* operator name */
 		}
 	}
 
-	ScanKeyEntryInitialize(&operatorKey[0], 0x0,
-						   Anum_pg_operator_oprname,
-						   F_NAMEEQ,
-						   PointerGetDatum(operatorName));
-
-	ScanKeyEntryInitialize(&operatorKey[1], 0x0,
-						   Anum_pg_operator_oprleft,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(typeId1));
-
-	ScanKeyEntryInitialize(&operatorKey[2], 0x0,
-						   Anum_pg_operator_oprright,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(typeId2));
-
+	if (OidIsValid(typeId1) && OidIsValid(typeId2))
+		oprtype = 'b';
+	else if (OidIsValid(typeId1))
+		oprtype = 'l';
+	else
+		oprtype = 'r';
+
+	tup = SearchSysCacheTupleCopy(OPRNAME,
+								PointerGetDatum(operatorName),
+								ObjectIdGetDatum(typeId1),
+								ObjectIdGetDatum(typeId2),
+								CharGetDatum(oprtype));
+						   
 	relation = heap_openr(OperatorRelationName);
-	scan = heap_beginscan(relation, 0, SnapshotNow, 3, operatorKey);
-	tup = heap_getnext(scan, 0, &buffer);
 	if (HeapTupleIsValid(tup))
 	{
 #ifndef NO_SECURITY
@@ -109,8 +102,7 @@ RemoveOperator(char *operatorName,		/* operator name */
 			elog(ERROR, "RemoveOperator: operator '%s': permission denied",
 				 operatorName);
 #endif
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-		heap_delete(relation, &itemPointerData);
+		heap_delete(relation, &tup->t_ctid);
 	}
 	else
 	{
@@ -134,7 +126,7 @@ RemoveOperator(char *operatorName,		/* operator name */
 				 typeName2);
 		}
 	}
-	heap_endscan(scan);
+	pfree(tup);
 	heap_close(relation);
 }
 
@@ -150,31 +142,25 @@ RemoveOperator(char *operatorName,		/* operator name */
 static void
 SingleOpOperatorRemove(Oid typeOid)
 {
-	Relation	rdesc;
+	Relation	rel;
 	ScanKeyData key[3];
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 	HeapTuple	tup;
-	ItemPointerData itemPointerData;
-	Buffer		buffer;
 	static		attnums[3] = {7, 8, 9}; /* left, right, return */
 	int			i;
 
 	ScanKeyEntryInitialize(&key[0],
 					   0, 0, F_OIDEQ, (Datum) typeOid);
-	rdesc = heap_openr(OperatorRelationName);
+	rel = heap_openr(OperatorRelationName);
 	for (i = 0; i < 3; ++i)
 	{
 		key[0].sk_attno = attnums[i];
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
-		while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer)))
-		{
-			ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-			/* XXX LOCK not being passed */
-			heap_delete(rdesc, &itemPointerData);
-		}
-		heap_endscan(sdesc);
+		scan = heap_beginscan(rel, 0, SnapshotNow, 1, key);
+		while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
+			heap_delete(rel, &tup->t_ctid);
+		heap_endscan(scan);
 	}
-	heap_close(rdesc);
+	heap_close(rel);
 }
 
 /*
@@ -193,12 +179,10 @@ AttributeAndRelationRemove(Oid typeOid)
 	};
 	struct oidlist *oidptr,
 			   *optr;
-	Relation	rdesc;
+	Relation	rel;
 	ScanKeyData key[1];
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 	HeapTuple	tup;
-	ItemPointerData itemPointerData;
-	Buffer		buffer;
 
 	/*
 	 * Get the oid's of the relations to be removed by scanning the entire
@@ -213,31 +197,30 @@ AttributeAndRelationRemove(Oid typeOid)
 	oidptr = (struct oidlist *) palloc(sizeof(*oidptr));
 	oidptr->next = NULL;
 	optr = oidptr;
-	rdesc = heap_openr(AttributeRelationName);
-	sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
-	while (PointerIsValid(tup = heap_getnext(sdesc, 0, &buffer)))
+	rel = heap_openr(AttributeRelationName);
+	scan = heap_beginscan(rel, 0, SnapshotNow, 1, key);
+	while (HeapTupleIsValid(tup = heap_getnext(scan, 0)))
 	{
-		ItemPointerCopy(&tup->t_ctid, &itemPointerData);
 		optr->reloid = ((AttributeTupleForm) GETSTRUCT(tup))->attrelid;
 		optr->next = (struct oidlist *) palloc(sizeof(*oidptr));
 		optr = optr->next;
 	}
 	optr->next = NULL;
-	heap_endscan(sdesc);
-	heap_close(rdesc);
+	heap_endscan(scan);
+	heap_close(rel);
 
 
 	ScanKeyEntryInitialize(&key[0], 0,
 						   ObjectIdAttributeNumber,
 						   F_OIDEQ, (Datum) 0);
 	optr = oidptr;
-	rdesc = heap_openr(RelationRelationName);
+	rel = heap_openr(RelationRelationName);
 	while (PointerIsValid((char *) optr->next))
 	{
 		key[0].sk_argument = (Datum) (optr++)->reloid;
-		sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 1, key);
-		tup = heap_getnext(sdesc, 0, &buffer);
-		if (PointerIsValid(tup))
+		scan = heap_beginscan(rel, 0, SnapshotNow, 1, key);
+		tup = heap_getnext(scan, 0);
+		if (HeapTupleIsValid(tup))
 		{
 			char	   *name;
 
@@ -245,11 +228,11 @@ AttributeAndRelationRemove(Oid typeOid)
 			heap_destroy_with_catalog(name);
 		}
 	}
-	heap_endscan(sdesc);
-	heap_close(rdesc);
+	heap_endscan(scan);
+	heap_close(rel);
 }
 
-#endif							/* NOTYET */
+#endif	/* NOTYET */
 
 /*
  *	TypeRemove
@@ -260,13 +243,8 @@ void
 RemoveType(char *typeName)		/* type name to be removed */
 {
 	Relation	relation;
-	HeapScanDesc scan;
 	HeapTuple	tup;
 	Oid			typeOid;
-	ItemPointerData itemPointerData;
-	static ScanKeyData typeKey[1] = {
-		{0, Anum_pg_type_typname, F_NAMEEQ}
-	};
 	char	   *shadow_type;
 	char	   *userName;
 
@@ -278,44 +256,33 @@ RemoveType(char *typeName)		/* type name to be removed */
 #endif
 
 	relation = heap_openr(TypeRelationName);
-	fmgr_info(typeKey[0].sk_procedure, &typeKey[0].sk_func);
-	typeKey[0].sk_nargs = typeKey[0].sk_func.fn_nargs;
-
-	/* Delete the primary type */
+	tup = SearchSysCacheTuple(TYPNAME,
+								PointerGetDatum(typeName),
+								0, 0, 0);
 
-	typeKey[0].sk_argument = PointerGetDatum(typeName);
-
-	scan = heap_beginscan(relation, 0, SnapshotNow, 1, typeKey);
-	tup = heap_getnext(scan, 0, (Buffer *) 0);
 	if (!HeapTupleIsValid(tup))
 	{
-		heap_endscan(scan);
 		heap_close(relation);
-		elog(ERROR, "RemoveType: type '%s' does not exist",
-			 typeName);
+		elog(ERROR, "RemoveType: type '%s' does not exist", typeName);
 	}
+	
+	relation = heap_openr(TypeRelationName);
 	typeOid = tup->t_oid;
-	ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-	heap_delete(relation, &itemPointerData);
-	heap_endscan(scan);
+	heap_delete(relation, &tup->t_ctid);
 
 	/* Now, Delete the "array of" that type */
 	shadow_type = makeArrayTypeName(typeName);
-	typeKey[0].sk_argument = NameGetDatum(shadow_type);
-
-	scan = heap_beginscan(relation, 0, SnapshotNow,
-						  1, (ScanKey) typeKey);
-	tup = heap_getnext(scan, 0, (Buffer *) 0);
-
+	tup = SearchSysCacheTuple(TYPNAME,
+								PointerGetDatum(shadow_type),
+								0, 0, 0);
 	if (!HeapTupleIsValid(tup))
 	{
-		elog(ERROR, "RemoveType: type '%s': array stub not found",
-			 typeName);
+		heap_close(relation);
+		elog(ERROR, "RemoveType: type '%s' does not exist", typeName);
 	}
+
 	typeOid = tup->t_oid;
-	ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-	heap_delete(relation, &itemPointerData);
-	heap_endscan(scan);
+	heap_delete(relation, &tup->t_ctid);
 
 	heap_close(relation);
 }
@@ -335,24 +302,16 @@ RemoveFunction(char *functionName,		/* function name to be removed */
 			   List *argNameList /* list of TypeNames */ )
 {
 	Relation	relation;
-	HeapScanDesc scan;
 	HeapTuple	tup;
-	Buffer		buffer = InvalidBuffer;
-	bool		bufferUsed = FALSE;
 	Oid			argList[8];
-	Form_pg_proc the_proc = NULL;
-	ItemPointerData itemPointerData;
-	static ScanKeyData key[3] = {
-		{0, Anum_pg_proc_proname, F_NAMEEQ}
-	};
 	char	   *userName;
 	char	   *typename;
 	int			i;
 
+	
 	MemSet(argList, 0, 8 * sizeof(Oid));
 	for (i = 0; i < nargs; i++)
 	{
-/*		typename = ((TypeName*)(lfirst(argNameList)))->name; */
 		typename = strVal(lfirst(argNameList));
 		argNameList = lnext(argNameList);
 
@@ -360,7 +319,8 @@ RemoveFunction(char *functionName,		/* function name to be removed */
 			argList[i] = 0;
 		else
 		{
-			tup = SearchSysCacheTuple(TYPNAME, PointerGetDatum(typename),
+			tup = SearchSysCacheTuple(TYPNAME,
+									  PointerGetDatum(typename),
 									  0, 0, 0);
 
 			if (!HeapTupleIsValid(tup))
@@ -369,12 +329,6 @@ RemoveFunction(char *functionName,		/* function name to be removed */
 		}
 	}
 
-	tup = SearchSysCacheTuple(PRONAME, PointerGetDatum(functionName),
-							  Int32GetDatum(nargs),
-							  PointerGetDatum(argList), 0);
-	if (!HeapTupleIsValid(tup))
-		func_error("RemoveFunction", functionName, nargs, argList, NULL);
-
 #ifndef NO_SECURITY
 	userName = GetPgUserName();
 	if (!pg_func_ownercheck(userName, functionName, nargs, argList))
@@ -384,48 +338,27 @@ RemoveFunction(char *functionName,		/* function name to be removed */
 	}
 #endif
 
-	key[0].sk_argument = PointerGetDatum(functionName);
-
-	fmgr_info(key[0].sk_procedure, &key[0].sk_func);
-	key[0].sk_nargs = key[0].sk_func.fn_nargs;
-
 	relation = heap_openr(ProcedureRelationName);
-	scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
+	tup = SearchSysCacheTuple(PRONAME,
+								PointerGetDatum(functionName),
+								Int32GetDatum(nargs),
+								PointerGetDatum(argList),
+								0);
 
-	do
-	{							/* hope this is ok because it's indexed */
-		if (bufferUsed)
-		{
-			ReleaseBuffer(buffer);
-			bufferUsed = FALSE;
-		}
-		tup = heap_getnext(scan, 0, (Buffer *) &buffer);
-		if (!HeapTupleIsValid(tup))
-			break;
-		bufferUsed = TRUE;
-		the_proc = (Form_pg_proc) GETSTRUCT(tup);
-	} while ((namestrcmp(&(the_proc->proname), functionName) == 0) &&
-			 (the_proc->pronargs != nargs ||
-			  !oid8eq(&(the_proc->proargtypes[0]), &argList[0])));
-
-
-	if (!HeapTupleIsValid(tup) || namestrcmp(&(the_proc->proname),
-											 functionName) != 0)
+	if (!HeapTupleIsValid(tup))
 	{
-		heap_endscan(scan);
 		heap_close(relation);
 		func_error("RemoveFunction", functionName, nargs, argList, NULL);
 	}
 
-	/* ok, function has been found */
+	if ((((Form_pg_proc) GETSTRUCT(tup))->prolang) == INTERNALlanguageId)
+	{
+		heap_close(relation);	
+		elog(ERROR, "RemoveFunction: function \"%s\" is built-in",functionName);
+	}
 
-	if (the_proc->prolang == INTERNALlanguageId)
-		elog(ERROR, "RemoveFunction: function \"%s\" is built-in",
-			 functionName);
+	heap_delete(relation, &tup->t_ctid);
 
-	ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-	heap_delete(relation, &itemPointerData);
-	heap_endscan(scan);
 	heap_close(relation);
 }
 
@@ -433,13 +366,10 @@ void
 RemoveAggregate(char *aggName, char *aggType)
 {
 	Relation	relation;
-	HeapScanDesc scan;
 	HeapTuple	tup;
-	ItemPointerData itemPointerData;
 	char	   *userName;
 	Oid			basetypeID = InvalidOid;
 	bool		defined;
-	ScanKeyData aggregateKey[3];
 
 
 	/*
@@ -461,9 +391,7 @@ RemoveAggregate(char *aggName, char *aggType)
 	else
 		basetypeID = 0;
 
-/*
 #ifndef NO_SECURITY
-*/
 	userName = GetPgUserName();
 	if (!pg_aggr_ownercheck(userName, aggName, basetypeID))
 	{
@@ -478,26 +406,16 @@ RemoveAggregate(char *aggName, char *aggType)
 				 aggName);
 		}
 	}
-/*
 #endif
-*/
-
-	ScanKeyEntryInitialize(&aggregateKey[0], 0x0,
-						   Anum_pg_aggregate_aggname,
-						   F_NAMEEQ,
-						   PointerGetDatum(aggName));
-
-	ScanKeyEntryInitialize(&aggregateKey[1], 0x0,
-						   Anum_pg_aggregate_aggbasetype,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(basetypeID));
 
 	relation = heap_openr(AggregateRelationName);
-	scan = heap_beginscan(relation, 0, SnapshotNow, 2, aggregateKey);
-	tup = heap_getnext(scan, 0, (Buffer *) 0);
+	tup = SearchSysCacheTuple(AGGNAME,
+							   PointerGetDatum(aggName),
+							   ObjectIdGetDatum(basetypeID),
+							   0, 0);
+
 	if (!HeapTupleIsValid(tup))
 	{
-		heap_endscan(scan);
 		heap_close(relation);
 		if (aggType)
 		{
@@ -510,8 +428,7 @@ RemoveAggregate(char *aggName, char *aggType)
 				 aggName);
 		}
 	}
-	ItemPointerCopy(&tup->t_ctid, &itemPointerData);
-	heap_delete(relation, &itemPointerData);
-	heap_endscan(scan);
+	heap_delete(relation, &tup->t_ctid);
+
 	heap_close(relation);
 }
diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c
index d893f9f119c8a4543d674579817a8179acfc1443..fdc7b43fdcc6f37c3b5e1b471d38f450b181cd91 100644
--- a/src/backend/commands/rename.c
+++ b/src/backend/commands/rename.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.13 1998/07/26 04:30:24 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.14 1998/08/19 02:01:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,6 +27,7 @@
 #include <utils/portal.h>
 #include <tcop/dest.h>
 #include <commands/command.h>
+#include <storage/bufmgr.h>
 #include <utils/excid.h>
 #include <utils/mcxt.h>
 #include <catalog/pg_proc.h>
@@ -52,7 +53,7 @@
  *		Attname attribute is changed in attribute catalog.
  *		No record of the previous attname is kept (correct?).
  *
- *		get proper reldesc from relation catalog (if not arg)
+ *		get proper relrelation from relation catalog (if not arg)
  *		scan attribute catalog
  *				for name conflict (within rel)
  *				for original attribute (if not arg)
@@ -70,14 +71,13 @@ renameatt(char *relname,
 		  char *userName,
 		  int recurse)
 {
-	Relation	relrdesc,
-				attrdesc;
+	Relation	attrelation;
 	HeapTuple	reltup,
 				oldatttup,
 				newatttup;
-	ItemPointerData oldTID;
-	Relation	idescs[Num_pg_attr_indices];
-
+	Relation	irelations[Num_pg_attr_indices];
+	Oid			relid;
+	
 	/*
 	 * permissions checking.  this would normally be done in utility.c,
 	 * but this particular routine is recursive.
@@ -110,19 +110,20 @@ renameatt(char *relname,
 		List	   *child,
 				   *children;
 
-		relrdesc = heap_openr(relname);
-		if (!RelationIsValid(relrdesc))
+		reltup = SearchSysCacheTuple(RELNAME,
+									 PointerGetDatum(relname),
+									 0, 0, 0);
+
+		if (!HeapTupleIsValid(reltup))
 		{
-			elog(ERROR, "renameatt: unknown relation: \"%s\"",
-				 relname);
+			elog(ERROR, "renameatt: unknown relation: \"%s\"", relname);
 		}
-		myrelid = relrdesc->rd_id;
-		heap_close(relrdesc);
 
+		myrelid = reltup->t_oid;
+		
 		/* this routine is actually in the planner */
 		children = find_all_inheritors(lconsi(myrelid, NIL), NIL);
 
-
 		/*
 		 * find_all_inheritors does the recursive search of the
 		 * inheritance hierarchy, so all we have to do is process all of
@@ -130,72 +131,70 @@ renameatt(char *relname,
 		 */
 		foreach(child, children)
 		{
-			char	   *childname;
+			char	childname[NAMEDATALEN];
 
 			childrelid = lfirsti(child);
 			if (childrelid == myrelid)
 				continue;
-			relrdesc = heap_open(childrelid);
-			if (!RelationIsValid(relrdesc))
+			reltup = SearchSysCacheTuple(RELOID,
+										 ObjectIdGetDatum(childrelid),
+										 0, 0, 0);
+			if (!HeapTupleIsValid(reltup))
 			{
 				elog(ERROR, "renameatt: can't find catalog entry for inheriting class with oid %d",
 					 childrelid);
 			}
-			childname = (relrdesc->rd_rel->relname).data;
-			heap_close(relrdesc);
-			renameatt(childname, oldattname, newattname,
-					  userName, 0);		/* no more recursion! */
+			/* make copy of cache value, could disappear in call */
+			StrNCpy(childname,
+				((Form_pg_class) GETSTRUCT(reltup))->relname.data,
+				NAMEDATALEN);
+			/* no more recursion! */
+			renameatt(childname, oldattname, newattname,  userName, 0);
 		}
 	}
 
-	relrdesc = heap_openr(RelationRelationName);
-	reltup = ClassNameIndexScan(relrdesc, relname);
-	if (!PointerIsValid(reltup))
-	{
-		heap_close(relrdesc);
-		elog(ERROR, "renameatt: relation \"%s\" nonexistent",
-			 relname);
-		return;
-	}
-	heap_close(relrdesc);
+	reltup = SearchSysCacheTuple(RELNAME,
+								 PointerGetDatum(relname),
+								 0, 0, 0);
+	if (!HeapTupleIsValid(reltup))
+		elog(ERROR, "renameatt: relation \"%s\" nonexistent", relname);
+
+	relid = reltup->t_oid;
+
+	oldatttup = SearchSysCacheTupleCopy(ATTNAME,
+										 ObjectIdGetDatum(relid),
+										 PointerGetDatum(oldattname),
+										 0, 0);
+	if (!HeapTupleIsValid(oldatttup))
+		elog(ERROR, "renameatt: attribute \"%s\" nonexistent", oldattname);
 
-	attrdesc = heap_openr(AttributeRelationName);
-	oldatttup = AttributeNameIndexScan(attrdesc, reltup->t_oid, oldattname);
-	if (!PointerIsValid(oldatttup))
-	{
-		heap_close(attrdesc);
-		elog(ERROR, "renameatt: attribute \"%s\" nonexistent",
-			 oldattname);
-	}
 	if (((AttributeTupleForm) GETSTRUCT(oldatttup))->attnum < 0)
-	{
-		elog(ERROR, "renameatt: system attribute \"%s\" not renamed",
-			 oldattname);
-	}
+		elog(ERROR, "renameatt: system attribute \"%s\" not renamed", oldattname);
 
-	newatttup = AttributeNameIndexScan(attrdesc, reltup->t_oid, newattname);
-	if (PointerIsValid(newatttup))
+	newatttup = SearchSysCacheTuple(ATTNAME,
+									 ObjectIdGetDatum(relid),
+									 PointerGetDatum(newattname),
+									 0, 0);
+	/* should not already exist */
+	if (HeapTupleIsValid(newatttup))
 	{
 		pfree(oldatttup);
-		heap_close(attrdesc);
-		elog(ERROR, "renameatt: attribute \"%s\" exists",
-			 newattname);
+		elog(ERROR, "renameatt: attribute \"%s\" exists", newattname);
 	}
 
-	namestrcpy(&(((AttributeTupleForm) (GETSTRUCT(oldatttup)))->attname),
-			   newattname);
-	oldTID = oldatttup->t_ctid;
+	StrNCpy((((AttributeTupleForm) (GETSTRUCT(oldatttup)))->attname.data),
+			   newattname, NAMEDATALEN);
 
-	/* insert "fixed" tuple */
-	heap_replace(attrdesc, &oldTID, oldatttup);
+	attrelation = heap_openr(AttributeRelationName);
+	heap_replace(attrelation, &oldatttup->t_ctid, oldatttup);
 
 	/* keep system catalog indices current */
-	CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, idescs);
-	CatalogIndexInsert(idescs, Num_pg_attr_indices, attrdesc, oldatttup);
-	CatalogCloseIndices(Num_pg_attr_indices, idescs);
+	CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, irelations);
+	CatalogIndexInsert(irelations, Num_pg_attr_indices, attrelation, oldatttup);
+	CatalogCloseIndices(Num_pg_attr_indices, irelations);
 
-	heap_close(attrdesc);
 	pfree(oldatttup);
+	heap_close(attrelation);
 }
 
 /*
@@ -215,67 +214,52 @@ renameatt(char *relname,
  *				properly replace the new relation tuple.
  */
 void
-renamerel(char oldrelname[], char newrelname[])
+renamerel(char *oldrelname, char *newrelname)
 {
-	Relation	relrdesc;		/* for RELATION relation */
+	Relation	relrelation;		/* for RELATION relation */
 	HeapTuple	oldreltup,
 				newreltup;
-	ItemPointerData oldTID;
 	char		oldpath[MAXPGPATH],
 				newpath[MAXPGPATH];
-	Relation	idescs[Num_pg_class_indices];
-
+	Relation	irelations[Num_pg_class_indices];
+	
 	if (IsSystemRelationName(oldrelname))
-	{
 		elog(ERROR, "renamerel: system relation \"%s\" not renamed",
 			 oldrelname);
-		return;
-	}
+
 	if (IsSystemRelationName(newrelname))
-	{
 		elog(ERROR, "renamerel: Illegal class name: \"%s\" -- pg_ is reserved for system catalogs",
 			 newrelname);
-		return;
-	}
-
-	relrdesc = heap_openr(RelationRelationName);
-	oldreltup = ClassNameIndexScan(relrdesc, oldrelname);
 
-	if (!PointerIsValid(oldreltup))
-	{
-		heap_close(relrdesc);
-		elog(ERROR, "renamerel: relation \"%s\" does not exist",
-			 oldrelname);
-	}
+	oldreltup = SearchSysCacheTupleCopy(RELNAME,
+										 PointerGetDatum(oldrelname),
+										 0, 0, 0);
+	if (!HeapTupleIsValid(oldreltup))
+		elog(ERROR, "renamerel: relation \"%s\" does not exist", oldrelname);
 
-	newreltup = ClassNameIndexScan(relrdesc, newrelname);
-	if (PointerIsValid(newreltup))
-	{
-		pfree(oldreltup);
-		heap_close(relrdesc);
-		elog(ERROR, "renamerel: relation \"%s\" exists",
-			 newrelname);
-	}
+	newreltup = SearchSysCacheTuple(RELNAME,
+									 PointerGetDatum(newrelname),
+									 0, 0, 0);
+	if (HeapTupleIsValid(newreltup))
+		elog(ERROR, "renamerel: relation \"%s\" exists", newrelname);
 
-	/* rename the directory first, so if this fails the rename's not done */
+	/* rename the path first, so if this fails the rename's not done */
 	strcpy(oldpath, relpath(oldrelname));
 	strcpy(newpath, relpath(newrelname));
 	if (rename(oldpath, newpath) < 0)
-		elog(ERROR, "renamerel: unable to rename file: %m");
+		elog(ERROR, "renamerel: unable to rename file: %s", oldpath);
 
-	memmove((char *) (((Form_pg_class) GETSTRUCT(oldreltup))->relname.data),
-			newrelname,
-			NAMEDATALEN);
-	oldTID = oldreltup->t_ctid;
+	StrNCpy((((Form_pg_class) GETSTRUCT(oldreltup))->relname.data),
+				newrelname, NAMEDATALEN);
 
 	/* insert fixed rel tuple */
-	heap_replace(relrdesc, &oldTID, oldreltup);
+	relrelation = heap_openr(RelationRelationName);
+	heap_replace(relrelation, &oldreltup->t_ctid, oldreltup);
 
 	/* keep the system catalog indices current */
-	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs);
-	CatalogIndexInsert(idescs, Num_pg_class_indices, relrdesc, oldreltup);
-	CatalogCloseIndices(Num_pg_class_indices, idescs);
+	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, irelations);
+	CatalogIndexInsert(irelations, Num_pg_class_indices, relrelation, oldreltup);
+	CatalogCloseIndices(Num_pg_class_indices, irelations);
 
-	pfree(oldreltup);
-	heap_close(relrdesc);
+	heap_close(relrelation);
 }
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 2c81196ff7c7f4dd764b516c10d36cfa8f3d2db0..f28ec52b0099faa18a407e9730b6c0a784e11465 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -395,18 +395,18 @@ init_sequence(char *caller, char *name)
 
 	if (elm != (SeqTable) NULL) /* we opened sequence from our */
 	{							/* SeqTable - check relid ! */
-		if (RelationGetRelationId(elm->rel) != elm->relid)
+		if (RelationGetRelid(elm->rel) != elm->relid)
 		{
 			elog(NOTICE, "%s.%s: sequence was re-created",
 				 name, caller, name);
 			elm->cached = elm->last = elm->increment = 0;
-			elm->relid = RelationGetRelationId(elm->rel);
+			elm->relid = RelationGetRelid(elm->rel);
 		}
 	}
 	else
 	{
 		elm = temp;
-		elm->relid = RelationGetRelationId(elm->rel);
+		elm->relid = RelationGetRelid(elm->rel);
 		if (seqtab == (SeqTable) NULL)
 			seqtab = elm;
 		else
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index 32db700c61ca9a2e3341e3c0e8a3911eb7e28016..6aa583cba4c420c94336369998f51d9c8700aa3e 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -59,7 +59,6 @@ CreateTrigger(CreateTrigStmt *stmt)
 	ScanKeyData key;
 	Relation	relrdesc;
 	HeapTuple	tuple;
-	ItemPointerData oldTID;
 	Relation	idescs[Num_pg_trigger_indices];
 	Relation	ridescs[Num_pg_class_indices];
 	MemoryContext oldcxt;
@@ -118,9 +117,9 @@ CreateTrigger(CreateTrigStmt *stmt)
 	tgrel = heap_openr(TriggerRelationName);
 	RelationSetLockForWrite(tgrel);
 	ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
-						   F_OIDEQ, rel->rd_id);
+						   F_OIDEQ, RelationGetRelid(rel));
 	tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
-	while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple))
+	while (HeapTupleIsValid(tuple = heap_getnext(tgscan, 0)))
 	{
 		Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple);
 
@@ -135,7 +134,9 @@ CreateTrigger(CreateTrigStmt *stmt)
 	MemSet(fargtypes, 0, 8 * sizeof(Oid));
 	tuple = SearchSysCacheTuple(PRONAME,
 								PointerGetDatum(stmt->funcname),
-								0, PointerGetDatum(fargtypes), 0);
+								Int32GetDatum(0),
+								PointerGetDatum(fargtypes),
+								0);
 	if (!HeapTupleIsValid(tuple) ||
 		((Form_pg_proc) GETSTRUCT(tuple))->prorettype != 0 ||
 		((Form_pg_proc) GETSTRUCT(tuple))->pronargs != 0)
@@ -157,7 +158,7 @@ CreateTrigger(CreateTrigStmt *stmt)
 
 	MemSet(nulls, ' ', Natts_pg_trigger * sizeof(char));
 
-	values[Anum_pg_trigger_tgrelid - 1] = ObjectIdGetDatum(rel->rd_id);
+	values[Anum_pg_trigger_tgrelid - 1] = ObjectIdGetDatum(RelationGetRelid(rel));
 	values[Anum_pg_trigger_tgname - 1] = NameGetDatum(namein(stmt->trigname));
 	values[Anum_pg_trigger_tgfoid - 1] = ObjectIdGetDatum(tuple->t_oid);
 	values[Anum_pg_trigger_tgtype - 1] = Int16GetDatum(tgtype);
@@ -218,17 +219,16 @@ CreateTrigger(CreateTrigStmt *stmt)
 	pfree(DatumGetPointer(values[Anum_pg_trigger_tgargs - 1]));
 
 	/* update pg_class */
-	relrdesc = heap_openr(RelationRelationName);
-	tuple = ClassNameIndexScan(relrdesc, stmt->relname);
-	if (!PointerIsValid(tuple))
-	{
-		heap_close(relrdesc);
+	tuple = SearchSysCacheTupleCopy(RELNAME,
+									 PointerGetDatum(stmt->relname),
+									 0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "CreateTrigger: relation %s not found in pg_class", stmt->relname);
-	}
+
+	relrdesc = heap_openr(RelationRelationName);
 	((Form_pg_class) GETSTRUCT(tuple))->reltriggers = found + 1;
 	RelationInvalidateHeapTuple(relrdesc, tuple);
-	oldTID = tuple->t_ctid;
-	heap_replace(relrdesc, &oldTID, tuple);
+	heap_replace(relrdesc, &tuple->t_ctid, tuple);
 	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, ridescs);
 	CatalogIndexInsert(ridescs, Num_pg_class_indices, relrdesc, tuple);
 	CatalogCloseIndices(Num_pg_class_indices, ridescs);
@@ -254,12 +254,11 @@ DropTrigger(DropTrigStmt *stmt)
 	ScanKeyData key;
 	Relation	relrdesc;
 	HeapTuple	tuple;
-	ItemPointerData oldTID;
 	Relation	ridescs[Num_pg_class_indices];
 	MemoryContext oldcxt;
 	int			found = 0;
 	int			tgfound = 0;
-
+	
 #ifndef NO_SECURITY
 	if (!pg_ownercheck(GetPgUserName(), stmt->relname, RELNAME))
 		elog(ERROR, "%s: %s", stmt->relname, aclcheck_error_strings[ACLCHECK_NOT_OWNER]);
@@ -274,9 +273,9 @@ DropTrigger(DropTrigStmt *stmt)
 	tgrel = heap_openr(TriggerRelationName);
 	RelationSetLockForWrite(tgrel);
 	ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
-						   F_OIDEQ, rel->rd_id);
+						   F_OIDEQ, RelationGetRelid(rel));
 	tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
-	while (tuple = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tuple))
+	while (HeapTupleIsValid(tuple = heap_getnext(tgscan, 0)))
 	{
 		Form_pg_trigger pg_trigger = (Form_pg_trigger) GETSTRUCT(tuple);
 
@@ -298,18 +297,17 @@ DropTrigger(DropTrigStmt *stmt)
 	RelationUnsetLockForWrite(tgrel);
 	heap_close(tgrel);
 
+	tuple = SearchSysCacheTupleCopy(RELNAME,
+									 PointerGetDatum(stmt->relname),
+									 0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
+		elog(ERROR, "DropTrigger: relation %s not found in pg_class", stmt->relname);
+
 	/* update pg_class */
 	relrdesc = heap_openr(RelationRelationName);
-	tuple = ClassNameIndexScan(relrdesc, stmt->relname);
-	if (!PointerIsValid(tuple))
-	{
-		heap_close(relrdesc);
-		elog(ERROR, "DropTrigger: relation %s not found in pg_class", stmt->relname);
-	}
 	((Form_pg_class) GETSTRUCT(tuple))->reltriggers = found;
 	RelationInvalidateHeapTuple(relrdesc, tuple);
-	oldTID = tuple->t_ctid;
-	heap_replace(relrdesc, &oldTID, tuple);
+	heap_replace(relrdesc, &tuple->t_ctid, tuple);
 	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, ridescs);
 	CatalogIndexInsert(ridescs, Num_pg_class_indices, relrdesc, tuple);
 	CatalogCloseIndices(Num_pg_class_indices, ridescs);
@@ -338,11 +336,11 @@ RelationRemoveTriggers(Relation rel)
 	tgrel = heap_openr(TriggerRelationName);
 	RelationSetLockForWrite(tgrel);
 	ScanKeyEntryInitialize(&key, 0, Anum_pg_trigger_tgrelid,
-						   F_OIDEQ, rel->rd_id);
+						   F_OIDEQ, RelationGetRelid(rel));
 
 	tgscan = heap_beginscan(tgrel, 0, SnapshotNow, 1, &key);
 
-	while (tup = heap_getnext(tgscan, 0, (Buffer *) NULL), PointerIsValid(tup))
+	while (HeapTupleIsValid(tup = heap_getnext(tgscan, 0)))
 		heap_delete(tgrel, &tup->t_ctid);
 
 	heap_endscan(tgscan);
@@ -377,7 +375,7 @@ RelationBuildTriggers(Relation relation)
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
-						   ObjectIdGetDatum(relation->rd_id));
+						   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	tgrel = heap_openr(TriggerRelationName);
 	RelationSetLockForRead(tgrel);
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index fe0ee30201307f5a792300122f63d1f42ad1ba36..349e0aad07705da5f6c0dbcc9578edfb418c1ed3 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -95,7 +95,6 @@ DefineUser(CreateUserStmt *stmt)
 	HeapScanDesc scan;
 	HeapTuple	tuple;
 	Datum		datum;
-	Buffer		buffer;
 	char		sql[512];
 	char	   *sql_end;
 	bool		exists = false,
@@ -135,7 +134,7 @@ DefineUser(CreateUserStmt *stmt)
 	RelationSetLockForWrite(pg_shadow_rel);
 
 	scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
-	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 	{
 		datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n);
 
@@ -145,8 +144,6 @@ DefineUser(CreateUserStmt *stmt)
 		datum = heap_getattr(tuple, Anum_pg_shadow_usesysid, pg_shadow_dsc, &n);
 		if ((int) datum > max_id)
 			max_id = (int) datum;
-
-		ReleaseBuffer(buffer);
 	}
 	heap_endscan(scan);
 
@@ -223,15 +220,10 @@ AlterUser(AlterUserStmt *stmt)
 	char	   *pg_shadow;
 	Relation	pg_shadow_rel;
 	TupleDesc	pg_shadow_dsc;
-	HeapScanDesc scan;
 	HeapTuple	tuple;
-	Datum		datum;
-	Buffer		buffer;
 	char		sql[512];
 	char	   *sql_end;
-	bool		exists = false,
-				n,
-				inblock;
+	bool		inblock;
 
 	if (stmt->password)
 		CheckPgUserAclNotNull();
@@ -264,25 +256,14 @@ AlterUser(AlterUserStmt *stmt)
 	 */
 	RelationSetLockForWrite(pg_shadow_rel);
 
-	scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
-	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
-	{
-		datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_shadow_dsc, &n);
-
-		if (!strncmp((char *) datum, stmt->user, strlen(stmt->user)))
-		{
-			exists = true;
-			ReleaseBuffer(buffer);
-			break;
-		}
-	}
-	heap_endscan(scan);
-
-	if (!exists)
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(stmt->user),
+								0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 	{
 		RelationUnsetLockForWrite(pg_shadow_rel);
 		heap_close(pg_shadow_rel);
-		UserAbortTransactionBlock();
+		UserAbortTransactionBlock(); /* needed? */
 		elog(ERROR, "alterUser: user \"%s\" does not exist", stmt->user);
 		return;
 	}
@@ -354,12 +335,11 @@ RemoveUser(char *user)
 	HeapScanDesc scan;
 	HeapTuple	tuple;
 	Datum		datum;
-	Buffer		buffer;
 	char		sql[512];
 	bool		n,
 				inblock;
-	int			usesysid = -1,
-				ndbase = 0;
+	int32		usesysid;
+	int			ndbase = 0;
 	char	  **dbase = NULL;
 
 	if (!(inblock = IsTransactionBlock()))
@@ -375,7 +355,6 @@ RemoveUser(char *user)
 		UserAbortTransactionBlock();
 		elog(ERROR, "removeUser: user \"%s\" does not have SELECT and DELETE privilege for \"%s\"",
 			 pg_shadow, ShadowRelationName);
-		return;
 	}
 
 	/*
@@ -393,30 +372,19 @@ RemoveUser(char *user)
 	 */
 	RelationSetLockForWrite(pg_shadow_rel);
 
-	scan = heap_beginscan(pg_shadow_rel, false, SnapshotNow, 0, NULL);
-	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
-	{
-		datum = heap_getattr(tuple, Anum_pg_shadow_usename, pg_dsc, &n);
-
-		if (!strncmp((char *) datum, user, strlen(user)))
-		{
-			usesysid = (int) heap_getattr(tuple, Anum_pg_shadow_usesysid, pg_dsc, &n);
-			ReleaseBuffer(buffer);
-			break;
-		}
-		ReleaseBuffer(buffer);
-	}
-	heap_endscan(scan);
-
-	if (usesysid == -1)
+	tuple = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(user),
+								0, 0, 0);
+	if (!HeapTupleIsValid(tuple))
 	{
 		RelationUnsetLockForWrite(pg_shadow_rel);
 		heap_close(pg_shadow_rel);
 		UserAbortTransactionBlock();
 		elog(ERROR, "removeUser: user \"%s\" does not exist", user);
-		return;
 	}
 
+	usesysid = (int32) heap_getattr(tuple, Anum_pg_shadow_usesysid, pg_dsc, &n);
+
 	/*
 	 * Perform a scan of the pg_database relation to find the databases
 	 * owned by usesysid.  Then drop them.
@@ -425,7 +393,7 @@ RemoveUser(char *user)
 	pg_dsc = RelationGetTupleDescriptor(pg_rel);
 
 	scan = heap_beginscan(pg_rel, false, SnapshotNow, 0, NULL);
-	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0, &buffer)))
+	while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
 	{
 		datum = heap_getattr(tuple, Anum_pg_database_datdba, pg_dsc, &n);
 
@@ -440,7 +408,6 @@ RemoveUser(char *user)
 				dbase[ndbase++][NAMEDATALEN] = '\0';
 			}
 		}
-		ReleaseBuffer(buffer);
 	}
 	heap_endscan(scan);
 	heap_close(pg_rel);
@@ -496,17 +463,18 @@ RemoveUser(char *user)
 static void
 CheckPgUserAclNotNull()
 {
-	HeapTuple	htp;
+	HeapTuple	htup;
 
-	htp = SearchSysCacheTuple(RELNAME, PointerGetDatum(ShadowRelationName),
+	htup = SearchSysCacheTuple(RELNAME,
+							  PointerGetDatum(ShadowRelationName),
 							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	if (!HeapTupleIsValid(htup))
 	{
 		elog(ERROR, "IsPgUserAclNull: class \"%s\" not found",
 			 ShadowRelationName);
 	}
 
-	if (heap_attisnull(htp, Anum_pg_class_relacl))
+	if (heap_attisnull(htup, Anum_pg_class_relacl))
 	{
 		elog(NOTICE, "To use passwords, you have to revoke permissions on pg_shadow");
 		elog(NOTICE, "so normal users can not read the passwords.");
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 40e5c3c3c3ff9f9505b15cc0f10caedae6db89ce..bf2752dfa9261d099138d8c2c2c8d7b70b7b5ba6 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.69 1998/07/27 19:37:53 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.70 1998/08/19 02:01:56 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -55,7 +55,7 @@
 
  /* #include <port-protos.h> *//* Why? */
 
-extern int	BlowawayRelationBuffers(Relation rdesc, BlockNumber block);
+extern int	BlowawayRelationBuffers(Relation rel, BlockNumber block);
 
 bool		VacuumRunning = false;
 
@@ -84,7 +84,7 @@ static void vc_vacheap(VRelStats *vacrelstats, Relation onerel, VPageList vpl);
 static void vc_vacpage(Page page, VPageDescr vpd);
 static void vc_vaconeind(VPageList vpl, Relation indrel, int nhtups);
 static void vc_scanoneind(Relation indrel, int nhtups);
-static void vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple htup);
+static void vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple tuple);
 static void vc_bucketcpy(AttributeTupleForm attr, Datum value, Datum *bucket, int16 *bucket_len);
 static void vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelstats);
 static void vc_delhilowstats(Oid relid, int attcnt, int *attnums);
@@ -261,7 +261,6 @@ vc_getrels(NameData *VacRelP)
 	TupleDesc	pgcdesc;
 	HeapScanDesc pgcscan;
 	HeapTuple	pgctup;
-	Buffer		buf;
 	PortalVariableMemory portalmem;
 	MemoryContext old;
 	VRelList	vrl,
@@ -270,8 +269,8 @@ vc_getrels(NameData *VacRelP)
 	char	   *rname;
 	char		rkind;
 	bool		n;
-	ScanKeyData pgckey;
 	bool		found = false;
+	ScanKeyData pgckey;
 
 	StartTransactionCommand();
 
@@ -295,9 +294,8 @@ vc_getrels(NameData *VacRelP)
 
 	pgcscan = heap_beginscan(pgclass, false, SnapshotNow, 1, &pgckey);
 
-	while (HeapTupleIsValid(pgctup = heap_getnext(pgcscan, 0, &buf)))
+	while (HeapTupleIsValid(pgctup = heap_getnext(pgcscan, 0)))
 	{
-
 		found = true;
 
 		d = heap_getattr(pgctup, Anum_pg_class_relname, pgcdesc, &n);
@@ -314,7 +312,6 @@ vc_getrels(NameData *VacRelP)
 		{
 			elog(NOTICE, "Rel %s: can't vacuum LargeObjects now",
 				 rname);
-			ReleaseBuffer(buf);
 			continue;
 		}
 
@@ -325,7 +322,6 @@ vc_getrels(NameData *VacRelP)
 		/* skip system relations */
 		if (rkind != 'r')
 		{
-			ReleaseBuffer(buf);
 			elog(NOTICE, "Vacuum: can not process index and certain system tables");
 			continue;
 		}
@@ -343,9 +339,6 @@ vc_getrels(NameData *VacRelP)
 
 		cur->vrl_relid = pgctup->t_oid;
 		cur->vrl_next = (VRelList) NULL;
-
-		/* wei hates it if you forget to do this */
-		ReleaseBuffer(buf);
 	}
 	if (found == false)
 		elog(NOTICE, "Vacuum: table not found");
@@ -378,10 +371,7 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
 	TupleDesc	pgcdesc;
 	HeapTuple	pgctup,
 				pgttup;
-	Buffer		pgcbuf;
-	HeapScanDesc pgcscan;
 	Relation	onerel;
-	ScanKeyData pgckey;
 	VPageListData Vvpl;			/* List of pages to vacuum and/or clean
 								 * indices */
 	VPageListData Fvpl;			/* List of pages with space enough for
@@ -394,22 +384,18 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
 
 	StartTransactionCommand();
 
-	ScanKeyEntryInitialize(&pgckey, 0x0, ObjectIdAttributeNumber,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(relid));
-
 	pgclass = heap_openr(RelationRelationName);
 	pgcdesc = RelationGetTupleDescriptor(pgclass);
-	pgcscan = heap_beginscan(pgclass, false, SnapshotNow, 1, &pgckey);
 
 	/*
 	 * Race condition -- if the pg_class tuple has gone away since the
 	 * last time we saw it, we don't need to vacuum it.
 	 */
-
-	if (!HeapTupleIsValid(pgctup = heap_getnext(pgcscan, 0, &pgcbuf)))
+	pgctup = SearchSysCacheTuple(RELOID,
+								 ObjectIdGetDatum(relid),
+								 0, 0, 0);
+	if (!HeapTupleIsValid(pgctup))
 	{
-		heap_endscan(pgcscan);
 		heap_close(pgclass);
 		CommitTransactionCommand();
 		return;
@@ -508,7 +494,7 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
 				stats->f_cmpgt.fn_addr = NULL;
 
 			pgttup = SearchSysCacheTuple(TYPOID,
-								 ObjectIdGetDatum(stats->attr->atttypid),
+									 ObjectIdGetDatum(stats->attr->atttypid),
 										 0, 0, 0);
 			if (HeapTupleIsValid(pgttup))
 				stats->outfunc = ((TypeTupleForm) GETSTRUCT(pgttup))->typoutput;
@@ -581,7 +567,6 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
 
 	/* all done with this class */
 	heap_close(onerel);
-	heap_endscan(pgcscan);
 	heap_close(pgclass);
 
 	/* update statistics in pg_class */
@@ -610,8 +595,8 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 				blkno;
 	ItemId		itemid;
 	ItemPointer itemptr;
-	HeapTuple	htup;
 	Buffer		buf;
+	HeapTuple	tuple;
 	Page		page,
 				tempPage = NULL;
 	OffsetNumber offnum,
@@ -706,23 +691,23 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 				continue;
 			}
 
-			htup = (HeapTuple) PageGetItem(page, itemid);
+			tuple = (HeapTuple) PageGetItem(page, itemid);
 			tupgone = false;
 
-			if (!(htup->t_infomask & HEAP_XMIN_COMMITTED))
+			if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
 			{
-				if (htup->t_infomask & HEAP_XMIN_INVALID)
+				if (tuple->t_infomask & HEAP_XMIN_INVALID)
 					tupgone = true;
 				else
 				{
-					if (TransactionIdDidAbort(htup->t_xmin))
+					if (TransactionIdDidAbort(tuple->t_xmin))
 						tupgone = true;
-					else if (TransactionIdDidCommit(htup->t_xmin))
+					else if (TransactionIdDidCommit(tuple->t_xmin))
 					{
-						htup->t_infomask |= HEAP_XMIN_COMMITTED;
+						tuple->t_infomask |= HEAP_XMIN_COMMITTED;
 						pgchanged = true;
 					}
-					else if (!TransactionIdIsInProgress(htup->t_xmin))
+					else if (!TransactionIdIsInProgress(tuple->t_xmin))
 					{
 
 						/*
@@ -735,7 +720,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 					else
 					{
 						elog(NOTICE, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation",
-							 relname, blkno, offnum, htup->t_xmin);
+							 relname, blkno, offnum, tuple->t_xmin);
 						do_shrinking = false;
 					}
 				}
@@ -745,32 +730,32 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 			 * here we are concerned about tuples with xmin committed and
 			 * xmax unknown or committed
 			 */
-			if (htup->t_infomask & HEAP_XMIN_COMMITTED &&
-				!(htup->t_infomask & HEAP_XMAX_INVALID))
+			if (tuple->t_infomask & HEAP_XMIN_COMMITTED &&
+				!(tuple->t_infomask & HEAP_XMAX_INVALID))
 			{
-				if (htup->t_infomask & HEAP_XMAX_COMMITTED)
+				if (tuple->t_infomask & HEAP_XMAX_COMMITTED)
 					tupgone = true;
-				else if (TransactionIdDidAbort(htup->t_xmax))
+				else if (TransactionIdDidAbort(tuple->t_xmax))
 				{
-					htup->t_infomask |= HEAP_XMAX_INVALID;
+					tuple->t_infomask |= HEAP_XMAX_INVALID;
 					pgchanged = true;
 				}
-				else if (TransactionIdDidCommit(htup->t_xmax))
+				else if (TransactionIdDidCommit(tuple->t_xmax))
 					tupgone = true;
-				else if (!TransactionIdIsInProgress(htup->t_xmax))
+				else if (!TransactionIdIsInProgress(tuple->t_xmax))
 				{
 
 					/*
 					 * Not Aborted, Not Committed, Not in Progress - so it
 					 * from crashed process. - vadim 06/02/97
 					 */
-					htup->t_infomask |= HEAP_XMAX_INVALID;;
+					tuple->t_infomask |= HEAP_XMAX_INVALID;;
 					pgchanged = true;
 				}
 				else
 				{
 					elog(NOTICE, "Rel %s: TID %u/%u: DeleteTransactionInProgress %u - can't shrink relation",
-						 relname, blkno, offnum, htup->t_xmax);
+						 relname, blkno, offnum, tuple->t_xmax);
 					do_shrinking = false;
 				}
 			}
@@ -779,7 +764,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 			 * It's possibly! But from where it comes ? And should we fix
 			 * it ?  - vadim 11/28/96
 			 */
-			itemptr = &(htup->t_ctid);
+			itemptr = &(tuple->t_ctid);
 			if (!ItemPointerIsValid(itemptr) ||
 				BlockIdGetBlockNumber(&(itemptr->ip_blkid)) != blkno)
 			{
@@ -792,13 +777,13 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 			/*
 			 * Other checks...
 			 */
-			if (htup->t_len != itemid->lp_len)
+			if (tuple->t_len != itemid->lp_len)
 			{
 				elog(NOTICE, "Rel %s: TID %u/%u: TUPLE_LEN IN PAGEHEADER %u IS NOT THE SAME AS IN TUPLEHEADER %u. TUPGONE %d.",
 					 relname, blkno, offnum,
-					 itemid->lp_len, htup->t_len, tupgone);
+					 itemid->lp_len, tuple->t_len, tupgone);
 			}
-			if (!OidIsValid(htup->t_oid))
+			if (!OidIsValid(tuple->t_oid))
 			{
 				elog(NOTICE, "Rel %s: TID %u/%u: OID IS INVALID. TUPGONE %d.",
 					 relname, blkno, offnum, tupgone);
@@ -830,11 +815,11 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
 			{
 				ntups++;
 				notup = false;
-				if (htup->t_len < min_tlen)
-					min_tlen = htup->t_len;
-				if (htup->t_len > max_tlen)
-					max_tlen = htup->t_len;
-				vc_attrstats(onerel, vacrelstats, htup);
+				if (tuple->t_len < min_tlen)
+					min_tlen = tuple->t_len;
+				if (tuple->t_len > max_tlen)
+					max_tlen = tuple->t_len;
+				vc_attrstats(onerel, vacrelstats, tuple);
 			}
 		}
 
@@ -947,7 +932,7 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
 				moff;
 	ItemId		itemid,
 				newitemid;
-	HeapTuple	htup,
+	HeapTuple	tuple,
 				newtup;
 	TupleDesc	tupdesc = NULL;
 	Datum	   *idatum = NULL;
@@ -1064,8 +1049,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
 			if (!ItemIdIsUsed(itemid))
 				continue;
 
-			htup = (HeapTuple) PageGetItem(page, itemid);
-			tlen = htup->t_len;
+			tuple = (HeapTuple) PageGetItem(page, itemid);
+			tlen = tuple->t_len;
 
 			/* try to find new page for this tuple */
 			if (ToBuf == InvalidBuffer ||
@@ -1112,7 +1097,7 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
 
 			/* copy tuple */
 			newtup = (HeapTuple) palloc(tlen);
-			memmove((char *) newtup, (char *) htup, tlen);
+			memmove((char *) newtup, (char *) tuple, tlen);
 
 			/* store transaction information */
 			TransactionIdStore(myXID, &(newtup->t_xmin));
@@ -1138,10 +1123,10 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
 			ItemPointerSet(&(newtup->t_ctid), ToVpd->vpd_blkno, newoff);
 
 			/* now logically delete end-tuple */
-			TransactionIdStore(myXID, &(htup->t_xmax));
-			htup->t_cmax = myCID;
+			TransactionIdStore(myXID, &(tuple->t_xmax));
+			tuple->t_cmax = myCID;
 			/* set xmax to unknown */
-			htup->t_infomask &= ~(HEAP_XMAX_INVALID | HEAP_XMAX_COMMITTED);
+			tuple->t_infomask &= ~(HEAP_XMAX_INVALID | HEAP_XMAX_COMMITTED);
 
 			ToVpd->vpd_nusd++;
 			nmoved++;
@@ -1158,7 +1143,6 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
 							   (AttrNumber *) &(idcur->tform->indkey[0]),
 								   newtup,
 								   tupdesc,
-								   InvalidBuffer,
 								   idatum,
 								   inulls,
 								   idcur->finfoP);
@@ -1244,10 +1228,10 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
 				itemid = PageGetItemId(page, newoff);
 				if (!ItemIdIsUsed(itemid))
 					continue;
-				htup = (HeapTuple) PageGetItem(page, itemid);
-				if (TransactionIdEquals((TransactionId) htup->t_xmin, myXID))
+				tuple = (HeapTuple) PageGetItem(page, itemid);
+				if (TransactionIdEquals((TransactionId) tuple->t_xmin, myXID))
 				{
-					htup->t_infomask |= HEAP_XMIN_COMMITTED;
+					tuple->t_infomask |= HEAP_XMIN_COMMITTED;
 					ntups++;
 				}
 			}
@@ -1307,8 +1291,8 @@ Elapsed %u/%u sec.",
 				itemid = PageGetItemId(page, offnum);
 				if (!ItemIdIsUsed(itemid))
 					continue;
-				htup = (HeapTuple) PageGetItem(page, itemid);
-				Assert(TransactionIdEquals((TransactionId) htup->t_xmax, myXID));
+				tuple = (HeapTuple) PageGetItem(page, itemid);
+				Assert(TransactionIdEquals((TransactionId) tuple->t_xmax, myXID));
 				itemid->lp_flags &= ~LP_USED;
 				ntups++;
 			}
@@ -1453,7 +1437,7 @@ vc_scanoneind(Relation indrel, int nhtups)
 
 	/* now update statistics in pg_class */
 	nipages = RelationGetNumberOfBlocks(indrel);
-	vc_updstats(indrel->rd_id, nipages, nitups, false, NULL);
+	vc_updstats(RelationGetRelid(indrel), nipages, nitups, false, NULL);
 
 	getrusage(RUSAGE_SELF, &ru1);
 
@@ -1526,7 +1510,6 @@ vc_vaconeind(VPageList vpl, Relation indrel, int nhtups)
 		else
 			nitups++;
 
-		/* be tidy */
 		pfree(res);
 	}
 
@@ -1534,7 +1517,7 @@ vc_vaconeind(VPageList vpl, Relation indrel, int nhtups)
 
 	/* now update statistics in pg_class */
 	nipages = RelationGetNumberOfBlocks(indrel);
-	vc_updstats(indrel->rd_id, nipages, nitups, false, NULL);
+	vc_updstats(RelationGetRelid(indrel), nipages, nitups, false, NULL);
 
 	getrusage(RUSAGE_SELF, &ru1);
 
@@ -1615,7 +1598,7 @@ vc_tidreapped(ItemPointer itemptr, VPageList vpl)
  *
  */
 static void
-vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple htup)
+vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple tuple)
 {
 	int			i,
 				attr_cnt = vacrelstats->va_natts;
@@ -1629,7 +1612,7 @@ vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple htup)
 		VacAttrStats *stats = &vacattrstats[i];
 		bool		value_hit = true;
 
-		value = heap_getattr(htup,
+		value = heap_getattr(tuple,
 							 stats->attr->attnum, tupDesc, &isnull);
 
 		if (!VacAttrStatsEqValid(stats))
@@ -1751,35 +1734,28 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 	Relation	rd,
 				ad,
 				sd;
-	HeapScanDesc rsdesc,
-				asdesc;
-	TupleDesc	sdesc;
+	HeapScanDesc scan;
 	HeapTuple	rtup,
 				atup,
 				stup;
-	Buffer		rbuf,
-				abuf;
 	Form_pg_class pgcform;
-	ScanKeyData rskey,
-				askey;
+	ScanKeyData askey;
 	AttributeTupleForm attp;
 
 	/*
 	 * update number of tuples and number of pages in pg_class
 	 */
-	ScanKeyEntryInitialize(&rskey, 0x0, ObjectIdAttributeNumber,
-						   F_OIDEQ,
-						   ObjectIdGetDatum(relid));
+	rtup = SearchSysCacheTupleCopy(RELOID,
+									 ObjectIdGetDatum(relid),
+									 0, 0, 0);
+	if (!HeapTupleIsValid(rtup))
+		elog(ERROR, "pg_class entry for relid %d vanished during vacuuming",
+				relid);
 
 	rd = heap_openr(RelationRelationName);
-	rsdesc = heap_beginscan(rd, false, SnapshotNow, 1, &rskey);
-
-	if (!HeapTupleIsValid(rtup = heap_getnext(rsdesc, 0, &rbuf)))
-		elog(ERROR, "pg_class entry for relid %d vanished during vacuuming",
-			 relid);
 
 	/* overwrite the existing statistics in the tuple */
-	vc_setpagelock(rd, BufferGetBlockNumber(rbuf));
+	vc_setpagelock(rd, ItemPointerGetBlockNumber(&rtup->t_ctid));
 	pgcform = (Form_pg_class) GETSTRUCT(rtup);
 	pgcform->reltuples = ntups;
 	pgcform->relpages = npages;
@@ -1795,9 +1771,9 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 		ScanKeyEntryInitialize(&askey, 0, Anum_pg_attribute_attrelid,
 							   F_INT4EQ, relid);
 
-		asdesc = heap_beginscan(ad, false, SnapshotNow, 1, &askey);
+		scan = heap_beginscan(ad, false, SnapshotNow, 1, &askey);
 
-		while (HeapTupleIsValid(atup = heap_getnext(asdesc, 0, &abuf)))
+		while (HeapTupleIsValid(atup = heap_getnext(scan, 0)))
 		{
 			int			i;
 			float32data selratio;		/* average ratio of rows selected
@@ -1824,7 +1800,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 			if (VacAttrStatsEqValid(stats))
 			{
 
-				vc_setpagelock(ad, BufferGetBlockNumber(abuf));
+				vc_setpagelock(ad, ItemPointerGetBlockNumber(&atup->t_ctid));
 
 				if (stats->nonnull_cnt + stats->null_cnt == 0 ||
 					(stats->null_cnt <= 1 && stats->best_cnt == 1))
@@ -1853,7 +1829,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 				if (selratio > 1.0)
 					selratio = 1.0;
 				attp->attdisbursion = selratio;
-				WriteNoReleaseBuffer(abuf);
+				WriteNoReleaseBuffer(ItemPointerGetBlockNumber(&atup->t_ctid));
 
 				/* DO PG_STATISTIC INSERTS */
 
@@ -1888,9 +1864,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 					values[i++] = (Datum) fmgr(F_TEXTIN, out_string);
 					pfree(out_string);
 
-					sdesc = sd->rd_att;
-
-					stup = heap_formtuple(sdesc, values, nulls);
+					stup = heap_formtuple(sd->rd_att, values, nulls);
 
 					/* ----------------
 					 *	insert the tuple in the relation and get the tuple's oid.
@@ -1903,13 +1877,15 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 				}
 			}
 		}
-		heap_endscan(asdesc);
+		heap_endscan(scan);
 		heap_close(ad);
 		heap_close(sd);
 	}
 
 	/* XXX -- after write, should invalidate relcache in other backends */
-	WriteNoReleaseBuffer(rbuf); /* heap_endscan release scan' buffers ? */
+#ifdef NOT_USED
+	WriteNoReleaseBuffer(&rtup->t_ctid); /* heap_endscan release scan' buffers ? */
+#endif
 
 	/*
 	 * invalidating system relations confuses the function cache of
@@ -1918,8 +1894,7 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
 	if (!IsSystemRelationName(pgcform->relname.data))
 		RelationInvalidateHeapTuple(rd, rtup);
 
-	/* that's all, folks */
-	heap_endscan(rsdesc);
+	pfree(rtup);
 	heap_close(rd);
 }
 
@@ -1947,7 +1922,7 @@ vc_delhilowstats(Oid relid, int attcnt, int *attnums)
 	else
 		pgsscan = heap_beginscan(pgstatistic, false, SnapshotNow, 0, NULL);
 
-	while (HeapTupleIsValid(pgstup = heap_getnext(pgsscan, 0, NULL)))
+	while (HeapTupleIsValid(pgstup = heap_getnext(pgsscan, 0)))
 	{
 		if (attcnt > 0)
 		{
@@ -2156,7 +2131,7 @@ vc_getindices(Oid relid, int *nindices, Relation **Irel)
 
 	pgiscan = heap_beginscan(pgindex, false, SnapshotNow, 1, &pgikey);
 
-	while (HeapTupleIsValid(pgitup = heap_getnext(pgiscan, 0, NULL)))
+	while (HeapTupleIsValid(pgitup = heap_getnext(pgiscan, 0)))
 	{
 		d = heap_getattr(pgitup, Anum_pg_index_indexrelid,
 						 pgidesc, &n);
@@ -2233,7 +2208,7 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
 	{
 		pgIndexTup =
 			SearchSysCacheTuple(INDEXRELID,
-								ObjectIdGetDatum(Irel[i]->rd_id),
+								ObjectIdGetDatum(RelationGetRelid(Irel[i])),
 								0, 0, 0);
 		Assert(pgIndexTup);
 		idcur->tform = (IndexTupleForm) GETSTRUCT(pgIndexTup);
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 41bb1dc5d41febaaadbacbe477ffde000201b411..41943446a7ea2052d9f6fac2dfe3b73ced597014 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.52 1998/08/06 05:12:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.53 1998/08/19 02:01:59 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -283,7 +283,7 @@ ExecCheckPerms(CmdType operation,
 {
 	int			i = 1;
 	Oid			relid;
-	HeapTuple	htp;
+	HeapTuple	htup;
 	List	   *lp;
 	List	   *qvars,
 			   *tvars;
@@ -314,14 +314,14 @@ ExecCheckPerms(CmdType operation,
 		}
 
 		relid = rte->relid;
-		htp = SearchSysCacheTuple(RELOID,
+		htup = SearchSysCacheTuple(RELOID,
 								  ObjectIdGetDatum(relid),
 								  0, 0, 0);
-		if (!HeapTupleIsValid(htp))
+		if (!HeapTupleIsValid(htup))
 			elog(ERROR, "ExecCheckPerms: bogus RT relid: %d",
 				 relid);
 		StrNCpy(rname.data,
-				((Form_pg_class) GETSTRUCT(htp))->relname.data,
+				((Form_pg_class) GETSTRUCT(htup))->relname.data,
 				NAMEDATALEN);
 		if (i == resultRelation)
 		{						/* this is the result relation */
@@ -1290,9 +1290,10 @@ ExecAttrDefault(Relation rel, HeapTuple tuple)
 	if (repl == NULL)
 		return (tuple);
 
-	newtuple = heap_modifytuple(tuple, InvalidBuffer, rel, replValue, replNull, repl);
+	newtuple = heap_modifytuple(tuple, rel, replValue, replNull, repl);
 
 	pfree(repl);
+	pfree(tuple);
 	pfree(replNull);
 	pfree(replValue);
 
@@ -1323,7 +1324,7 @@ ExecRelCheck(Relation rel, HeapTuple tuple)
 	slot->ttc_whichplan = -1;
 	rte->relname = nameout(&(rel->rd_rel->relname));
 	rte->refname = rte->relname;
-	rte->relid = rel->rd_id;
+	rte->relid = RelationGetRelid(rel);
 	rte->inh = false;
 	rte->inFromCl = true;
 	rtlist = lcons(rte, NIL);
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 158f78ebcdbbfc151c7a0350dac8fd1a4975f983..489fc9096a8bb822473b156f6d9dbad7a03b25d1 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.34 1998/07/27 19:37:56 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.35 1998/08/19 02:02:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -760,10 +760,7 @@ ExecOpenIndices(Oid resultRelationOid,
 	fiList = NIL;
 	predList = NIL;
 
-	while (tuple = heap_getnext(indexSd,		/* scan desc */
-								false,	/* scan backward flag */
-								NULL),	/* return: buffer */
-		   HeapTupleIsValid(tuple))
+	while (HeapTupleIsValid(tuple = heap_getnext(indexSd, 0)))
 	{
 
 		/* ----------------
@@ -1020,8 +1017,6 @@ ExecFormIndexTuple(HeapTuple heapTuple,
 				   keyAttributeNumbers, /* array of att nums to extract */
 				   heapTuple,	/* tuple from base relation */
 				   heapDescriptor,		/* heap tuple's descriptor */
-				   InvalidBuffer,		/* buffer associated with heap
-										 * tuple */
 				   datum,		/* return: array of attributes */
 				   nulls,		/* return: array of char's */
 				   fInfoP);		/* functional index information */
@@ -1136,8 +1131,6 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
 												 * extract */
 					   heapTuple,		/* tuple from base relation */
 					   heapDescriptor,	/* heap tuple's descriptor */
-					   InvalidBuffer,	/* buffer associated with heap
-										 * tuple */
 					   datum,	/* return: array of attributes */
 					   nulls,	/* return: array of char's */
 					   fInfoP); /* functional index information */
diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c
index 55cc9d926fad62c6b5bbf038bc864ea8121f3ae5..cdc15c7e0c93cf87bf991c67bcf4f9124ee5929d 100644
--- a/src/backend/executor/nodeIndexscan.c
+++ b/src/backend/executor/nodeIndexscan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.23 1998/08/04 18:42:38 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.24 1998/08/19 02:02:02 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -123,7 +123,6 @@ IndexNext(IndexScan *node)
 		{
 			tuple = heap_fetch(heapRelation, snapshot,
 								&result->heap_iptr, &buffer);
-			/* be tidy */
 			pfree(result);
 
 			if (tuple != NULL)
@@ -224,7 +223,7 @@ ExecIndexReScan(IndexScan *node, ExprContext *exprCtxt, Plan *parent)
 	ScanDirection direction;
 	IndexScanDescPtr scanDescs;
 	ScanKey    *scanKeys;
-	IndexScanDesc sdesc;
+	IndexScanDesc scan;
 	ScanKey		skey;
 	int			numIndices;
 	int			i;
@@ -301,9 +300,9 @@ ExecIndexReScan(IndexScan *node, ExprContext *exprCtxt, Plan *parent)
 				}
 			}
 		}
-		sdesc = scanDescs[i];
+		scan = scanDescs[i];
 		skey = scanKeys[i];
-		index_rescan(sdesc, direction, skey);
+		index_rescan(scan, direction, skey);
 	}
 	/* ----------------
 	 *	perhaps return something meaningful
diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c
index e58bc39f5e42cd5e7555dd7bbb91ee048c4d4980..3d5496c7e665bd35021b86688a0df73538a9094a 100644
--- a/src/backend/executor/nodeMaterial.c
+++ b/src/backend/executor/nodeMaterial.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.14 1998/07/27 19:37:57 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.15 1998/08/19 02:02:03 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,7 +59,6 @@ ExecMaterial(Material *node)
 	HeapScanDesc currentScanDesc;
 	HeapTuple	heapTuple;
 	TupleTableSlot *slot;
-	Buffer		buffer;
 
 	/* ----------------
 	 *	get state info from node
@@ -162,10 +161,7 @@ ExecMaterial(Material *node)
 	 */
 	currentScanDesc = matstate->csstate.css_currentScanDesc;
 
-	heapTuple = heap_getnext(currentScanDesc,	/* scan desc */
-							 ScanDirectionIsBackward(dir),
-	/* bkwd flag */
-							 &buffer);	/* return: buffer */
+	heapTuple = heap_getnext(currentScanDesc, ScanDirectionIsBackward(dir));
 
 	/* ----------------
 	 *	put the tuple into the scan tuple slot and return the slot.
@@ -177,7 +173,7 @@ ExecMaterial(Material *node)
 
 	return ExecStoreTuple(heapTuple,	/* tuple to store */
 						  slot, /* slot to store in */
-						  buffer,		/* buffer for this tuple */
+						  currentScanDesc->rs_cbuf,	/* buffer for this tuple */
 						  false);		/* don't pfree this pointer */
 
 }
@@ -370,7 +366,7 @@ List							/* nothing of interest */
 ExecMaterialMarkPos(Material node)
 {
 	MaterialState matstate;
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 
 	/* ----------------
 	 *	if we haven't materialized yet, just return NIL.
@@ -386,8 +382,8 @@ ExecMaterialMarkPos(Material node)
 	 *		they will never return positions for all I know -cim 10/16/89
 	 * ----------------
 	 */
-	sdesc = get_css_currentScanDesc((CommonScanState) matstate);
-	heap_markpos(sdesc);
+	scan = get_css_currentScanDesc((CommonScanState) matstate);
+	heap_markpos(scan);
 
 	return NIL;
 }
@@ -400,7 +396,7 @@ void
 ExecMaterialRestrPos(Material node)
 {
 	MaterialState matstate;
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 
 	/* ----------------
 	 *	if we haven't materialized yet, just return.
@@ -414,8 +410,8 @@ ExecMaterialRestrPos(Material node)
 	 *	restore the scan to the previously marked position
 	 * ----------------
 	 */
-	sdesc = get_css_currentScanDesc((CommonScanState) matstate);
-	heap_restrpos(sdesc);
+	scan = get_css_currentScanDesc((CommonScanState) matstate);
+	heap_restrpos(scan);
 }
 
 #endif
diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c
index 1ff4f1f13eb3d4686561d57ca40e85efed46f4c8..80bdef829376b062141f38dfbf80a9add1bbdfde 100644
--- a/src/backend/executor/nodeSeqscan.c
+++ b/src/backend/executor/nodeSeqscan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.11 1998/07/27 19:37:57 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.12 1998/08/19 02:02:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -55,7 +55,6 @@ SeqNext(SeqScan *node)
 	EState	   *estate;
 	ScanDirection direction;
 	TupleTableSlot *slot;
-	Buffer		buffer;
 
 	/* ----------------
 	 *	get information from the estate and scan state
@@ -70,9 +69,7 @@ SeqNext(SeqScan *node)
 	 *	get the next tuple from the access methods
 	 * ----------------
 	 */
-	tuple = heap_getnext(scandesc,		/* scan desc */
-						 ScanDirectionIsBackward(direction),	/* backward flag */
-						 &buffer);		/* return: buffer */
+	tuple = heap_getnext(scandesc, ScanDirectionIsBackward(direction));
 
 	/* ----------------
 	 *	save the tuple and the buffer returned to us by the access methods
@@ -86,8 +83,7 @@ SeqNext(SeqScan *node)
 
 	slot = ExecStoreTuple(tuple,/* tuple to store */
 						  slot, /* slot to store in */
-						  buffer,		/* buffer associated with this
-										 * tuple */
+						  scandesc->rs_cbuf,/* buffer associated with this tuple */
 						  false);		/* don't pfree this pointer */
 
 	/* ----------------
@@ -364,8 +360,8 @@ ExecSeqReScan(SeqScan *node, ExprContext *exprCtxt, Plan *parent)
 	CommonScanState *scanstate;
 	EState	   *estate;
 	Plan	   *outerPlan;
-	Relation	rdesc;
-	HeapScanDesc sdesc;
+	Relation	rel;
+	HeapScanDesc scan;
 	ScanDirection direction;
 
 	scanstate = node->scanstate;
@@ -380,11 +376,11 @@ ExecSeqReScan(SeqScan *node, ExprContext *exprCtxt, Plan *parent)
 	else
 	{
 		/* otherwise, we are scanning a relation */
-		rdesc = scanstate->css_currentRelation;
-		sdesc = scanstate->css_currentScanDesc;
+		rel = scanstate->css_currentRelation;
+		scan = scanstate->css_currentScanDesc;
 		direction = estate->es_direction;
-		sdesc = ExecReScanR(rdesc, sdesc, direction, 0, NULL);
-		scanstate->css_currentScanDesc = sdesc;
+		scan = ExecReScanR(rel, scan, direction, 0, NULL);
+		scanstate->css_currentScanDesc = scan;
 	}
 }
 
@@ -399,7 +395,7 @@ ExecSeqMarkPos(SeqScan *node)
 {
 	CommonScanState *scanstate;
 	Plan	   *outerPlan;
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 
 	scanstate = node->scanstate;
 
@@ -421,8 +417,8 @@ ExecSeqMarkPos(SeqScan *node)
 	 *
 	 * ----------------
 	 */
-	sdesc = scanstate->css_currentScanDesc;
-	heap_markpos(sdesc);
+	scan = scanstate->css_currentScanDesc;
+	heap_markpos(scan);
 
 	return;
 }
@@ -438,7 +434,7 @@ ExecSeqRestrPos(SeqScan *node)
 {
 	CommonScanState *scanstate;
 	Plan	   *outerPlan;
-	HeapScanDesc sdesc;
+	HeapScanDesc scan;
 
 	scanstate = node->scanstate;
 
@@ -459,6 +455,6 @@ ExecSeqRestrPos(SeqScan *node)
 	 *	position using the access methods..
 	 * ----------------
 	 */
-	sdesc = scanstate->css_currentScanDesc;
-	heap_restrpos(sdesc);
+	scan = scanstate->css_currentScanDesc;
+	heap_restrpos(scan);
 }
diff --git a/src/backend/executor/nodeTee.c b/src/backend/executor/nodeTee.c
index c23c7d65d404e42e34d3424e5b0224adbb65fca4..c7a0a99a277e392f4687df778cf673cd7244110e 100644
--- a/src/backend/executor/nodeTee.c
+++ b/src/backend/executor/nodeTee.c
@@ -15,7 +15,7 @@
  *		ExecEndTee
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.20 1998/08/06 05:12:36 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.21 1998/08/19 02:02:06 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -303,7 +303,6 @@ ExecTee(Tee *node, Plan *parent)
 	HeapTuple	heapTuple;
 	Relation	bufferRel;
 	HeapScanDesc scanDesc;
-	Buffer		buffer;
 
 	estate = ((Plan *) node)->state;
 	teeState = node->teestate;
@@ -366,10 +365,7 @@ ExecTee(Tee *node, Plan *parent)
 				HeapTuple	throwAway;
 
 				/* Buffer buffer; */
-				throwAway = heap_getnext(scanDesc,
-										 ScanDirectionIsBackward(dir),
-				/* &buffer */
-										 (Buffer *) NULL);
+				throwAway = heap_getnext(scanDesc,ScanDirectionIsBackward(dir));
 			}
 
 			/*
@@ -393,9 +389,7 @@ ExecTee(Tee *node, Plan *parent)
 		scanDesc = (parent == node->leftParent) ?
 			teeState->tee_leftScanDesc : teeState->tee_rightScanDesc;
 
-		heapTuple = heap_getnext(scanDesc,
-								 ScanDirectionIsBackward(dir),
-								 &buffer);
+		heapTuple = heap_getnext(scanDesc, ScanDirectionIsBackward(dir));
 
 		/*
 		 * Increase the pin count on the buffer page, because the tuple
@@ -404,15 +398,15 @@ ExecTee(Tee *node, Plan *parent)
 		 * count on the next iteration.
 		 */
 
-		if (buffer != InvalidBuffer)
-			IncrBufferRefCount(buffer);
+		if (scanDesc->rs_cbuf != InvalidBuffer)
+			IncrBufferRefCount(scanDesc->rs_cbuf);
 
 		slot = teeState->cstate.cs_ResultTupleSlot;
 		slot->ttc_tupleDescriptor = RelationGetTupleDescriptor(bufferRel);
 
 		result = ExecStoreTuple(heapTuple,		/* tuple to store */
 								slot,	/* slot to store in */
-								buffer, /* this tuple's buffer */
+								scanDesc->rs_cbuf, /* this tuple's buffer */
 								false); /* don't free stuff from
 										 * heap_getnext */
 
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index 040baa7d42efacb58760e5db868e8730c542e254..e2e87d88e069aadfa07a6eb6a020444a346468d4 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -466,7 +466,7 @@ SPI_gettype(TupleDesc tupdesc, int fnumber)
 	}
 
 	typeTuple = SearchSysCacheTuple(TYPOID,
-				 ObjectIdGetDatum(tupdesc->attrs[fnumber - 1]->atttypid),
+					 ObjectIdGetDatum(tupdesc->attrs[fnumber - 1]->atttypid),
 									0, 0, 0);
 
 	if (!HeapTupleIsValid(typeTuple))
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index 82806bdbe90b5df906610f0d66b8a63db04994bb..05a639aec4a72bef93709e54dcc79eaabc6555ee 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.23 1998/07/22 05:48:59 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.24 1998/08/19 02:02:09 momjian Exp $
  *
  * NOTES
  *	  This should be moved to a more appropriate place.  It is here
@@ -182,7 +182,7 @@ lo_creat(int mode)
 		return InvalidOid;
 	}
 
-	lobjId = lobjDesc->heap_r->rd_id;
+	lobjId = RelationGetRelid(lobjDesc->heap_r);
 
 	inv_close(lobjDesc);
 
@@ -288,7 +288,7 @@ lo_import(text *filename)
 	 * the oid for the large object is just the oid of the relation
 	 * XInv??? which contains the data.
 	 */
-	lobjOid = lobj->heap_r->rd_id;
+	lobjOid = RelationGetRelid(lobj->heap_r);
 
 	/*
 	 * read in from the Unix file and write to the inversion file
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index f8fe91ed875abff1f3e7e1add009373385fb1253..00543dcdf16a2e93171a5105dc23f893d418835b 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.30 1998/08/16 05:37:04 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.31 1998/08/19 02:02:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1071,7 +1071,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
 	 * --Nels, Jan '93
 	 */
 	scan = heap_beginscan(relation, false, SnapshotNow, 2, entry);
-	tuple = heap_getnext(scan, false, (Buffer *) NULL);
+	tuple = heap_getnext(scan, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
 		elog(DEBUG, "clause_pred_clause_test: unknown pred_op");
@@ -1102,7 +1102,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
 						   ObjectIdGetDatum(clause_op));
 
 	scan = heap_beginscan(relation, false, SnapshotNow, 3, entry);
-	tuple = heap_getnext(scan, false, (Buffer *) NULL);
+	tuple = heap_getnext(scan, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
 		elog(DEBUG, "clause_pred_clause_test: unknown clause_op");
@@ -1134,7 +1134,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
 						   Int16GetDatum(test_strategy));
 
 	scan = heap_beginscan(relation, false, SnapshotNow, 3, entry);
-	tuple = heap_getnext(scan, false, (Buffer *) NULL);
+	tuple = heap_getnext(scan, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
 		elog(DEBUG, "clause_pred_clause_test: unknown test_op");
diff --git a/src/backend/optimizer/path/xfunc.c b/src/backend/optimizer/path/xfunc.c
index ecde942e9c35f399123e72d127e97fa01cfa8068..eb66a4f6e2eb6a1895e30175cd61cbcf880a4929 100644
--- a/src/backend/optimizer/path/xfunc.c
+++ b/src/backend/optimizer/path/xfunc.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.18 1998/08/10 02:26:25 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.19 1998/08/19 02:02:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -496,7 +496,9 @@ xfunc_func_expense(LispValue node, LispValue args)
 		funcid = get_funcid((Func) node);
 
 	/* look up tuple in cache */
-	tupl = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(funcid), 0, 0, 0);
+	tupl = SearchSysCacheTuple(PROOID,
+								ObjectIdGetDatum(funcid),
+								0, 0, 0);
 	if (!HeapTupleIsValid(tupl))
 		elog(ERROR, "Cache lookup failed for procedure %d", funcid);
 	proc = (Form_pg_proc) GETSTRUCT(tupl);
@@ -610,7 +612,7 @@ xfunc_width(LispValue clause)
 	{
 		/* base case: width is width of this attribute */
 		tupl = SearchSysCacheTuple(TYPOID,
-							  PointerGetDatum(get_vartype((Var) clause)),
+								  ObjectIdGetDatum(get_vartype((Var) clause)),
 								   0, 0, 0);
 		if (!HeapTupleIsValid(tupl))
 			elog(ERROR, "Cache lookup failed for type %d",
@@ -1307,7 +1309,9 @@ xfunc_func_width(RegProcedure funcid, LispValue args)
 
 	/* lookup function and find its return type */
 	Assert(RegProcedureIsValid(funcid));
-	tupl = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(funcid), 0, 0, 0);
+	tupl = SearchSysCacheTuple(PROOID,
+								ObjectIdGetDatum(funcid),
+								0, 0, 0);
 	if (!HeapTupleIsValid(tupl))
 		elog(ERROR, "Cache lookup failed for procedure %d", funcid);
 	proc = (Form_pg_proc) GETSTRUCT(tupl);
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index 3e2a3a6829ce68978ba55fab1eca8202e8769072..e46205523ccab42f057d980ea7271cff0ba3cd8e 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.18 1998/07/27 19:38:00 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.19 1998/08/19 02:02:16 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -65,7 +65,7 @@ relation_info(Query *root, Index relid,
 
 	relationObjectId = getrelid(relid, root->rtable);
 	relationTuple = SearchSysCacheTuple(RELOID,
-									  ObjectIdGetDatum(relationObjectId),
+										ObjectIdGetDatum(relationObjectId),
 										0, 0, 0);
 	if (HeapTupleIsValid(relationTuple))
 	{
@@ -153,7 +153,7 @@ index_info(Query *root, bool first, int relid, IdxInfoRetval *info)
 	}
 	if (!HeapScanIsValid(scan))
 		elog(ERROR, "index_info: scan not started");
-	indexTuple = heap_getnext(scan, 0, (Buffer *) NULL);
+	indexTuple = heap_getnext(scan, 0);
 	if (!HeapTupleIsValid(indexTuple))
 	{
 		heap_endscan(scan);
@@ -414,9 +414,7 @@ find_inheritance_children(Oid inhparent)
 	key[0].sk_argument = ObjectIdGetDatum((Oid) inhparent);
 	relation = heap_openr(InheritsRelationName);
 	scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
-	while (HeapTupleIsValid(inheritsTuple =
-							heap_getnext(scan, 0,
-										 (Buffer *) NULL)))
+	while (HeapTupleIsValid(inheritsTuple = heap_getnext(scan, 0)))
 	{
 		inhrelid = ((InheritsTupleForm) GETSTRUCT(inheritsTuple))->inhrel;
 		list = lappendi(list, inhrelid);
@@ -450,12 +448,8 @@ VersionGetParents(Oid verrelid)
 	relation = heap_openr(VersionRelationName);
 	key[0].sk_argument = ObjectIdGetDatum(verrelid);
 	scan = heap_beginscan(relation, 0, SnapshotNow, 1, key);
-	for (;;)
+	while (HeapTupleIsValid(versionTuple = heap_getnext(scan, 0)))
 	{
-		versionTuple = heap_getnext(scan, 0,
-									(Buffer *) NULL);
-		if (!HeapTupleIsValid(versionTuple))
-			break;
 		verbaseid = ((VersionTupleForm)
 					 GETSTRUCT(versionTuple))->verbaseid;
 
diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c
index 7c874f88454295bbd05b74340ffae0031dab0a8d..5d16d31341058b97445ffd41b4def018d77f7c54 100644
--- a/src/backend/parser/parse_agg.c
+++ b/src/backend/parser/parse_agg.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.11 1998/06/15 19:28:54 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.12 1998/08/19 02:02:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -230,7 +230,8 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype,
 	HeapTuple	theAggTuple;
 	bool		usenulls = false;
 
-	theAggTuple = SearchSysCacheTuple(AGGNAME, PointerGetDatum(aggname),
+	theAggTuple = SearchSysCacheTuple(AGGNAME,
+									  PointerGetDatum(aggname),
 									  ObjectIdGetDatum(basetype),
 									  0, 0);
 	if (!HeapTupleIsValid(theAggTuple))
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index ffdebccb26b2ae409bba8b134f3fdddb6b34d782..4b02a1f344f004cfc1c06b046d476f5bbcd1d682 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.24 1998/07/27 19:38:02 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.25 1998/08/19 02:02:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -488,7 +488,8 @@ funcid_get_rettype(Oid funcid)
 	HeapTuple	func_tuple = NULL;
 	Oid			funcrettype = (Oid) 0;
 
-	func_tuple = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(funcid),
+	func_tuple = SearchSysCacheTuple(PROOID,
+									 ObjectIdGetDatum(funcid),
 									 0, 0, 0);
 
 	if (!HeapTupleIsValid(func_tuple))
@@ -514,9 +515,7 @@ func_get_candidates(char *funcname, int nargs)
 	HeapTuple	tuple;
 	IndexScanDesc sd;
 	RetrieveIndexResult indexRes;
-	Buffer		buffer;
 	Form_pg_proc pgProcP;
-	bool		bufferUsed = FALSE;
 	CandidateList candidates = NULL;
 	CandidateList current_candidate;
 	int			i;
@@ -535,24 +534,19 @@ func_get_candidates(char *funcname, int nargs)
 	do
 	{
 		tuple = (HeapTuple) NULL;
-		if (bufferUsed)
-		{
-			ReleaseBuffer(buffer);
-			bufferUsed = FALSE;
-		}
 
 		indexRes = index_getnext(sd, ForwardScanDirection);
 		if (indexRes)
 		{
 			ItemPointer iptr;
-
+			Buffer		buffer;
+			
 			iptr = &indexRes->heap_iptr;
 			tuple = heap_fetch(heapRelation, SnapshotNow, iptr, &buffer);
 			pfree(indexRes);
 			if (HeapTupleIsValid(tuple))
 			{
 				pgProcP = (Form_pg_proc) GETSTRUCT(tuple);
-				bufferUsed = TRUE;
 				if (pgProcP->pronargs == nargs)
 				{
 					current_candidate = (CandidateList)
@@ -567,6 +561,7 @@ func_get_candidates(char *funcname, int nargs)
 					current_candidate->next = candidates;
 					candidates = current_candidate;
 				}
+				ReleaseBuffer(buffer);
 			}
 		}
 	} while (indexRes);
@@ -1000,7 +995,6 @@ find_inheritors(Oid relid, Oid **supervec)
 			   *elt;
 
 	Relation	rd;
-	Buffer		buf;
 	Datum		d;
 	bool		newrelid;
 	char		isNull;
@@ -1026,7 +1020,7 @@ find_inheritors(Oid relid, Oid **supervec)
 
 		inhscan = heap_beginscan(inhrel, 0, SnapshotNow, 1, &skey);
 
-		while (HeapTupleIsValid(inhtup = heap_getnext(inhscan, 0, &buf)))
+		while (HeapTupleIsValid(inhtup = heap_getnext(inhscan, 0)))
 		{
 			qentry = (SuperQE *) palloc(sizeof(SuperQE));
 
@@ -1036,8 +1030,6 @@ find_inheritors(Oid relid, Oid **supervec)
 
 			/* put this one on the queue */
 			DLAddTail(queue, DLNewElem(qentry));
-
-			ReleaseBuffer(buf);
 		}
 
 		heap_endscan(inhscan);
@@ -1311,7 +1303,7 @@ ParseComplexProjection(ParseState *pstate,
 					rd = heap_openr(typeidTypeName(argtype));
 					if (RelationIsValid(rd))
 					{
-						relid = RelationGetRelationId(rd);
+						relid = RelationGetRelid(rd);
 						heap_close(rd);
 					}
 					if (RelationIsValid(rd))
@@ -1369,7 +1361,7 @@ ParseComplexProjection(ParseState *pstate,
 					rd = heap_openr(typeidTypeName(argtype));
 					if (RelationIsValid(rd))
 					{
-						relid = RelationGetRelationId(rd);
+						relid = RelationGetRelid(rd);
 						heap_close(rd);
 					}
 					if (RelationIsValid(rd))
@@ -1406,7 +1398,7 @@ ParseComplexProjection(ParseState *pstate,
 				rd = heap_openr(typeidTypeName(param->paramtype));
 				if (RelationIsValid(rd))
 				{
-					relid = RelationGetRelationId(rd);
+					relid = RelationGetRelid(rd);
 					heap_close(rd);
 					if ((attnum = get_attnum(relid, funcname))
 						!= InvalidAttrNumber)
diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c
index 7c9f6940d6855ac261d7b180e454dcd3b9080c8c..44548398713c5ccb0c5e41e0a73f65d39a8e853f 100644
--- a/src/backend/parser/parse_node.c
+++ b/src/backend/parser/parse_node.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.18 1998/07/20 11:17:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.19 1998/08/19 02:02:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -284,7 +284,7 @@ make_array_ref(Node *expr,
 
 	/* get the type tuple for the element type */
 	type_tuple = SearchSysCacheTuple(TYPOID,
-							ObjectIdGetDatum(type_struct_array->typelem),
+								ObjectIdGetDatum(type_struct_array->typelem),
 									 0, 0, 0);
 	if (!HeapTupleIsValid(type_tuple))
 		elog(ERROR, "make_array_ref: Cache lookup failed for type %d\n",
@@ -365,7 +365,7 @@ make_array_set(Expr *target_expr,
 			 type_struct_array->typname);
 	/* get the type tuple for the element type */
 	type_tuple = SearchSysCacheTuple(TYPOID,
-							ObjectIdGetDatum(type_struct_array->typelem),
+								ObjectIdGetDatum(type_struct_array->typelem),
 									 0, 0, 0);
 
 	if (!HeapTupleIsValid(type_tuple))
diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c
index 42e18e4d37561b0fa1429f4c321cb915a774b40f..689f64a87d3d15a18e7f1344ee20a80e1c9fe431 100644
--- a/src/backend/parser/parse_oper.c
+++ b/src/backend/parser/parse_oper.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.14 1998/07/27 19:38:04 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.15 1998/08/19 02:02:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,6 @@ binary_oper_get_candidates(char *opname,
 	HeapScanDesc pg_operator_scan;
 	HeapTuple	tup;
 	OperatorTupleForm oper;
-	Buffer		buffer;
 	int			nkeys;
 	int			ncandidates = 0;
 	ScanKeyData opKey[3];
@@ -112,23 +111,18 @@ binary_oper_get_candidates(char *opname,
 									  nkeys,
 									  opKey);
 
-	do
+	while (HeapTupleIsValid(tup = heap_getnext(pg_operator_scan, 0)))
 	{
-		tup = heap_getnext(pg_operator_scan, 0, &buffer);
-		if (HeapTupleIsValid(tup))
-		{
-			current_candidate = (CandidateList) palloc(sizeof(struct _CandidateList));
-			current_candidate->args = (Oid *) palloc(2 * sizeof(Oid));
-
-			oper = (OperatorTupleForm) GETSTRUCT(tup);
-			current_candidate->args[0] = oper->oprleft;
-			current_candidate->args[1] = oper->oprright;
-			current_candidate->next = *candidates;
-			*candidates = current_candidate;
-			ncandidates++;
-			ReleaseBuffer(buffer);
-		}
-	} while (HeapTupleIsValid(tup));
+		current_candidate = (CandidateList) palloc(sizeof(struct _CandidateList));
+		current_candidate->args = (Oid *) palloc(2 * sizeof(Oid));
+
+		oper = (OperatorTupleForm) GETSTRUCT(tup);
+		current_candidate->args[0] = oper->oprleft;
+		current_candidate->args[1] = oper->oprright;
+		current_candidate->next = *candidates;
+		*candidates = current_candidate;
+		ncandidates++;
+	}
 
 	heap_endscan(pg_operator_scan);
 	heap_close(pg_operator_desc);
@@ -465,7 +459,7 @@ oper_exact(char *op, Oid arg1, Oid arg2, Node **ltree, Node **rtree, bool noWarn
 							  PointerGetDatum(op),
 							  ObjectIdGetDatum(arg1),
 							  ObjectIdGetDatum(arg2),
-							  Int8GetDatum('b'));
+							  CharGetDatum('b'));
 
 	/* Did not find anything? then try flipping arguments on a commutative operator... */
 	if (!HeapTupleIsValid(tup) && (arg1 != arg2))
@@ -474,7 +468,7 @@ oper_exact(char *op, Oid arg1, Oid arg2, Node **ltree, Node **rtree, bool noWarn
 								  PointerGetDatum(op),
 								  ObjectIdGetDatum(arg2),
 								  ObjectIdGetDatum(arg1),
-								  Int8GetDatum('b'));
+								  CharGetDatum('b'));
 
 		if (HeapTupleIsValid(tup))
 		{
@@ -545,7 +539,7 @@ oper_inexact(char *op, Oid arg1, Oid arg2, Node **ltree, Node **rtree, bool noWa
 								  PointerGetDatum(op),
 								  ObjectIdGetDatum(candidates->args[0]),
 								  ObjectIdGetDatum(candidates->args[1]),
-								  Int8GetDatum('b'));
+								  CharGetDatum('b'));
 		Assert(HeapTupleIsValid(tup));
 
 #if PARSEDEBUG
@@ -569,8 +563,7 @@ printf("oper_inexact: found candidate\n");
 									  PointerGetDatum(op),
 									  ObjectIdGetDatum(targetOids[0]),
 									  ObjectIdGetDatum(targetOids[1]),
-									  Int8GetDatum('b'));
-
+									  CharGetDatum('b'));
 		}
 		else
 			tup = NULL;
@@ -635,7 +628,6 @@ unary_oper_get_candidates(char *op,
 	HeapScanDesc pg_operator_scan;
 	HeapTuple	tup;
 	OperatorTupleForm oper;
-	Buffer		buffer;
 	int			ncandidates = 0;
 
 	static ScanKeyData opKey[2] = {
@@ -659,29 +651,24 @@ printf("unary_oper_get_candidates: start scan for '%s'\n", op);
 									  2,
 									  opKey);
 
-	do
+	while (HeapTupleIsValid(tup = heap_getnext(pg_operator_scan, 0)))
 	{
-		tup = heap_getnext(pg_operator_scan, 0, &buffer);
-		if (HeapTupleIsValid(tup))
-		{
-			current_candidate = (CandidateList) palloc(sizeof(struct _CandidateList));
-			current_candidate->args = (Oid *) palloc(sizeof(Oid));
+		current_candidate = (CandidateList) palloc(sizeof(struct _CandidateList));
+		current_candidate->args = (Oid *) palloc(sizeof(Oid));
 
-			oper = (OperatorTupleForm) GETSTRUCT(tup);
-			if (rightleft == 'r')
-				current_candidate->args[0] = oper->oprleft;
-			else
-				current_candidate->args[0] = oper->oprright;
-			current_candidate->next = *candidates;
-			*candidates = current_candidate;
+		oper = (OperatorTupleForm) GETSTRUCT(tup);
+		if (rightleft == 'r')
+			current_candidate->args[0] = oper->oprleft;
+		else
+			current_candidate->args[0] = oper->oprright;
+		current_candidate->next = *candidates;
+		*candidates = current_candidate;
 #ifdef PARSEDEBUG
 printf("unary_oper_get_candidates: found candidate '%s' for type %s\n",
  op, typeidTypeName(current_candidate->args[0]));
 #endif
-			ncandidates++;
-			ReleaseBuffer(buffer);
-		}
-	} while (HeapTupleIsValid(tup));
+		ncandidates++;
+	}
 
 	heap_endscan(pg_operator_scan);
 	heap_close(pg_operator_desc);
@@ -707,7 +694,7 @@ right_oper(char *op, Oid arg)
 							  PointerGetDatum(op),
 							  ObjectIdGetDatum(arg),
 							  ObjectIdGetDatum(InvalidOid),
-							  Int8GetDatum('r'));
+							  CharGetDatum('r'));
 
 	if (!HeapTupleIsValid(tup))
 	{
@@ -723,7 +710,7 @@ right_oper(char *op, Oid arg)
 									  PointerGetDatum(op),
 									  ObjectIdGetDatum(candidates->args[0]),
 									  ObjectIdGetDatum(InvalidOid),
-									  Int8GetDatum('r'));
+									  CharGetDatum('r'));
 			Assert(HeapTupleIsValid(tup));
 		}
 		else
@@ -736,7 +723,7 @@ right_oper(char *op, Oid arg)
 										  PointerGetDatum(op),
 										  ObjectIdGetDatum(InvalidOid),
 										  ObjectIdGetDatum(*targetOid),
-										  Int8GetDatum('r'));
+										  CharGetDatum('r'));
 			}
 			else
 				tup = NULL;
@@ -767,7 +754,7 @@ left_oper(char *op, Oid arg)
 							  PointerGetDatum(op),
 							  ObjectIdGetDatum(InvalidOid),
 							  ObjectIdGetDatum(arg),
-							  Int8GetDatum('l'));
+							  CharGetDatum('l'));
 
 	if (!HeapTupleIsValid(tup))
 	{
@@ -783,7 +770,7 @@ left_oper(char *op, Oid arg)
 									  PointerGetDatum(op),
 									  ObjectIdGetDatum(InvalidOid),
 									  ObjectIdGetDatum(candidates->args[0]),
-									  Int8GetDatum('l'));
+									  CharGetDatum('l'));
 			Assert(HeapTupleIsValid(tup));
 #ifdef PARSEDEBUG
 printf("left_oper: searched cache for single left oper candidate '%s %s'\n",
@@ -797,7 +784,7 @@ printf("left_oper: searched cache for single left oper candidate '%s %s'\n",
 									  PointerGetDatum(op),
 									  ObjectIdGetDatum(InvalidOid),
 									  ObjectIdGetDatum(*targetOid),
-									  Int8GetDatum('l'));
+									  CharGetDatum('l'));
 
 			if (!HeapTupleIsValid(tup))
 			{
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 181152bfa5b21e65a49e4e3645e54c05093cd8d2..e87476f14b28c3032b4fae7a303d647e09583367 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.13 1998/08/18 00:48:57 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.14 1998/08/19 02:02:25 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -208,7 +208,7 @@ addRangeTableEntry(ParseState *pstate,
 		elog(ERROR, "%s: %s",
 			 relname, aclcheck_error_strings[ACLCHECK_NO_CLASS]);
 
-	rte->relid = RelationGetRelationId(relation);
+	rte->relid = RelationGetRelid(relation);
 
 	heap_close(relation);
 
@@ -237,7 +237,7 @@ addRangeTableEntry(ParseState *pstate,
 List *
 expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
 {
-	Relation	rdesc;
+	Relation	rel;
 	List	   *te_tail = NIL,
 			   *te_head = NIL;
 	Var		   *varnode;
@@ -249,13 +249,13 @@ expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
 	if (rte == NULL)
 		rte = addRangeTableEntry(pstate, relname, refname, FALSE, FALSE);
 
-	rdesc = heap_open(rte->relid);
+	rel = heap_open(rte->relid);
 
-	if (rdesc == NULL)
+	if (rel == NULL)
 		elog(ERROR, "Unable to expand all -- heap_open failed on %s",
 			 rte->refname);
 
-	maxattrs = RelationGetNumberOfAttributes(rdesc);
+	maxattrs = RelationGetNumberOfAttributes(rel);
 
 	for (varattno = 0; varattno <= maxattrs - 1; varattno++)
 	{
@@ -263,7 +263,7 @@ expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
 		char	   *resname = NULL;
 		TargetEntry *te = makeNode(TargetEntry);
 
-		attrname = pstrdup((rdesc->rd_att->attrs[varattno]->attname).data);
+		attrname = pstrdup((rel->rd_att->attrs[varattno]->attname).data);
 		varnode = (Var *) make_var(pstate, rte->relid, refname, attrname);
 
 		handleTargetColname(pstate, &resname, refname, attrname);
@@ -289,7 +289,7 @@ expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
 			te_tail = lappend(te_tail, te);
 	}
 
-	heap_close(rdesc);
+	heap_close(rel);
 
 	return (te_head);
 }
@@ -343,7 +343,7 @@ attnameIsSet(Relation rd, char *name)
 			return (false);		/* no sys attr is a set */
 		}
 	}
-	return (get_attisset(rd->rd_id, name));
+	return (get_attisset(RelationGetRelid(rd), name));
 }
 
 /*
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index 58dd3a28b352421de9835c7b9a7efee257113b6f..a71df492799ce74d83af3a45e411462c3777a9d9 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.20 1998/08/05 04:49:11 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.21 1998/08/19 02:02:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -683,7 +683,7 @@ printf("MakeTargetlistExpr: attrtypmod is %d\n", (int4) attrtypmod);
 										   lowerIndexpr,
 										   (Expr *) expr);
 			attrtype = attnumTypeId(rd, resdomno);
-			attrtypmod = get_atttypmod(rd->rd_id, resdomno);
+			attrtypmod = get_atttypmod(RelationGetRelid(rd), resdomno);
 		}
 	}
 	else
diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c
index 6daf38db87eb2cb28147ff058c9a7a23ef9b9c9a..682b214eed1cfdcca504f8b07aa926d9a4d79310 100644
--- a/src/backend/parser/parse_type.c
+++ b/src/backend/parser/parse_type.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.13 1998/07/20 11:17:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.14 1998/08/19 02:02:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,7 +47,8 @@ typeidTypeName(Oid id)
 	HeapTuple	tup;
 	TypeTupleForm typetuple;
 
-	if (!(tup = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(id),
+	if (!(tup = SearchSysCacheTuple(TYPOID,
+									ObjectIdGetDatum(id),
 									0, 0, 0)))
 	{
 		elog(ERROR, "type id lookup of %u failed", id);
@@ -63,7 +64,8 @@ typeidType(Oid id)
 {
 	HeapTuple	tup;
 
-	if (!(tup = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(id),
+	if (!(tup = SearchSysCacheTuple(TYPOID,
+									ObjectIdGetDatum(id),
 									0, 0, 0)))
 	{
 		elog(ERROR, "type id lookup of %u failed", id);
@@ -81,7 +83,9 @@ typenameType(char *s)
 	if (s == NULL)
 		elog(ERROR, "type(): Null type");
 
-	if (!(tup = SearchSysCacheTuple(TYPNAME, PointerGetDatum(s), 0, 0, 0)))
+	if (!(tup = SearchSysCacheTuple(TYPNAME,
+									PointerGetDatum(s),
+									0, 0, 0)))
 		elog(ERROR, "type name lookup of %s failed", s);
 	return ((Type) tup);
 }
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c
index 3c1b6528605d11e33a84fbb26017c6d075b53779..4d8ecb8b1e96691536186e7d21ef5bdf01bee2bb 100644
--- a/src/backend/rewrite/rewriteDefine.c
+++ b/src/backend/rewrite/rewriteDefine.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.17 1998/08/18 00:48:58 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.18 1998/08/19 02:02:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -97,7 +97,7 @@ InsertRule(char *rulname,
 	eventrel = heap_openr(evobj);
 	if (eventrel == NULL)
 		elog(ERROR, "rules cannot be defined on relations not in schema");
-	eventrel_oid = RelationGetRelationId(eventrel);
+	eventrel_oid = RelationGetRelid(eventrel);
 
 	/*
 	 * if the slotname is null, we know that this is a multi-attr rule
@@ -201,7 +201,7 @@ DefineQueryRewrite(RuleStmt *stmt)
 	event_relation = heap_openr(event_obj->relname);
 	if (event_relation == NULL)
 		elog(ERROR, "virtual relations not supported yet");
-	ev_relid = RelationGetRelationId(event_relation);
+	ev_relid = RelationGetRelid(event_relation);
 
 	if (eslot_string == NULL)
 	{
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index e80fc4cf55eef4897f21a4ef51839b7bcc5efea6..68169cbf2d2dd85cc3e8ded109afc7b876481148 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.18 1998/08/18 00:48:59 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.19 1998/08/19 02:02:30 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1038,7 +1038,9 @@ CheckViewPerms(Relation view, List *rtable)
 	/*
 	 * get the usename of the view's owner
 	 */
-	utup = SearchSysCacheTuple(USESYSID, view->rd_rel->relowner, 0, 0, 0);
+	utup = SearchSysCacheTuple(USESYSID,
+								ObjectIdGetDatum(view->rd_rel->relowner),
+								0, 0, 0);
 	if (!HeapTupleIsValid(utup))
 	{
 		elog(ERROR, "cache lookup for userid %d failed",
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index 5464793eb3d97cfb6af18f798b9ac6938b0a8ea6..e9d3e791fb1a7f9de34a2ae98c62d91b23f24ccd 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.15 1998/07/27 19:38:08 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.16 1998/08/19 02:02:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -32,21 +32,23 @@
 char *
 RewriteGetRuleEventRel(char *rulename)
 {
-	HeapTuple	htp;
+	HeapTuple	htup;
 	Oid			eventrel;
 
-	htp = SearchSysCacheTuple(REWRITENAME, PointerGetDatum(rulename),
-							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	htup = SearchSysCacheTuple(REWRITENAME,
+								PointerGetDatum(rulename),
+							  	0, 0, 0);
+	if (!HeapTupleIsValid(htup))
 		elog(ERROR, "RewriteGetRuleEventRel: rule \"%s\" not found",
 			 rulename);
-	eventrel = ((Form_pg_rewrite) GETSTRUCT(htp))->ev_class;
-	htp = SearchSysCacheTuple(RELOID, PointerGetDatum(eventrel),
+	eventrel = ((Form_pg_rewrite) GETSTRUCT(htup))->ev_class;
+	htup = SearchSysCacheTuple(RELOID,
+							  PointerGetDatum(eventrel),
 							  0, 0, 0);
-	if (!HeapTupleIsValid(htp))
+	if (!HeapTupleIsValid(htup))
 		elog(ERROR, "RewriteGetRuleEventRel: class %d not found",
 			 eventrel);
-	return ((Form_pg_class) GETSTRUCT(htp))->relname.data;
+	return ((Form_pg_class) GETSTRUCT(htup))->relname.data;
 }
 
 /* ----------------------------------------------------------------
@@ -68,8 +70,6 @@ void
 RemoveRewriteRule(char *ruleName)
 {
 	Relation	RewriteRelation = NULL;
-	HeapScanDesc scanDesc = NULL;
-	ScanKeyData scanKeyData;
 	HeapTuple	tuple = NULL;
 	Oid			ruleId = (Oid) 0;
 	Oid			eventRelationOid = (Oid) NULL;
@@ -84,13 +84,9 @@ RemoveRewriteRule(char *ruleName)
 	/*
 	 * Scan the RuleRelation ('pg_rewrite') until we find a tuple
 	 */
-	ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_rewrite_rulename,
-						   F_NAMEEQ, NameGetDatum(ruleName));
-	scanDesc = heap_beginscan(RewriteRelation,
-							  0, SnapshotNow, 1, &scanKeyData);
-
-	tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL);
-
+	tuple = SearchSysCacheTupleCopy(REWRITENAME,
+									PointerGetDatum(ruleName),
+									0, 0, 0);
 	/*
 	 * complain if no rule with such name existed
 	 */
@@ -105,14 +101,14 @@ RemoveRewriteRule(char *ruleName)
 	 * relation's OID
 	 */
 	ruleId = tuple->t_oid;
-	eventRelationOidDatum =
-		heap_getattr(tuple,
-					 Anum_pg_rewrite_ev_class,
-					 RelationGetTupleDescriptor(RewriteRelation),
-					 &isNull);
+	eventRelationOidDatum =	heap_getattr(tuple,
+								 Anum_pg_rewrite_ev_class,
+								 RelationGetTupleDescriptor(RewriteRelation),
+								 &isNull);
 	if (isNull)
 	{
 		/* XXX strange!!! */
+		pfree(tuple);
 		elog(ERROR, "RemoveRewriteRule: null event target relation!");
 	}
 	eventRelationOid = DatumGetObjectId(eventRelationOidDatum);
@@ -128,9 +124,10 @@ RemoveRewriteRule(char *ruleName)
 	/*
 	 * Now delete the tuple...
 	 */
-	heap_delete(RewriteRelation, &(tuple->t_ctid));
+	heap_delete(RewriteRelation, &tuple->t_ctid);
+
+	pfree(tuple);
 	heap_close(RewriteRelation);
-	heap_endscan(scanDesc);
 }
 
 /*
@@ -163,20 +160,8 @@ RelationRemoveRules(Oid relid)
 	scanDesc = heap_beginscan(RewriteRelation,
 							  0, SnapshotNow, 1, &scanKeyData);
 
-	for (;;)
-	{
-		tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL);
-
-		if (!HeapTupleIsValid(tuple))
-		{
-			break;				/* we're done */
-		}
-
-		/*
-		 * delete the tuple...
-		 */
-		heap_delete(RewriteRelation, &(tuple->t_ctid));
-	}
+	while (HeapTupleIsValid(tuple = heap_getnext(scanDesc, 0)))
+		heap_delete(RewriteRelation, &tuple->t_ctid);
 
 	heap_endscan(scanDesc);
 	heap_close(RewriteRelation);
diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c
index f75c22302e7957b2f63f91c33e0b5e0dfe95ce82..dae10410809b4a29b76687c67ac7183f2dad3c0d 100644
--- a/src/backend/rewrite/rewriteSupport.c
+++ b/src/backend/rewrite/rewriteSupport.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.24 1998/07/27 19:38:09 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.25 1998/08/19 02:02:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,6 +22,7 @@
 #include "nodes/parsenodes.h"
 #include "nodes/pg_list.h"
 #include "storage/buf.h"		/* for InvalidBuffer */
+#include "storage/bufmgr.h"
 #include "utils/builtins.h"		/* for textout */
 #include "utils/catcache.h"		/* for CacheContext */
 #include "utils/mcxt.h"			/* MemoryContext stuff */
@@ -89,9 +90,7 @@ int
 IsDefinedRewriteRule(char *ruleName)
 {
 	Relation	RewriteRelation = NULL;
-	HeapScanDesc scanDesc = NULL;
-	ScanKeyData scanKey;
-	HeapTuple	tuple = NULL;
+	HeapTuple	tuple;
 
 
 	/*
@@ -99,21 +98,13 @@ IsDefinedRewriteRule(char *ruleName)
 	 */
 	RewriteRelation = heap_openr(RewriteRelationName);
 
-	/*
-	 * Scan the RuleRelation ('pg_rewrite') until we find a tuple
-	 */
-	ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_rewrite_rulename,
-					   F_NAMEEQ, PointerGetDatum(ruleName));
-	scanDesc = heap_beginscan(RewriteRelation,
-							  0, SnapshotNow, 1, &scanKey);
-
-	tuple = heap_getnext(scanDesc, 0, (Buffer *) NULL);
-
+	tuple = SearchSysCacheTuple(REWRITENAME,
+								 PointerGetDatum(ruleName),
+								 0, 0, 0);
 	/*
 	 * return whether or not the rewrite rule existed
 	 */
 	heap_close(RewriteRelation);
-	heap_endscan(scanDesc);
 	return (HeapTupleIsValid(tuple));
 }
 
@@ -122,40 +113,28 @@ setRelhasrulesInRelation(Oid relationId, bool relhasrules)
 {
 	Relation	relationRelation;
 	HeapTuple	tuple;
-	HeapTuple	newTuple;
 	Relation	idescs[Num_pg_class_indices];
-	Form_pg_class relp;
 
 	/*
 	 * Lock a relation given its Oid. Go to the RelationRelation (i.e.
 	 * pg_relation), find the appropriate tuple, and add the specified
 	 * lock to it.
 	 */
-	relationRelation = heap_openr(RelationRelationName);
-	tuple = ClassOidIndexScan(relationRelation, relationId);
-
-	/*
-	 * Create a new tuple (i.e. a copy of the old tuple with its rule lock
-	 * field changed and replace the old tuple in the RelationRelation
-	 * NOTE: XXX ??? do we really need to make that copy ????
-	 */
-	newTuple = heap_copytuple(tuple);
+	tuple = SearchSysCacheTupleCopy(RELOID,
+									 ObjectIdGetDatum(relationId),
+									 0, 0, 0);
+	Assert(HeapTupleIsValid(tuple));
 
-	relp = (Form_pg_class) GETSTRUCT(newTuple);
-	relp->relhasrules = relhasrules;
-
-	heap_replace(relationRelation, &(tuple->t_ctid), newTuple);
+	relationRelation = heap_openr(RelationRelationName);
+	((Form_pg_class)GETSTRUCT(tuple))->relhasrules = relhasrules;
+	heap_replace(relationRelation, &tuple->t_ctid, tuple);
 
 	/* keep the catalog indices up to date */
 	CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs);
-	CatalogIndexInsert(idescs, Num_pg_class_indices, relationRelation,
-					   newTuple);
+	CatalogIndexInsert(idescs, Num_pg_class_indices, relationRelation, tuple);
 	CatalogCloseIndices(Num_pg_class_indices, idescs);
 
-	/* be tidy */
 	pfree(tuple);
-	pfree(newTuple);
-
 	heap_close(relationRelation);
 }
 
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index cffe640e2c3201bc4bb75b19c84b92920152e47d..77efdf3538aec0044540bb09afa13de65ac69776 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.40 1998/08/01 15:26:12 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.41 1998/08/19 02:02:35 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -100,7 +100,7 @@ static void BufferSync(void);
 static int	BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld);
 
 /* not static but used by vacuum only ... */
-int			BlowawayRelationBuffers(Relation rdesc, BlockNumber block);
+int			BlowawayRelationBuffers(Relation rel, BlockNumber block);
 
 /* ---------------------------------------------------
  * RelationGetBufferWithBuffer
@@ -135,7 +135,7 @@ RelationGetBufferWithBuffer(Relation relation,
 		else
 		{
 			bufHdr = &LocalBufferDescriptors[-buffer - 1];
-			if (bufHdr->tag.relId.relId == relation->rd_id &&
+			if (bufHdr->tag.relId.relId == RelationGetRelid(relation) &&
 				bufHdr->tag.blockNum == blockNumber)
 				return (buffer);
 		}
@@ -416,7 +416,7 @@ BufferAlloc(Relation reln,
 			}
 		}
 #ifdef BMTRACE
-		_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), reln->rd_id, blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCFND);
+		_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCFND);
 #endif							/* BMTRACE */
 
 		SpinRelease(BufMgrLock);
@@ -660,7 +660,7 @@ BufferAlloc(Relation reln,
 	}
 
 #ifdef BMTRACE
-	_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), reln->rd_id, blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCNOTFND);
+	_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCNOTFND);
 #endif							/* BMTRACE */
 
 	SpinRelease(BufMgrLock);
@@ -1389,19 +1389,19 @@ RelationGetNumberOfBlocks(Relation relation)
  * --------------------------------------------------------------------
  */
 void
-ReleaseRelationBuffers(Relation rdesc)
+ReleaseRelationBuffers(Relation rel)
 {
 	int			i;
 	int			holding = 0;
 	BufferDesc *buf;
 
-	if (rdesc->rd_islocal)
+	if (rel->rd_islocal)
 	{
 		for (i = 0; i < NLocBuffer; i++)
 		{
 			buf = &LocalBufferDescriptors[i];
 			if ((buf->flags & BM_DIRTY) &&
-				(buf->tag.relId.relId == rdesc->rd_id))
+				(buf->tag.relId.relId == RelationGetRelid(rel)))
 				buf->flags &= ~BM_DIRTY;
 		}
 		return;
@@ -1417,7 +1417,7 @@ ReleaseRelationBuffers(Relation rdesc)
 		}
 		if ((buf->flags & BM_DIRTY) &&
 			(buf->tag.relId.dbId == MyDatabaseId) &&
-			(buf->tag.relId.relId == rdesc->rd_id))
+			(buf->tag.relId.relId == RelationGetRelid(rel)))
 		{
 			buf->flags &= ~BM_DIRTY;
 			if (!(buf->flags & BM_FREE))
@@ -1559,29 +1559,29 @@ BufferPoolBlowaway()
  * --------------------------------------------------------------------
  */
 int
-BlowawayRelationBuffers(Relation rdesc, BlockNumber block)
+BlowawayRelationBuffers(Relation rel, BlockNumber block)
 {
 	int			i;
 	BufferDesc *buf;
 
-	if (rdesc->rd_islocal)
+	if (rel->rd_islocal)
 	{
 		for (i = 0; i < NLocBuffer; i++)
 		{
 			buf = &LocalBufferDescriptors[i];
-			if (buf->tag.relId.relId == rdesc->rd_id &&
+			if (buf->tag.relId.relId == RelationGetRelid(rel) &&
 				buf->tag.blockNum >= block)
 			{
 				if (buf->flags & BM_DIRTY)
 				{
 					elog(NOTICE, "BlowawayRelationBuffers(%s (local), %u): block %u is dirty",
-						 rdesc->rd_rel->relname.data, block, buf->tag.blockNum);
+						 rel->rd_rel->relname.data, block, buf->tag.blockNum);
 					return (-1);
 				}
 				if (LocalRefCount[i] > 0)
 				{
 					elog(NOTICE, "BlowawayRelationBuffers(%s (local), %u): block %u is referenced (%d)",
-						 rdesc->rd_rel->relname.data, block,
+						 rel->rd_rel->relname.data, block,
 						 buf->tag.blockNum, LocalRefCount[i]);
 					return (-2);
 				}
@@ -1596,7 +1596,7 @@ BlowawayRelationBuffers(Relation rdesc, BlockNumber block)
 	{
 		buf = &BufferDescriptors[i];
 		if (buf->tag.relId.dbId == MyDatabaseId &&
-			buf->tag.relId.relId == rdesc->rd_id &&
+			buf->tag.relId.relId == RelationGetRelid(rel) &&
 			buf->tag.blockNum >= block)
 		{
 			if (buf->flags & BM_DIRTY)
diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c
index 3d05dc4b8558630f0c359be95728df9a9bc6f7ef..e08450da854643d849f908a814f0775c05104fff 100644
--- a/src/backend/storage/buffer/localbuf.c
+++ b/src/backend/storage/buffer/localbuf.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.18 1998/02/26 04:35:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.19 1998/08/19 02:02:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -76,13 +76,13 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
 	/* a low tech search for now -- not optimized for scans */
 	for (i = 0; i < NLocBuffer; i++)
 	{
-		if (LocalBufferDescriptors[i].tag.relId.relId == reln->rd_id &&
+		if (LocalBufferDescriptors[i].tag.relId.relId == RelationGetRelid(reln) &&
 			LocalBufferDescriptors[i].tag.blockNum == blockNum)
 		{
 
 #ifdef LBDEBUG
 			fprintf(stderr, "LB ALLOC (%d,%d) %d\n",
-					reln->rd_id, blockNum, -i - 1);
+					RelationGetRelid(reln), blockNum, -i - 1);
 #endif
 			LocalRefCount[i]++;
 			*foundPtr = TRUE;
@@ -92,7 +92,7 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
 
 #ifdef LBDEBUG
 	fprintf(stderr, "LB ALLOC (%d,%d) %d\n",
-			reln->rd_id, blockNum, -nextFreeLocalBuf - 1);
+			RelationGetRelid(reln), blockNum, -nextFreeLocalBuf - 1);
 #endif
 
 	/* need to get a new buffer (round robin for now) */
@@ -132,7 +132,7 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
 	/*
 	 * it's all ours now.
 	 */
-	bufHdr->tag.relId.relId = reln->rd_id;
+	bufHdr->tag.relId.relId = RelationGetRelid(reln);
 	bufHdr->tag.blockNum = blockNum;
 	bufHdr->flags &= ~BM_DIRTY;
 
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index f06bb5968a13d324081d99cd3922acb0b761e2a8..28856f518456fae20469612d3cec4f7f179cdc72 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.33 1998/08/06 05:12:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.34 1998/08/19 02:02:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -81,12 +81,12 @@
 static HeapTuple
 inv_newtuple(LargeObjectDesc *obj_desc, Buffer buffer,
 			 Page page, char *dbuf, int nwrite);
-static HeapTuple inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP);
+static HeapTuple inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *buffer);
 static int	inv_wrnew(LargeObjectDesc *obj_desc, char *buf, int nbytes);
 static int
 inv_wrold(LargeObjectDesc *obj_desc, char *dbuf, int nbytes,
-		  HeapTuple htup, Buffer buffer);
-static void inv_indextup(LargeObjectDesc *obj_desc, HeapTuple htup);
+		  HeapTuple tuple, Buffer buffer);
+static void inv_indextup(LargeObjectDesc *obj_desc, HeapTuple tuple);
 static int	_inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln);
 
 /*
@@ -122,14 +122,16 @@ inv_create(int flags)
 	sprintf(objname, "xinv%d", file_oid);
 	sprintf(indname, "xinx%d", file_oid);
 
-	if (SearchSysCacheTuple(RELNAME, PointerGetDatum(objname),
+	if (SearchSysCacheTuple(RELNAME,
+							PointerGetDatum(objname),
 							0, 0, 0) != NULL)
 	{
 		elog(ERROR,
 		  "internal error: %s already exists -- cannot create large obj",
 			 objname);
 	}
-	if (SearchSysCacheTuple(RELNAME, PointerGetDatum(indname),
+	if (SearchSysCacheTuple(RELNAME,
+							PointerGetDatum(indname),
 							0, 0, 0) != NULL)
 	{
 		elog(ERROR,
@@ -331,7 +333,7 @@ inv_stat(LargeObjectDesc *obj_desc, struct pgstat * stbuf)
 		obj_desc->flags |= IFS_RDLOCK;
 	}
 
-	stbuf->st_ino = obj_desc->heap_r->rd_id;
+	stbuf->st_ino = RelationGetRelid(obj_desc->heap_r);
 #if 1
 	stbuf->st_mode = (S_IFREG | 0666);	/* IFREG|rw-rw-rw- */
 #else
@@ -439,8 +441,7 @@ inv_tell(LargeObjectDesc *obj_desc)
 int
 inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 {
-	HeapTuple	htup;
-	Buffer		b;
+	HeapTuple	tuple;
 	int			nread;
 	int			off;
 	int			ncopy;
@@ -467,18 +468,21 @@ inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 	/* fetch a block at a time */
 	while (nread < nbytes)
 	{
-
+		Buffer buffer;
+		
 		/* fetch an inversion file system block */
-		htup = inv_fetchtup(obj_desc, &b);
+		tuple = inv_fetchtup(obj_desc, &buffer);
 
-		if (!HeapTupleIsValid(htup))
+		if (!HeapTupleIsValid(tuple))
 		{
 			obj_desc->flags |= IFS_ATEOF;
 			break;
 		}
 
 		/* copy the data from this block into the buffer */
-		d = heap_getattr(htup, 2, obj_desc->hdesc, &isNull);
+		d = heap_getattr(tuple, 2, obj_desc->hdesc, &isNull);
+		ReleaseBuffer(buffer);
+		
 		fsblock = (struct varlena *) DatumGetPointer(d);
 
 		off = obj_desc->offset - obj_desc->lowbyte;
@@ -487,9 +491,6 @@ inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 			ncopy = (nbytes - nread);
 		memmove(buf, &(fsblock->vl_dat[off]), ncopy);
 
-		/* be a good citizen */
-		ReleaseBuffer(b);
-
 		/* move pointers past the amount we just read */
 		buf += ncopy;
 		nread += ncopy;
@@ -503,8 +504,7 @@ inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 int
 inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 {
-	HeapTuple	htup;
-	Buffer		b;
+	HeapTuple	tuple;
 	int			nwritten;
 	int			tuplen;
 
@@ -527,7 +527,8 @@ inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 	/* write a block at a time */
 	while (nwritten < nbytes)
 	{
-
+		Buffer buffer;
+		
 		/*
 		 * Fetch the current inversion file system block.  If the class
 		 * storing the inversion file is empty, we don't want to do an
@@ -537,21 +538,22 @@ inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes)
 
 		if ((obj_desc->flags & IFS_ATEOF)
 			|| obj_desc->heap_r->rd_nblocks == 0)
-			htup = (HeapTuple) NULL;
+			tuple = (HeapTuple) NULL;
 		else
-			htup = inv_fetchtup(obj_desc, &b);
+			tuple = inv_fetchtup(obj_desc, &buffer);
 
 		/* either append or replace a block, as required */
-		if (!HeapTupleIsValid(htup))
+		if (!HeapTupleIsValid(tuple))
 			tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
 		else
 		{
 			if (obj_desc->offset > obj_desc->highbyte)
 				tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
 			else
-				tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, htup, b);
+				tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, tuple, buffer);
 		}
-
+		ReleaseBuffer(buffer);
+		
 		/* move pointers past the amount we just wrote */
 		buf += tuplen;
 		nwritten += tuplen;
@@ -602,9 +604,9 @@ inv_cleanindex(LargeObjectDesc *obj_desc)
  *				such tuple exists.
  */
 static HeapTuple
-inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
+inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *buffer)
 {
-	HeapTuple	htup;
+	HeapTuple	tuple;
 	RetrieveIndexResult res;
 	Datum		d;
 	int			firstbyte,
@@ -642,8 +644,11 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
 								&skey);
 		}
 
+		res = NULL;
 		do
 		{
+			if (res)
+				pfree(res);
 			res = index_getnext(obj_desc->iscan, ForwardScanDirection);
 
 			if (res == (RetrieveIndexResult) NULL)
@@ -662,10 +667,9 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
 			 * 
 			 */
 
-			htup = heap_fetch(obj_desc->heap_r, SnapshotNow,
-							  &(res->heap_iptr), bufP);
-
-		} while (htup == (HeapTuple) NULL);
+			tuple = heap_fetch(obj_desc->heap_r, SnapshotNow,
+							  &(res->heap_iptr), buffer);
+		} while (tuple == (HeapTuple) NULL);
 
 		/* remember this tid -- we may need it for later reads/writes */
 		ItemPointerCopy(&(res->heap_iptr), &(obj_desc->htid));
@@ -673,8 +677,8 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
 	}
 	else
 	{
-		htup = heap_fetch(obj_desc->heap_r, SnapshotNow,
-						  &(obj_desc->htid), bufP);
+		tuple = heap_fetch(obj_desc->heap_r, SnapshotNow,
+						  &(obj_desc->htid), buffer);
 	}
 
 	/*
@@ -683,9 +687,9 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
 	 * return the tuple.
 	 */
 
-	d = heap_getattr(htup, 1, obj_desc->hdesc, &isNull);
+	d = heap_getattr(tuple, 1, obj_desc->hdesc, &isNull);
 	lastbyte = (int32) DatumGetInt32(d);
-	d = heap_getattr(htup, 2, obj_desc->hdesc, &isNull);
+	d = heap_getattr(tuple, 2, obj_desc->hdesc, &isNull);
 	fsblock = (struct varlena *) DatumGetPointer(d);
 
 	/*
@@ -697,8 +701,7 @@ inv_fetchtup(LargeObjectDesc *obj_desc, Buffer *bufP)
 	obj_desc->lowbyte = firstbyte;
 	obj_desc->highbyte = lastbyte;
 
-	/* done */
-	return (htup);
+	return tuple;
 }
 
 /*
@@ -798,7 +801,7 @@ static int
 inv_wrold(LargeObjectDesc *obj_desc,
 		  char *dbuf,
 		  int nbytes,
-		  HeapTuple htup,
+		  HeapTuple tuple,
 		  Buffer buffer)
 {
 	Relation	hr;
@@ -814,6 +817,7 @@ inv_wrold(LargeObjectDesc *obj_desc,
 				freespc;
 	bool		isNull;
 	int			keep_offset;
+	RetrieveIndexResult res;
 
 	/*
 	 * Since we're using a no-overwrite storage manager, the way we
@@ -822,9 +826,9 @@ inv_wrold(LargeObjectDesc *obj_desc,
 	 * abstraction.
 	 */
 
-	TransactionIdStore(GetCurrentTransactionId(), &(htup->t_xmax));
-	htup->t_cmax = GetCurrentCommandId();
-	htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
+	TransactionIdStore(GetCurrentTransactionId(), &(tuple->t_xmax));
+	tuple->t_cmax = GetCurrentCommandId();
+	tuple->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
 
 	/*
 	 * If we're overwriting the entire block, we're lucky.	All we need to
@@ -851,7 +855,7 @@ inv_wrold(LargeObjectDesc *obj_desc,
 	newpage = BufferGetPage(newbuf);
 	hr = obj_desc->heap_r;
 	freespc = IFREESPC(page);
-	d = heap_getattr(htup, 2, obj_desc->hdesc, &isNull);
+	d = heap_getattr(tuple, 2, obj_desc->hdesc, &isNull);
 	fsblock = (struct varlena *) DatumGetPointer(d);
 	tupbytes = fsblock->vl_len - sizeof(fsblock->vl_len);
 
@@ -956,8 +960,12 @@ inv_wrold(LargeObjectDesc *obj_desc,
 	 * move the scandesc forward so we don't reread the newly inserted
 	 * tuple on the next index scan
 	 */
+	res = NULL;
 	if (obj_desc->iscan)
-		index_getnext(obj_desc->iscan, ForwardScanDirection);
+		res = index_getnext(obj_desc->iscan, ForwardScanDirection);
+
+	if (res)
+		pfree(res);
 
 	/*
 	 * Okay, by here, a tuple for the new block is correctly placed,
@@ -1038,7 +1046,7 @@ inv_newtuple(LargeObjectDesc *obj_desc,
 	 */
 
 	ntup->t_len = tupsize;
-	ItemPointerSet(&(ntup->t_ctid), BufferGetBlockNumber(buffer), off);
+	ItemPointerSet(&ntup->t_ctid, BufferGetBlockNumber(buffer), off);
 	LastOidProcessed = ntup->t_oid = newoid();
 	TransactionIdStore(GetCurrentTransactionId(), &(ntup->t_xmin));
 	ntup->t_cmin = GetCurrentCommandId();
@@ -1091,7 +1099,7 @@ inv_newtuple(LargeObjectDesc *obj_desc,
 }
 
 static void
-inv_indextup(LargeObjectDesc *obj_desc, HeapTuple htup)
+inv_indextup(LargeObjectDesc *obj_desc, HeapTuple tuple)
 {
 	InsertIndexResult res;
 	Datum		v[1];
@@ -1100,7 +1108,7 @@ inv_indextup(LargeObjectDesc *obj_desc, HeapTuple htup)
 	n[0] = ' ';
 	v[0] = Int32GetDatum(obj_desc->highbyte);
 	res = index_insert(obj_desc->index_r, &v[0], &n[0],
-					   &(htup->t_ctid), obj_desc->heap_r);
+					   &(tuple->t_ctid), obj_desc->heap_r);
 
 	if (res)
 		pfree(res);
@@ -1203,17 +1211,15 @@ _inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln)
 {
 	IndexScanDesc iscan;
 	RetrieveIndexResult res;
-	Buffer		buf;
-	HeapTuple	htup;
+	HeapTuple	tuple;
 	Datum		d;
 	long		size;
 	bool		isNull;
-
+	Buffer		buffer;
+	
 	/* scan backwards from end */
 	iscan = index_beginscan(ireln, (bool) 1, 0, (ScanKey) NULL);
 
-	buf = InvalidBuffer;
-
 	do
 	{
 		res = index_getnext(iscan, BackwardScanDirection);
@@ -1235,25 +1241,18 @@ _inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln)
 		 * rather that NowTimeQual.  We currently have no way to pass a
 		 * time qual in.
 		 */
-
-		if (buf != InvalidBuffer)
-			ReleaseBuffer(buf);
-
-		htup = heap_fetch(hreln, SnapshotNow, &(res->heap_iptr), &buf);
+		tuple = heap_fetch(hreln, SnapshotNow, &res->heap_iptr, &buffer);
 		pfree(res);
-
-	} while (!HeapTupleIsValid(htup));
+	} while (!HeapTupleIsValid(tuple));
 
 	/* don't need the index scan anymore */
 	index_endscan(iscan);
 	pfree(iscan);
 
 	/* get olastbyte attribute */
-	d = heap_getattr(htup, 1, hdesc, &isNull);
+	d = heap_getattr(tuple, 1, hdesc, &isNull);
 	size = DatumGetInt32(d) + 1;
-
-	/* wei hates it if you forget to do this */
-	ReleaseBuffer(buf);
-
+	ReleaseBuffer(buffer);
+	
 	return (size);
 }
diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c
index cebbce364cc60d46bcf7517e62c0b707edafdd69..bcdc57d54fcb2e2d88758a2f65b278b169f2828c 100644
--- a/src/backend/storage/lmgr/lmgr.c
+++ b/src/backend/storage/lmgr/lmgr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.16 1998/08/01 15:26:24 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.17 1998/08/19 02:02:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -67,7 +67,7 @@ RelationInitLockInfo(Relation relation)
 	extern GlobalMemory	CacheCxt;
 
 	Assert(RelationIsValid(relation));
-	Assert(OidIsValid(RelationGetRelationId(relation)));
+	Assert(OidIsValid(RelationGetRelid(relation)));
 
 	info = (LockInfo) relation->lockInfo;
 	
@@ -80,7 +80,7 @@ RelationInitLockInfo(Relation relation)
 	info = (LockInfo) palloc(sizeof(LockInfoData));
 	MemoryContextSwitchTo(oldcxt);
 
-	info->lockRelId.relId = RelationGetRelationId(relation);
+	info->lockRelId.relId = RelationGetRelid(relation);
 	if (IsSharedSystemRelationName(relname))
 		info->lockRelId.dbId = InvalidOid;
 	else
diff --git a/src/backend/storage/lmgr/multi.c b/src/backend/storage/lmgr/multi.c
index 606ee4f560b321084d3bdd5d1e005d13de3fac3a..0998389ffe91ec373a01760c722c3b68fb9f493b 100644
--- a/src/backend/storage/lmgr/multi.c
+++ b/src/backend/storage/lmgr/multi.c
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.21 1998/08/01 15:26:26 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.22 1998/08/19 02:02:44 momjian Exp $
  *
  * NOTES:
  *	 (1) The lock.c module assumes that the caller here is doing
@@ -248,7 +248,7 @@ MultiAcquire(LOCKMETHOD lockmethod,
 			 LOCKMODE lockmode,
 			 PG_LOCK_LEVEL level)
 {
-	LOCKMODE		locks[N_LEVELS];
+	LOCKMODE	locks[N_LEVELS];
 	int			i,
 				status;
 	LOCKTAG		xxTag,
diff --git a/src/backend/storage/smgr/mm.c b/src/backend/storage/smgr/mm.c
index 8c8d229cb27e24ca9e4481829927fa3f385814d5..2f5b57a45167ed19181551cdd8bce7bf76620989 100644
--- a/src/backend/storage/smgr/mm.c
+++ b/src/backend/storage/smgr/mm.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.9 1998/06/23 15:35:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.10 1998/08/19 02:02:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -181,7 +181,7 @@ mmcreate(Relation reln)
 
 	(*MMCurRelno)++;
 
-	tag.mmrt_relid = reln->rd_id;
+	tag.mmrt_relid = RelationGetRelid(reln);
 	if (reln->rd_rel->relisshared)
 		tag.mmrt_dbid = (Oid) 0;
 	else
@@ -233,7 +233,7 @@ mmunlink(Relation reln)
 	for (i = 0; i < MMNBUFFERS; i++)
 	{
 		if (MMBlockTags[i].mmct_dbid == reldbid
-			&& MMBlockTags[i].mmct_relid == reln->rd_id)
+			&& MMBlockTags[i].mmct_relid == RelationGetRelid(reln))
 		{
 			entry = (MMHashEntry *) hash_search(MMCacheHT,
 												(char *) &MMBlockTags[i],
@@ -249,7 +249,7 @@ mmunlink(Relation reln)
 		}
 	}
 	rtag.mmrt_dbid = reldbid;
-	rtag.mmrt_relid = reln->rd_id;
+	rtag.mmrt_relid = RelationGetRelid(reln);
 
 	rentry = (MMRelHashEntry *) hash_search(MMRelCacheHT, (char *) &rtag,
 											HASH_REMOVE, &found);
@@ -290,7 +290,7 @@ mmextend(Relation reln, char *buffer)
 		reldbid = MyDatabaseId;
 
 	tag.mmct_dbid = rtag.mmrt_dbid = reldbid;
-	tag.mmct_relid = rtag.mmrt_relid = reln->rd_id;
+	tag.mmct_relid = rtag.mmrt_relid = RelationGetRelid(reln);
 
 	SpinAcquire(MMCacheLock);
 
@@ -334,7 +334,7 @@ mmextend(Relation reln, char *buffer)
 
 	entry->mmhe_bufno = i;
 	MMBlockTags[i].mmct_dbid = reldbid;
-	MMBlockTags[i].mmct_relid = reln->rd_id;
+	MMBlockTags[i].mmct_relid = RelationGetRelid(reln);
 	MMBlockTags[i].mmct_blkno = rentry->mmrhe_nblocks;
 
 	/* page numbers are zero-based, so we increment this at the end */
@@ -389,7 +389,7 @@ mmread(Relation reln, BlockNumber blocknum, char *buffer)
 	else
 		tag.mmct_dbid = MyDatabaseId;
 
-	tag.mmct_relid = reln->rd_id;
+	tag.mmct_relid = RelationGetRelid(reln);
 	tag.mmct_blkno = blocknum;
 
 	SpinAcquire(MMCacheLock);
@@ -436,7 +436,7 @@ mmwrite(Relation reln, BlockNumber blocknum, char *buffer)
 	else
 		tag.mmct_dbid = MyDatabaseId;
 
-	tag.mmct_relid = reln->rd_id;
+	tag.mmct_relid = RelationGetRelid(reln);
 	tag.mmct_blkno = blocknum;
 
 	SpinAcquire(MMCacheLock);
@@ -509,7 +509,7 @@ mmnblocks(Relation reln)
 	else
 		rtag.mmrt_dbid = MyDatabaseId;
 
-	rtag.mmrt_relid = reln->rd_id;
+	rtag.mmrt_relid = RelationGetRelid(reln);
 
 	SpinAcquire(MMCacheLock);
 
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index 3110c9afdd4e89270334a0b280999a6fed3343bb..adcdd063d16d8f93a293c8f1a65693b132767bdc 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.18 1998/06/15 19:29:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.19 1998/08/19 02:02:48 momjian Exp $
  *
  * NOTES
  *	  This cruft is the server side of PQfn.
@@ -204,7 +204,8 @@ update_fp_info(Oid func_id, struct fp_info * fip)
 	MemSet((char *) fip, 0, (int) sizeof(struct fp_info));
 	fip->funcid = InvalidOid;
 
-	func_htp = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(func_id),
+	func_htp = SearchSysCacheTuple(PROOID,
+								   ObjectIdGetDatum(func_id),
 								   0, 0, 0);
 	if (!HeapTupleIsValid(func_htp))
 	{
@@ -236,7 +237,8 @@ update_fp_info(Oid func_id, struct fp_info * fip)
 
 	if (OidIsValid(rettype))
 	{
-		type_htp = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(rettype),
+		type_htp = SearchSysCacheTuple(TYPOID,
+									   ObjectIdGetDatum(rettype),
 									   0, 0, 0);
 		if (!HeapTupleIsValid(type_htp))
 		{
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index f8bfa0ff0dde7249d9e413be4728e3876a1d2aa2..9d2f4df3e3ca38c81eff28e0f5502fc179222acf 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -4,7 +4,7 @@
 #    Makefile for utils/adt
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.15 1998/07/26 04:30:52 scrappy Exp $
+#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.16 1998/08/19 02:02:52 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -21,7 +21,7 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \
 	date.o datetime.o datum.o dt.o filename.o float.o \
 	geo_ops.o geo_selfuncs.o int.o int8.o like.o \
 	misc.o nabstime.o name.o not_in.o numutils.o \
-	oid.o oidname.o oidint2.o oidint4.o oracle_compat.o \
+	oid.o oracle_compat.o \
 	regexp.o regproc.o selfuncs.o sets.o tid.o timestamp.o \
 	varchar.o varlena.o version.o
 
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index f212dfcdd7031710f1641ba5040d0e4c3f86e380..aa0f1014692ecc332007e62a810526912345e5a6 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.28 1998/06/15 19:29:31 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.29 1998/08/19 02:02:53 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,7 @@ getid(char *s, char *n)
 static char *
 aclparse(char *s, AclItem *aip, unsigned *modechg)
 {
-	HeapTuple	htp;
+	HeapTuple	htup;
 	char		name[NAMEDATALEN];
 
 	Assert(s && aip && modechg);
@@ -150,11 +150,12 @@ aclparse(char *s, AclItem *aip, unsigned *modechg)
 	switch (aip->ai_idtype)
 	{
 		case ACL_IDTYPE_UID:
-			htp = SearchSysCacheTuple(USENAME, PointerGetDatum(name),
-									  0, 0, 0);
-			if (!HeapTupleIsValid(htp))
+			htup = SearchSysCacheTuple(USENAME,
+										PointerGetDatum(name),
+									  	0, 0, 0);
+			if (!HeapTupleIsValid(htup))
 				elog(ERROR, "aclparse: non-existent user \"%s\"", name);
-			aip->ai_id = ((Form_pg_shadow) GETSTRUCT(htp))->usesysid;
+			aip->ai_id = ((Form_pg_shadow) GETSTRUCT(htup))->usesysid;
 			break;
 		case ACL_IDTYPE_GID:
 			aip->ai_id = get_grosysid(name);
@@ -241,7 +242,7 @@ aclitemout(AclItem *aip)
 {
 	char	   *p;
 	char	   *out;
-	HeapTuple	htp;
+	HeapTuple	htup;
 	unsigned	i;
 	static AclItem default_aclitem = {ACL_ID_WORLD,
 		ACL_IDTYPE_WORLD,
@@ -260,9 +261,10 @@ aclitemout(AclItem *aip)
 	switch (aip->ai_idtype)
 	{
 		case ACL_IDTYPE_UID:
-			htp = SearchSysCacheTuple(USESYSID, ObjectIdGetDatum(aip->ai_id),
-									  0, 0, 0);
-			if (!HeapTupleIsValid(htp))
+			htup = SearchSysCacheTuple(USESYSID,
+										ObjectIdGetDatum(aip->ai_id),
+									  	0, 0, 0);
+			if (!HeapTupleIsValid(htup))
 			{
 				char	   *tmp = int2out(aip->ai_id);
 
@@ -283,7 +285,7 @@ aclitemout(AclItem *aip)
 			}
 			else
 				strncat(p, (char *) &((Form_pg_shadow)
-									  GETSTRUCT(htp))->usename,
+									  GETSTRUCT(htup))->usename,
 						sizeof(NameData));
 			break;
 		case ACL_IDTYPE_GID:
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index b3c898cbcf429ca8b4cad4d95c59b16f5c0c280a..cf76efabf3b0c9a647528efb0baa096ce95d0423 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.31 1998/07/12 21:29:22 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.32 1998/08/19 02:02:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1302,7 +1302,8 @@ system_cache_lookup(Oid element_type,
 	HeapTuple	typeTuple;
 	TypeTupleForm typeStruct;
 
-	typeTuple = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(element_type),
+	typeTuple = SearchSysCacheTuple(TYPOID,
+									ObjectIdGetDatum(element_type),
 									0, 0, 0);
 
 	if (!HeapTupleIsValid(typeTuple))
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index b0f38347f81960f75e276768da73bcfa34091785..beb0e719dd6c71566579c0e9566799f8c049a7fd 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.23 1998/06/15 19:29:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.24 1998/08/19 02:02:56 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -614,7 +614,7 @@ datetime_datetime(DateADT date, TimeADT *time)
 
 
 int32							/* RelativeTime */
-int42reltime(int32 timevalue)
+int4reltime(int32 timevalue)
 {
 	return (timevalue);
 }
diff --git a/src/backend/utils/adt/not_in.c b/src/backend/utils/adt/not_in.c
index 986f0e4d2411c420cb5642de7b2d39273b58065d..4658d29b499fdeacaac2040dc29b95b6f589df7c 100644
--- a/src/backend/utils/adt/not_in.c
+++ b/src/backend/utils/adt/not_in.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.10 1998/07/27 19:38:18 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.11 1998/08/19 02:02:57 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -78,9 +78,8 @@ int4notin(int16 not_in_arg, char *relation_and_attr)
 	retval = true;
 
 	/* do a scan of the relation, and do the check */
-	for (current_tuple = heap_getnext(scan_descriptor, 0, NULL);
-		 current_tuple != NULL && retval;
-		 current_tuple = heap_getnext(scan_descriptor, 0, NULL))
+	while (HeapTupleIsValid(current_tuple = heap_getnext(scan_descriptor, 0)) &&
+			retval)
 	{
 		value = heap_getattr(current_tuple,
 							 (AttrNumber) attrid,
diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c
index e6d66d126eda925d840215ebd7dc41f381a1f134..3e1097f0e08a21800309052d0dbcdb37a9906ac2 100644
--- a/src/backend/utils/adt/oid.c
+++ b/src/backend/utils/adt/oid.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.15 1998/02/26 04:37:16 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.16 1998/08/19 02:02:59 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -125,6 +125,46 @@ oid8eq(Oid arg1[], Oid arg2[])
 	return (bool) (memcmp(arg1, arg2, 8 * sizeof(Oid)) == 0);
 }
 
+bool
+oid8lt(Oid arg1[], Oid arg2[])
+{
+	int i;
+	for (i=0; i < 8; i++)
+		if (!int4eq(arg1[i], arg2[i]))
+			return int4lt(arg1[i], arg2[i]);
+	return false;
+}
+
+bool
+oid8le(Oid arg1[], Oid arg2[])
+{
+	int i;
+	for (i=0; i < 8; i++)
+		if (!int4eq(arg1[i], arg2[i]))
+			return int4le(arg1[i], arg2[i]);
+	return true;
+}
+
+bool
+oid8ge(Oid arg1[], Oid arg2[])
+{
+	int i;
+	for (i=0; i < 8; i++)
+		if (!int4eq(arg1[i], arg2[i]))
+			return int4ge(arg1[i], arg2[i]);
+	return true;
+}
+
+bool
+oid8gt(Oid arg1[], Oid arg2[])
+{
+	int i;
+	for (i=0; i < 8; i++)
+		if (!int4eq(arg1[i], arg2[i]))
+			return int4gt(arg1[i], arg2[i]);
+	return false;
+}
+
 bool
 oideqint4(Oid arg1, int32 arg2)
 {
diff --git a/src/backend/utils/adt/oidint2.c b/src/backend/utils/adt/oidint2.c
deleted file mode 100644
index 1bcb37ef740e09bb7e17c23b06ae62029e01913e..0000000000000000000000000000000000000000
--- a/src/backend/utils/adt/oidint2.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * oidint2.c--
- *	  Functions for the built-in type "oidint2".
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidint2.c,v 1.6 1998/06/15 19:29:36 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include <stdio.h>
-#include "postgres.h"
-#include "utils/palloc.h"
-#include "utils/builtins.h"		/* for pg_atoi() */
-#include "utils/oidcompos.h"	/* where function declarations go */
-
-
-OidInt2
-oidint2in(char *o)
-{
-	OidInt2		oi;
-	char	   *p;
-
-	oi = (OidInt2) palloc(sizeof(OidInt2Data));
-
-	for (p = o; *p != '\0' && *p != '/'; p++)
-		continue;
-
-	oi->oi_oid = (Oid) pg_atoi(o, sizeof(Oid), '/');
-	if (*p == '\0')
-		oi->oi_int2 = 0;
-	else
-		oi->oi_int2 = (int16) pg_atoi(++p, sizeof(int2), '\0');
-
-	return (oi);
-}
-
-char *
-oidint2out(OidInt2 o)
-{
-	char	   *r;
-
-	/*
-	 * -2147483647/-32767 0		   1 1234567890123456789
-	 */
-	r = (char *) palloc(19);
-	sprintf(r, "%d/%d", o->oi_oid, o->oi_int2);
-
-	return (r);
-}
-
-bool
-oidint2lt(OidInt2 o1, OidInt2 o2)
-{
-	return
-	((bool) (o1->oi_oid < o2->oi_oid ||
-			 (o1->oi_oid == o2->oi_oid && o1->oi_int2 < o2->oi_int2)));
-}
-
-bool
-oidint2le(OidInt2 o1, OidInt2 o2)
-{
-	return ((bool) (o1->oi_oid < o2->oi_oid ||
-			  (o1->oi_oid == o2->oi_oid && o1->oi_int2 <= o2->oi_int2)));
-}
-
-bool
-oidint2eq(OidInt2 o1, OidInt2 o2)
-{
-	return ((bool) (o1->oi_oid == o2->oi_oid && o1->oi_int2 == o2->oi_int2));
-}
-
-bool
-oidint2ge(OidInt2 o1, OidInt2 o2)
-{
-	return ((bool) (o1->oi_oid > o2->oi_oid ||
-			  (o1->oi_oid == o2->oi_oid && o1->oi_int2 >= o2->oi_int2)));
-}
-
-bool
-oidint2gt(OidInt2 o1, OidInt2 o2)
-{
-	return ((bool) (o1->oi_oid > o2->oi_oid ||
-			   (o1->oi_oid == o2->oi_oid && o1->oi_int2 > o2->oi_int2)));
-}
-
-bool
-oidint2ne(OidInt2 o1, OidInt2 o2)
-{
-	return ((bool) (o1->oi_oid != o2->oi_oid || o1->oi_int2 != o2->oi_int2));
-}
-
-int
-oidint2cmp(OidInt2 o1, OidInt2 o2)
-{
-	if (oidint2lt(o1, o2))
-		return (-1);
-	else if (oidint2eq(o1, o2))
-		return (0);
-	else
-		return (1);
-}
-
-OidInt2
-mkoidint2(Oid v_oid, uint16 v_int2)
-{
-	OidInt2		o;
-
-	o = (OidInt2) palloc(sizeof(OidInt2Data));
-	o->oi_oid = v_oid;
-	o->oi_int2 = v_int2;
-	return (o);
-}
diff --git a/src/backend/utils/adt/oidint4.c b/src/backend/utils/adt/oidint4.c
deleted file mode 100644
index 90f482708bc435da67071d9378d70a1e412eebd3..0000000000000000000000000000000000000000
--- a/src/backend/utils/adt/oidint4.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * oidint4.c--
- *	  Functions for the built-in type "oidint4".
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidint4.c,v 1.6 1998/06/15 19:29:36 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include <stdio.h>				/* for sprintf() */
-#include "postgres.h"
-#include "utils/palloc.h"
-#include "utils/builtins.h"
-#include "utils/oidcompos.h"	/* where function declarations go */
-
-OidInt4
-oidint4in(char *o)
-{
-	OidInt4		oi;
-	char	   *p;
-
-	oi = (OidInt4) palloc(sizeof(OidInt4Data));
-
-	for (p = o; *p != '\0' && *p != '/'; p++)
-		continue;
-
-	oi->oi_oid = (Oid) pg_atoi(o, sizeof(Oid), '/');
-	if (*p == '\0')
-		oi->oi_int4 = 0;
-	else
-		oi->oi_int4 = pg_atoi(++p, sizeof(int4), '\0');
-
-	return (oi);
-}
-
-char *
-oidint4out(OidInt4 o)
-{
-	char	   *r;
-
-	/*
-	 * -2147483647/-2147483647 0		1		  2
-	 * 123456789012345678901234
-	 */
-	r = (char *) palloc(24);
-	sprintf(r, "%d/%d", o->oi_oid, o->oi_int4);
-
-	return (r);
-}
-
-bool
-oidint4lt(OidInt4 o1, OidInt4 o2)
-{
-	return
-	((bool) (o1->oi_oid < o2->oi_oid ||
-			 (o1->oi_oid == o2->oi_oid && o1->oi_int4 < o2->oi_int4)));
-}
-
-bool
-oidint4le(OidInt4 o1, OidInt4 o2)
-{
-	return ((bool) (o1->oi_oid < o2->oi_oid ||
-			  (o1->oi_oid == o2->oi_oid && o1->oi_int4 <= o2->oi_int4)));
-}
-
-bool
-oidint4eq(OidInt4 o1, OidInt4 o2)
-{
-	return ((bool) (o1->oi_oid == o2->oi_oid && o1->oi_int4 == o2->oi_int4));
-}
-
-bool
-oidint4ge(OidInt4 o1, OidInt4 o2)
-{
-	return ((bool) (o1->oi_oid > o2->oi_oid ||
-			  (o1->oi_oid == o2->oi_oid && o1->oi_int4 >= o2->oi_int4)));
-}
-
-bool
-oidint4gt(OidInt4 o1, OidInt4 o2)
-{
-	return ((bool) (o1->oi_oid > o2->oi_oid ||
-			   (o1->oi_oid == o2->oi_oid && o1->oi_int4 > o2->oi_int4)));
-}
-
-bool
-oidint4ne(OidInt4 o1, OidInt4 o2)
-{
-	return ((bool) (o1->oi_oid != o2->oi_oid || o1->oi_int4 != o2->oi_int4));
-}
-
-int
-oidint4cmp(OidInt4 o1, OidInt4 o2)
-{
-	if (oidint4lt(o1, o2))
-		return (-1);
-	else if (oidint4eq(o1, o2))
-		return (0);
-	else
-		return (1);
-}
-
-OidInt4
-mkoidint4(Oid v_oid, uint32 v_int4)
-{
-	OidInt4		o;
-
-	o = (OidInt4) palloc(sizeof(OidInt4Data));
-	o->oi_oid = v_oid;
-	o->oi_int4 = v_int4;
-	return (o);
-}
diff --git a/src/backend/utils/adt/oidname.c b/src/backend/utils/adt/oidname.c
deleted file mode 100644
index ff61681984aae514b670f8e9e6300069d8b8ead1..0000000000000000000000000000000000000000
--- a/src/backend/utils/adt/oidname.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * oidname.c--
- *	  adt for multiple key indices involving oid and name.	Used for cache
- *	  index scans (could also be used in the general case with name).
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidname.c,v 1.12 1998/02/26 04:37:18 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include <stdio.h>
-#include <string.h>
-
-#include "postgres.h"
-#include "utils/oidcompos.h"	/* where function declarations go */
-#include "utils/builtins.h"		/* for pg_atoi() */
-#include "utils/palloc.h"
-
-OidName
-oidnamein(char *inStr)
-{
-	OidName		oc;
-	char	   *inptr;
-
-	oc = (OidName) palloc(sizeof(OidNameData));
-
-	MemSet(oc, 0, sizeof(OidNameData));
-	for (inptr = inStr; *inptr && *inptr != ','; inptr++)
-		;
-
-	if (*inptr)
-	{
-		oc->id = (Oid) pg_atoi(inStr, sizeof(Oid), ',');
-		/* copy one less to ensure null-padding */
-		++inptr;
-		StrNCpy(oc->name.data, inptr, NAMEDATALEN);
-	}
-	else
-		elog(ERROR, "Bad input data for type oidname");
-
-	return oc;
-}
-
-char *
-oidnameout(OidName oidname)
-{
-	char		buf[30 + NAMEDATALEN];	/* oidname length + oid length +
-										 * some safety */
-	char	   *res;
-
-	sprintf(buf, "%d,%s", oidname->id, oidname->name.data);
-	res = pstrdup(buf);
-	return (res);
-}
-
-bool
-oidnamelt(OidName o1, OidName o2)
-{
-	return (bool)
-	(o1->id < o2->id ||
-	 (o1->id == o2->id && namecmp(&o1->name, &o2->name) < 0));
-}
-
-bool
-oidnamele(OidName o1, OidName o2)
-{
-	return (bool)
-	(o1->id < o2->id ||
-	 (o1->id == o2->id && namecmp(&o1->name, &o2->name) <= 0));
-}
-
-bool
-oidnameeq(OidName o1, OidName o2)
-{
-	return (bool)
-	(o1->id == o2->id &&
-	 (namecmp(&o1->name, &o2->name) == 0));
-}
-
-bool
-oidnamene(OidName o1, OidName o2)
-{
-	return (bool)
-	(o1->id != o2->id ||
-	 (namecmp(&o1->name, &o2->name) != 0));
-}
-
-bool
-oidnamege(OidName o1, OidName o2)
-{
-	return (bool) (o1->id > o2->id || (o1->id == o2->id &&
-									namecmp(&o1->name, &o2->name) >= 0));
-}
-
-bool
-oidnamegt(OidName o1, OidName o2)
-{
-	return (bool) (o1->id > o2->id || (o1->id == o2->id &&
-									 namecmp(&o1->name, &o2->name) > 0));
-}
-
-int
-oidnamecmp(OidName o1, OidName o2)
-{
-	if (o1->id == o2->id)
-		return (namecmp(&o1->name, &o2->name));
-
-	return (o1->id < o2->id) ? -1 : 1;
-}
-
-OidName
-mkoidname(Oid id, char *name)
-{
-	OidName		oidname;
-
-	oidname = (OidName) palloc(sizeof(Oid) + NAMEDATALEN);
-
-	oidname->id = id;
-	namestrcpy(&oidname->name, name);
-	return oidname;
-}
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index b3beb0b7cc528bbf385c1bc5b5e32f7505074c2f..227158748b3b50e1854cc4a3d41a90073ca51512 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -1,4 +1,4 @@
-/*-------------------------------------------------------------------------
+ /*-------------------------------------------------------------------------
  *
  * regproc.c--
  *	  Functions for the built-in type "RegProcedure".
@@ -7,143 +7,190 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.21 1998/07/27 19:38:19 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.22 1998/08/19 02:03:04 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include <string.h>
 #include "postgres.h"
+#include "miscadmin.h"
 #include "access/heapam.h"
 #include "access/relscan.h"
 #include "fmgr.h"
 #include "utils/palloc.h"
+#include "utils/syscache.h"
 
 #include "catalog/catname.h"
+#include "catalog/pg_proc.h"
+#include "catalog/pg_type.h"
 #include "utils/builtins.h"		/* where function declarations go */
 
 /*****************************************************************************
  *	 USER I/O ROUTINES														 *
  *****************************************************************************/
-
+ 
 /*
  *		regprocin		- converts "proname" to proid
  *
  *		proid of NULL signifies unknown
  */
 int32
-regprocin(char *proname)
+regprocin(char *pro_oid_name)
 {
-	Relation	proc;
-	HeapScanDesc procscan;
 	HeapTuple	proctup;
-	ScanKeyData key;
 	RegProcedure result = (Oid) 0;
-	bool		isnull;
 
-	if (proname == NULL)
+	if (pro_oid_name == NULL)
 		return (0);
-	proc = heap_openr(ProcedureRelationName);
-	if (!RelationIsValid(proc))
+
+
+	if (!IsBootstrapProcessingMode())
 	{
-		elog(ERROR, "regprocin: could not open %s",
-			 ProcedureRelationName);
-		return (0);
+		/*
+		 *  we need to use the oid because there can be multiple entries
+		 *	with the same name, i.e.  1323(int4eq)
+		 */
+		proctup = SearchSysCacheTuple(PROOID,
+										ObjectIdGetDatum(atoi(pro_oid_name)),
+										0, 0, 0);
+		if (HeapTupleIsValid(proctup))
+				result = (RegProcedure) proctup->t_oid;
+		else	result = (RegProcedure) 0;
 	}
-	ScanKeyEntryInitialize(&key,
-						   (bits16) 0,
-						   (AttrNumber) 1,
-						   (RegProcedure) F_NAMEEQ,
-						   (Datum) proname);
-
-	procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
-	if (!HeapScanIsValid(procscan))
+	else
 	{
+		Relation	proc;
+		HeapScanDesc procscan;
+		ScanKeyData key;
+		bool		isnull;
+	
+		proc = heap_openr(ProcedureRelationName);
+		if (!RelationIsValid(proc))
+		{
+			elog(ERROR, "regprocin: could not open %s",
+				 ProcedureRelationName);
+			return (0);
+		}
+		ScanKeyEntryInitialize(&key,
+							   (bits16) 0,
+							   (AttrNumber) 1,
+							   (RegProcedure) F_NAMEEQ,
+							   (Datum) pro_oid_name);
+	
+		procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
+		if (!HeapScanIsValid(procscan))
+		{
+			heap_close(proc);
+			elog(ERROR, "regprocin: could not being scan of %s",
+				 ProcedureRelationName);
+			return (0);
+		}
+		proctup = heap_getnext(procscan, 0);
+		if (HeapTupleIsValid(proctup))
+		{
+				result = (RegProcedure) heap_getattr(proctup,
+													 ObjectIdAttributeNumber,
+											RelationGetTupleDescriptor(proc),
+													 &isnull);
+				if (isnull)
+					elog(FATAL, "regprocin: null procedure %s", pro_oid_name);
+		}
+		else
+				result = (RegProcedure) 0;
+
+		heap_endscan(procscan);
 		heap_close(proc);
-		elog(ERROR, "regprocin: could not being scan of %s",
-			 ProcedureRelationName);
-		return (0);
-	}
-	proctup = heap_getnext(procscan, 0, (Buffer *) NULL);
-	switch (HeapTupleIsValid(proctup))
-	{
-		case 1:
-			result = (RegProcedure) heap_getattr(proctup,
-												 ObjectIdAttributeNumber,
-										RelationGetTupleDescriptor(proc),
-												 &isnull);
-			if (isnull)
-				elog(FATAL, "regprocin: null procedure %s", proname);
-			break;
-		case 0:
-			result = (RegProcedure) 0;
+	}	
+
 #ifdef	EBUG
-			elog(DEBUG, "regprocin: no such procedure %s", proname);
+	elog(DEBUG, "regprocin: no such procedure %s", pro_oid_name);
 #endif							/* defined(EBUG) */
-	}
-	heap_endscan(procscan);
-	heap_close(proc);
-	return ((int32) result);
+	return (int32) result;
 }
 
 /*
- *		regprocout		- converts proid to "proname"
+ *		regprocout		- converts proid to "pro_oid_name"
  */
 char *
 regprocout(RegProcedure proid)
 {
-	Relation	proc;
-	HeapScanDesc procscan;
 	HeapTuple	proctup;
 	char	   *result;
-	ScanKeyData key;
 
 	result = (char *) palloc(NAMEDATALEN);
-	proc = heap_openr(ProcedureRelationName);
-	if (!RelationIsValid(proc))
-	{
-		elog(ERROR, "regprocout: could not open %s",
-			 ProcedureRelationName);
-		return (0);
-	}
-	ScanKeyEntryInitialize(&key,
-						   (bits16) 0,
-						   (AttrNumber) ObjectIdAttributeNumber,
-						   (RegProcedure) F_INT4EQ,
-						   (Datum) proid);
-
-	procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
-	if (!HeapScanIsValid(procscan))
+
+	if (!IsBootstrapProcessingMode())
 	{
-		heap_close(proc);
-		elog(ERROR, "regprocout: could not being scan of %s",
-			 ProcedureRelationName);
-		return (0);
+		proctup = SearchSysCacheTuple(PROOID,
+										ObjectIdGetDatum(proid),
+										0, 0, 0);
+	
+		if (HeapTupleIsValid(proctup))
+		{
+				char	   *s;
+	
+				s = ((Form_pg_proc) GETSTRUCT(proctup))->proname.data;
+				snprintf(result, NAMEDATALEN, "%d(%s)", proid, s);
+		}
+		else
+		{
+			result[0] = '-';
+			result[1] = '\0';
+		}
 	}
-	proctup = heap_getnext(procscan, 0, (Buffer *) NULL);
-	switch (HeapTupleIsValid(proctup))
+	else
 	{
+		Relation	proc;
+		HeapScanDesc procscan;
+		ScanKeyData key;
+	
+		proc = heap_openr(ProcedureRelationName);
+		if (!RelationIsValid(proc))
+		{
+			elog(ERROR, "regprocout: could not open %s",
+				 ProcedureRelationName);
+			return (0);
+		}
+		ScanKeyEntryInitialize(&key,
+							   (bits16) 0,
+							   (AttrNumber) ObjectIdAttributeNumber,
+							   (RegProcedure) F_INT4EQ,
+							   (Datum) proid);
+	
+		procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key);
+		if (!HeapScanIsValid(procscan))
+		{
+			heap_close(proc);
+			elog(ERROR, "regprocout: could not being scan of %s",
+				 ProcedureRelationName);
+			return (0);
+		}
+		proctup = heap_getnext(procscan, 0);
+		if (HeapTupleIsValid(proctup))
+		{
 			char	   *s;
 			bool		isnull;
 
-		case 1:
 			s = (char *) heap_getattr(proctup, 1,
 							  RelationGetTupleDescriptor(proc), &isnull);
 			if (!isnull)
-			{
 				StrNCpy(result, s, NAMEDATALEN);
-				break;
-			}
-			elog(FATAL, "regprocout: null procedure %d", proid);
-			/* FALLTHROUGH */
-		case 0:
-			result[0] = '-';
-			result[1] = '\0';
+			else
+				elog(FATAL, "regprocout: null procedure %d", proid);
+		}
+		else
+		{
+				result[0] = '-';
+				result[1] = '\0';
+		}
+		heap_endscan(procscan);
+		heap_close(proc);
+		return (result);
+	}
+
 #ifdef	EBUG
 			elog(DEBUG, "regprocout: no such procedure %d", proid);
 #endif							/* defined(EBUG) */
-	}
-	heap_endscan(procscan);
-	heap_close(proc);
 	return (result);
 }
 
@@ -153,11 +200,8 @@ regprocout(RegProcedure proid)
 text *
 oid8types(Oid (*oidArray)[])
 {
-	Relation	type;
-	HeapScanDesc typescan;
 	HeapTuple	typetup;
 	text	   *result;
-	ScanKeyData key;
 	int			num;
 	Oid		   *sp;
 
@@ -170,55 +214,26 @@ oid8types(Oid (*oidArray)[])
 
 	result = (text *) palloc(NAMEDATALEN * 8 + 8 + VARHDRSZ);
 	*VARDATA(result) = '\0';
-	type = heap_openr(TypeRelationName);
-	if (!RelationIsValid(type))
-	{
-		elog(ERROR, "int8typeout: could not open %s",
-			 TypeRelationName);
-		return (0);
-	}
 
 	sp = *oidArray;
 	for (num = 8; num != 0; num--, sp++)
 	{
 		if (*sp != InvalidOid)
 		{
-			ScanKeyEntryInitialize(&key,
-								   (bits16) 0,
-								   (AttrNumber) ObjectIdAttributeNumber,
-								   (RegProcedure) F_INT4EQ,
-								   (Datum) *sp);
-
-			typescan = heap_beginscan(type, 0, SnapshotNow, 1, &key);
-			if (!HeapScanIsValid(typescan))
-			{
-				heap_close(type);
-				elog(ERROR, "int8typeout: could not being scan of %s",
-					 TypeRelationName);
-				return (0);
-			}
-			typetup = heap_getnext(typescan, 0, (Buffer *) NULL);
+			typetup = SearchSysCacheTuple(TYPOID,
+											ObjectIdGetDatum(*sp),
+											0, 0, 0);
 			if (HeapTupleIsValid(typetup))
 			{
 				char	   *s;
-				bool		isnull;
 
-				s = (char *) heap_getattr(typetup, 1,
-							  RelationGetTupleDescriptor(type), &isnull);
-				if (!isnull)
-				{
-					StrNCpy(VARDATA(result) + strlen(VARDATA(result)), s,
+				s = ((TypeTupleForm) GETSTRUCT(typetup))->typname.data;
+				StrNCpy(VARDATA(result) + strlen(VARDATA(result)), s,
 							NAMEDATALEN);
-					strcat(VARDATA(result), " ");
-				}
-				else
-					elog(FATAL, "int8typeout: null procedure %d", *sp);
-				/* FALLTHROUGH */
+				strcat(VARDATA(result), " ");
 			}
-			heap_endscan(typescan);
 		}
 	}
-	heap_close(type);
 	VARSIZE(result) = strlen(VARDATA(result)) + VARHDRSZ;
 	return (result);
 }
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index d444ced1071a7c480de44708073b46a3b355d842..a5a0b86e4a4f6d50e96d96f1ef6819a665ae9ccf 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.20 1998/07/27 19:38:20 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.21 1998/08/19 02:03:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -295,7 +295,8 @@ getattdisbursion(Oid relid, AttrNumber attnum)
 	if (nvals > 0)
 		return (nvals);
 
-	atp = SearchSysCacheTuple(RELOID, ObjectIdGetDatum(relid),
+	atp = SearchSysCacheTuple(RELOID,
+							  ObjectIdGetDatum(relid),
 							  0, 0, 0);
 
 	/*
@@ -334,8 +335,8 @@ gethilokey(Oid relid,
 		   char **high,
 		   char **low)
 {
-	Relation	rdesc;
-	HeapScanDesc sdesc;
+	Relation	rel;
+	HeapScanDesc scan;
 	static ScanKeyData key[3] = {
 		{0, Anum_pg_statistic_starelid, F_OIDEQ, {0, 0, F_OIDEQ}},
 		{0, Anum_pg_statistic_staattnum, F_INT2EQ, {0, 0, F_INT2EQ}},
@@ -344,13 +345,13 @@ gethilokey(Oid relid,
 	bool		isnull;
 	HeapTuple	tuple;
 
-	rdesc = heap_openr(StatisticRelationName);
+	rel = heap_openr(StatisticRelationName);
 
 	key[0].sk_argument = ObjectIdGetDatum(relid);
 	key[1].sk_argument = Int16GetDatum((int16) attnum);
 	key[2].sk_argument = ObjectIdGetDatum(opid);
-	sdesc = heap_beginscan(rdesc, 0, SnapshotNow, 3, key);
-	tuple = heap_getnext(sdesc, 0, (Buffer *) NULL);
+	scan = heap_beginscan(rel, 0, SnapshotNow, 3, key);
+	tuple = heap_getnext(scan, 0);
 	if (!HeapTupleIsValid(tuple))
 	{
 		*high = "n";
@@ -365,19 +366,19 @@ gethilokey(Oid relid,
 	*high = textout((struct varlena *)
 					heap_getattr(tuple,
 								 Anum_pg_statistic_stahikey,
-								 RelationGetTupleDescriptor(rdesc),
+								 RelationGetTupleDescriptor(rel),
 								 &isnull));
 	if (isnull)
 		elog(DEBUG, "gethilokey: high key is null");
 	*low = textout((struct varlena *)
 				   heap_getattr(tuple,
 								Anum_pg_statistic_stalokey,
-								RelationGetTupleDescriptor(rdesc),
+								RelationGetTupleDescriptor(rel),
 								&isnull));
 	if (isnull)
 		elog(DEBUG, "gethilokey: low key is null");
-	heap_endscan(sdesc);
-	heap_close(rdesc);
+	heap_endscan(scan);
+	heap_close(rel);
 }
 
 float64
@@ -497,7 +498,8 @@ hashsel(Oid operatorObjectId,
 		 * have selectivity functions
 		 */
 
-		atp = SearchSysCacheTuple(RELOID, ObjectIdGetDatum(indexrelid),
+		atp = SearchSysCacheTuple(RELOID,
+								  ObjectIdGetDatum(indexrelid),
 								  0, 0, 0);
 		if (!HeapTupleIsValid(atp))
 		{
@@ -549,7 +551,8 @@ hashnpage(Oid operatorObjectId,
 	int			npage;
 	int			ntuples;
 
-	atp = SearchSysCacheTuple(RELOID, ObjectIdGetDatum(indexrelid),
+	atp = SearchSysCacheTuple(RELOID,
+							  ObjectIdGetDatum(indexrelid),
 							  0, 0, 0);
 	if (!HeapTupleIsValid(atp))
 	{
diff --git a/src/backend/utils/adt/sets.c b/src/backend/utils/adt/sets.c
index 2822756786caf458f08102c56f5587631b965e1d..1d150805ce941d6534eabee0dfce4c410004a49c 100644
--- a/src/backend/utils/adt/sets.c
+++ b/src/backend/utils/adt/sets.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.15 1998/07/27 19:38:21 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.16 1998/08/19 02:03:06 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -56,13 +56,6 @@ SetDefine(char *querystr, char *typename)
 	Datum		replValue[Natts_pg_proc];
 	char		replNull[Natts_pg_proc];
 	char		repl[Natts_pg_proc];
-	HeapScanDesc pg_proc_scan;
-	Buffer		buffer;
-	ItemPointerData ipdata;
-
-	static ScanKeyData oidKey[1] = {
-	{0, ObjectIdAttributeNumber, F_OIDEQ}};
-
 
 	setoid = ProcedureCreate(procname,	/* changed below, after oid known */
 							 true,		/* returnsSet */
@@ -117,37 +110,26 @@ SetDefine(char *querystr, char *typename)
 		/* change the pg_proc tuple */
 		procrel = heap_openr(ProcedureRelationName);
 		RelationSetLockForWrite(procrel);
-		fmgr_info(F_OIDEQ,
-				  &oidKey[0].sk_func);
-		oidKey[0].sk_nargs = oidKey[0].sk_func.fn_nargs;
-		oidKey[0].sk_argument = ObjectIdGetDatum(setoid);
-		pg_proc_scan = heap_beginscan(procrel,
-									  0,
-									  SnapshotSelf,
-									  1,
-									  oidKey);
-		tup = heap_getnext(pg_proc_scan, 0, &buffer);
+
+		tup = SearchSysCacheTuple(PROOID,
+									ObjectIdGetDatum(setoid),
+									0, 0, 0);
 		if (HeapTupleIsValid(tup))
 		{
 			newtup = heap_modifytuple(tup,
-									  buffer,
 									  procrel,
 									  replValue,
 									  replNull,
 									  repl);
 
-			/* XXX may not be necessary */
-			ItemPointerCopy(&tup->t_ctid, &ipdata);
-
 			setheapoverride(true);
-			heap_replace(procrel, &ipdata, newtup);
+			heap_replace(procrel, &tup->t_ctid, newtup);
 			setheapoverride(false);
 
 			setoid = newtup->t_oid;
 		}
 		else
 			elog(ERROR, "setin: could not find new set oid tuple");
-		heap_endscan(pg_proc_scan);
 
 		if (RelationGetRelationTupleForm(procrel)->relhasindex)
 		{
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 51e9646ffddcaf96eb9ce4bec56a26eef2250254..4820eff22247656da6ce15b7c55772bd89b0e50f 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.31 1998/07/27 19:38:22 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.32 1998/08/19 02:03:08 momjian Exp $
  *
  * Notes:
  *		XXX This needs to use exception.h to handle recovery when
@@ -36,11 +36,9 @@
 
 static void CatCacheRemoveCTup(CatCache *cache, Dlelem *e);
 static Index CatalogCacheComputeHashIndex(struct catcache * cacheInP);
-static Index
-CatalogCacheComputeTupleHashIndex(struct catcache * cacheInOutP,
+static Index CatalogCacheComputeTupleHashIndex(struct catcache * cacheInOutP,
 								  Relation relation, HeapTuple tuple);
-static void
-CatalogCacheInitializeCache(struct catcache * cache,
+static void CatalogCacheInitializeCache(struct catcache * cache,
 							Relation relation);
 static long comphash(long l, char *v);
 
@@ -182,7 +180,7 @@ CatalogCacheInitializeCache(struct catcache * cache,
 	 * ----------------
 	 */
 	Assert(RelationIsValid(relation));
-	cache->relationId = RelationGetRelationId(relation);
+	cache->relationId = RelationGetRelid(relation);
 	tupdesc = cache->cc_tupdesc = RelationGetTupleDescriptor(relation);
 
 	CACHE3_elog(DEBUG, "CatalogCacheInitializeCache: relid %d, %d keys",
@@ -250,7 +248,7 @@ CatalogCacheInitializeCache(struct catcache * cache,
 			 */
 			relation = index_openr(cache->cc_indname);
 			Assert(relation);
-			cache->indexId = RelationGetRelationId(relation);
+			cache->indexId = RelationGetRelid(relation);
 			index_close(relation);
 		}
 		else
@@ -827,7 +825,6 @@ SearchSysCache(struct catcache * cache,
 	CatCTup    *nct2;
 	Dlelem	   *elt;
 	HeapTuple	ntp = 0;
-	Buffer		buffer;
 
 	Relation	relation;
 	MemoryContext oldcxt;
@@ -997,8 +994,7 @@ SearchSysCache(struct catcache * cache,
 		sd = heap_beginscan(relation, 0, SnapshotNow,
 							cache->cc_nkeys, cache->cc_skey);
 
-		/* should this buffer be ReleaseBuffer'd?  --djm 8/20/96 */
-		ntp = heap_getnext(sd, 0, &buffer);
+		ntp = heap_getnext(sd, 0);
 
 		MemoryContextSwitchTo((MemoryContext) CacheCxt);
 
@@ -1129,7 +1125,7 @@ RelationInvalidateCatalogCacheTuple(Relation relation,
 	 *		   in the proper hash bucket
 	 * ----------------
 	 */
-	relationId = RelationGetRelationId(relation);
+	relationId = RelationGetRelid(relation);
 
 	for (ccp = Caches; ccp; ccp = ccp->cc_next)
 	{
diff --git a/src/backend/utils/cache/fcache.c b/src/backend/utils/cache/fcache.c
index 1a10eaedb4b162e9d89fe85905a4e8b7a410369d..13d42341239892a99ce0d11c9898b9bbd0dd7d79 100644
--- a/src/backend/utils/cache/fcache.c
+++ b/src/backend/utils/cache/fcache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.14 1998/07/26 04:30:55 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.15 1998/08/19 02:03:09 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -72,7 +72,8 @@ GetDynamicFuncArgType(Var *arg, ExprContext *econtext)
 	relname = (char *) getrelname(rtid, econtext->ecxt_range_table);
 
 
-	tup = SearchSysCacheTuple(TYPNAME, PointerGetDatum(relname),
+	tup = SearchSysCacheTuple(TYPNAME,
+							  PointerGetDatum(relname),
 							  0, 0, 0);
 	if (!tup)
 		elog(ERROR, "Lookup failed on type tuple for class %s",
@@ -129,7 +130,7 @@ init_fcache(Oid foid,
 	 * ----------------
 	 */
 	typeTuple = SearchSysCacheTuple(TYPOID,
-						   ObjectIdGetDatum(procedureStruct->prorettype),
+							   ObjectIdGetDatum(procedureStruct->prorettype),
 									0, 0, 0);
 
 	if (!HeapTupleIsValid(typeTuple))
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index b71215442822679f3f0a6357633b7cdb85079ab3..ae77305ab3491c60b739f025e8729fac1c7ccd24 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.11 1998/06/15 19:29:39 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.12 1998/08/19 02:03:11 momjian Exp $
  *
  * Note - this code is real crufty...
  *
@@ -267,7 +267,7 @@ getmyrelids()
 	MyAMRelationId = tuple->t_oid;
 
 	tuple = SearchSysCacheTuple(RELNAME,
-					   PointerGetDatum(AccessMethodOperatorRelationName),
+								PointerGetDatum(AccessMethodOperatorRelationName),
 								0, 0, 0);
 	Assert(HeapTupleIsValid(tuple));
 	MyAMOPRelationId = tuple->t_oid;
@@ -476,7 +476,7 @@ RelationInvalidateRelationCache(Relation relation,
 	 * ----------------
 	 */
 	ValidateHacks();			/* XXX */
-	relationId = RelationGetRelationId(relation);
+	relationId = RelationGetRelid(relation);
 
 	/* ----------------
 	 *
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index be8d348e51f51ec2fe57a70af12f5d7afee69a87..38c29fd2749aa62686d74ff577964cdd64c7dca1 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.19 1998/08/16 05:38:41 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.20 1998/08/19 02:03:12 momjian Exp $
  *
  * NOTES
  *	  Eventually, the index information should go through here, too.
@@ -47,8 +47,7 @@ op_class(Oid oprno, int32 opclass, Oid amopid)
 {
 	FormData_pg_amop amoptup;
 
-	if (SearchSysCacheStruct(AMOPOPID,
-							 (char *) &amoptup,
+	if (SearchSysCacheStruct(AMOPOPID, (char *) &amoptup,
 							 ObjectIdGetDatum(opclass),
 							 ObjectIdGetDatum(oprno),
 							 ObjectIdGetDatum(amopid),
@@ -72,8 +71,7 @@ get_attname(Oid relid, AttrNumber attnum)
 {
 	FormData_pg_attribute att_tup;
 
-	if (SearchSysCacheStruct(ATTNUM,
-							 (char *) &att_tup,
+	if (SearchSysCacheStruct(ATTNUM, (char *) &att_tup,
 							 ObjectIdGetDatum(relid),
 							 UInt16GetDatum(attnum),
 							 0, 0))
@@ -115,8 +113,7 @@ get_atttype(Oid relid, AttrNumber attnum)
 {
 	AttributeTupleForm att_tup = (AttributeTupleForm) palloc(sizeof(*att_tup));
 
-	if (SearchSysCacheStruct(ATTNUM,
-							 (char *) att_tup,
+	if (SearchSysCacheStruct(ATTNUM, (char *) att_tup,
 							 ObjectIdGetDatum(relid),
 							 UInt16GetDatum(attnum),
 							 0, 0))
@@ -132,24 +129,24 @@ get_atttype(Oid relid, AttrNumber attnum)
 bool
 get_attisset(Oid relid, char *attname)
 {
-	HeapTuple	htup;
+	HeapTuple	tuple;
 	AttrNumber	attno;
 	AttributeTupleForm att_tup;
 
 	attno = get_attnum(relid, attname);
 
-	htup = SearchSysCacheTuple(ATTNAME,
+	tuple = SearchSysCacheTuple(ATTNAME,
 							   ObjectIdGetDatum(relid),
 							   PointerGetDatum(attname),
 							   0, 0);
-	if (!HeapTupleIsValid(htup))
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "get_attisset: no attribute %s in relation %d",
 			 attname, relid);
-	if (heap_attisnull(htup, attno))
+	if (heap_attisnull(tuple, attno))
 		return false;
 	else
 	{
-		att_tup = (AttributeTupleForm) GETSTRUCT(htup);
+		att_tup = (AttributeTupleForm) GETSTRUCT(tuple);
 		return att_tup->attisset;
 	}
 }
@@ -166,10 +163,9 @@ get_atttypmod(Oid relid, AttrNumber attnum)
 {
 	FormData_pg_attribute att_tup;
 
-	if (SearchSysCacheStruct(ATTNUM,
-							 (char *) &att_tup,
+	if (SearchSysCacheStruct(ATTNUM, (char *) &att_tup,
 							 ObjectIdGetDatum(relid),
-							 Int32GetDatum(attnum),
+							 Int16GetDatum(attnum),
 							 0, 0))
 		return att_tup.atttypmod;
 	else
@@ -400,8 +396,7 @@ get_rel_name(Oid relid)
 {
 	FormData_pg_class reltup;
 
-	if ((SearchSysCacheStruct(RELOID,
-							  (char *) &reltup,
+	if ((SearchSysCacheStruct(RELOID, (char *) &reltup,
 							  ObjectIdGetDatum(relid),
 							  0, 0, 0)))
 		return pstrdup(reltup.relname.data);
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 92a1384b1a9e6c624958d92fe0d136131f9e8efb..432c65fdf373d10ed5b705facdd89ed0cde4a066 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.46 1998/08/11 18:28:22 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.47 1998/08/19 02:03:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -337,7 +337,6 @@ scan_pg_rel_seq(RelationBuildDescInfo buildinfo)
 	Relation	pg_class_desc;
 	HeapScanDesc pg_class_scan;
 	ScanKeyData key;
-	Buffer		buf;
 
 	/* ----------------
 	 *	form a scan key
@@ -371,9 +370,8 @@ scan_pg_rel_seq(RelationBuildDescInfo buildinfo)
 	pg_class_desc = heap_openr(RelationRelationName);
 	if (!IsInitProcessingMode())
 		RelationSetLockForRead(pg_class_desc);
-	pg_class_scan =
-		heap_beginscan(pg_class_desc, 0, SnapshotNow, 1, &key);
-	pg_class_tuple = heap_getnext(pg_class_scan, 0, &buf);
+	pg_class_scan = heap_beginscan(pg_class_desc, 0, SnapshotNow, 1, &key);
+	pg_class_tuple = heap_getnext(pg_class_scan, 0);
 
 	/* ----------------
 	 *	get set to return tuple
@@ -394,7 +392,6 @@ scan_pg_rel_seq(RelationBuildDescInfo buildinfo)
 		memmove((char *) return_tuple,
 				(char *) pg_class_tuple,
 				(int) pg_class_tuple->t_len);
-		ReleaseBuffer(buf);
 	}
 
 	/* all done */
@@ -534,15 +531,14 @@ build_tupdesc_seq(RelationBuildDescInfo buildinfo,
 	ScanKeyEntryInitialize(&key, 0,
 						   Anum_pg_attribute_attrelid,
 						   F_OIDEQ,
-						   ObjectIdGetDatum(relation->rd_id));
+						   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	/* ----------------
 	 *	open pg_attribute and begin a scan
 	 * ----------------
 	 */
 	pg_attribute_desc = heap_openr(AttributeRelationName);
-	pg_attribute_scan =
-		heap_beginscan(pg_attribute_desc, 0, SnapshotNow, 1, &key);
+	pg_attribute_scan = heap_beginscan(pg_attribute_desc, 0, SnapshotNow, 1, &key);
 
 	/* ----------------
 	 *	add attribute data to relation->rd_att
@@ -550,7 +546,7 @@ build_tupdesc_seq(RelationBuildDescInfo buildinfo,
 	 */
 	need = natts;
 
-	pg_attribute_tuple = heap_getnext(pg_attribute_scan, 0, (Buffer *) NULL);
+	pg_attribute_tuple = heap_getnext(pg_attribute_scan, 0);
 	while (HeapTupleIsValid(pg_attribute_tuple) && need > 0)
 	{
 		attp = (AttributeTupleForm) GETSTRUCT(pg_attribute_tuple);
@@ -565,13 +561,12 @@ build_tupdesc_seq(RelationBuildDescInfo buildinfo,
 					ATTRIBUTE_TUPLE_SIZE);
 			need--;
 		}
-		pg_attribute_tuple = heap_getnext(pg_attribute_scan,
-										  0, (Buffer *) NULL);
+		pg_attribute_tuple = heap_getnext(pg_attribute_scan, 0);
 	}
 
 	if (need > 0)
 		elog(ERROR, "catalog is missing %d attribute%s for relid %d",
-			 need, (need == 1 ? "" : "s"), relation->rd_id);
+			 need, (need == 1 ? "" : "s"), RelationGetRelid(relation));
 
 	/* ----------------
 	 *	end the scan and close the attribute relation
@@ -600,8 +595,8 @@ build_tupdesc_ind(RelationBuildDescInfo buildinfo,
 
 	for (i = 1; i <= relation->rd_rel->relnatts; i++)
 	{
-
-		atttup = (HeapTuple) AttributeNumIndexScan(attrel, relation->rd_id, i);
+		atttup = (HeapTuple) AttributeNumIndexScan(attrel,
+							RelationGetRelid(relation), i);
 
 		if (!HeapTupleIsValid(atttup))
 			elog(ERROR, "cannot find attribute %d of relation %s", i,
@@ -705,24 +700,21 @@ RelationBuildRuleLock(Relation relation)
 	ScanKeyEntryInitialize(&key, 0,
 						   Anum_pg_rewrite_ev_class,
 						   F_OIDEQ,
-						   ObjectIdGetDatum(relation->rd_id));
+						   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	/* ----------------
 	 *	open pg_attribute and begin a scan
 	 * ----------------
 	 */
 	pg_rewrite_desc = heap_openr(RewriteRelationName);
-	pg_rewrite_scan =
-		heap_beginscan(pg_rewrite_desc, 0, SnapshotNow, 1, &key);
-	pg_rewrite_tupdesc =
-		RelationGetTupleDescriptor(pg_rewrite_desc);
+	pg_rewrite_scan = heap_beginscan(pg_rewrite_desc, 0, SnapshotNow, 1, &key);
+	pg_rewrite_tupdesc = RelationGetTupleDescriptor(pg_rewrite_desc);
 
 	/* ----------------
 	 *	add attribute data to relation->rd_att
 	 * ----------------
 	 */
-	while ((pg_rewrite_tuple = heap_getnext(pg_rewrite_scan, 0,
-											(Buffer *) NULL)) != NULL)
+	while (HeapTupleIsValid(pg_rewrite_tuple=heap_getnext(pg_rewrite_scan, 0)))
 	{
 		bool		isnull;
 		Datum		ruleaction;
@@ -867,7 +859,7 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo)
 	 *	initialize the relation's relation id (relation->rd_id)
 	 * ----------------
 	 */
-	relation->rd_id = relid;
+	RelationGetRelid(relation) = relid;
 
 	/* ----------------
 	 *	initialize relation->rd_refcnt
@@ -1093,7 +1085,7 @@ formrdesc(char *relationName,
 	 *	initialize relation id
 	 * ----------------
 	 */
-	relation->rd_id = relation->rd_att->attrs[0]->attrelid;
+	RelationGetRelid(relation) = relation->rd_att->attrs[0]->attrelid;
 
 	/* ----------------
 	 *	add new reldesc to relcache
@@ -1109,7 +1101,7 @@ formrdesc(char *relationName,
 	 * the check (and possible set) after cache insertion.
 	 */
 	relation->rd_rel->relhasindex =
-		CatalogHasIndex(relationName, relation->rd_id);
+		CatalogHasIndex(relationName, RelationGetRelid(relation));
 }
 
 
@@ -1328,7 +1320,7 @@ RelationFlushRelation(Relation *relationPtr,
 		RelationCacheDelete(relation);
 
 		FreeTupleDesc(relation->rd_att);
-		SystemCacheRelationFlushed(relation->rd_id);
+		SystemCacheRelationFlushed(RelationGetRelid(relation));
 
 		FreeTriggerDesc(relation);
 
@@ -1379,7 +1371,7 @@ RelationForgetRelation(Oid rid)
 			Relation	reln = lfirst(curr);
 
 			Assert(reln != NULL && reln->rd_islocal);
-			if (reln->rd_id == rid)
+			if (RelationGetRelid(reln) == rid)
 				break;
 			prev = curr;
 		}
@@ -1678,7 +1670,6 @@ AttrDefaultFetch(Relation relation)
 	Form_pg_attrdef adform;
 	IndexScanDesc sd;
 	RetrieveIndexResult indexRes;
-	Buffer		buffer;
 	ItemPointer iptr;
 	struct varlena *val;
 	bool		isnull;
@@ -1689,7 +1680,7 @@ AttrDefaultFetch(Relation relation)
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
-						   ObjectIdGetDatum(relation->rd_id));
+						   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	adrel = heap_openr(AttrDefaultRelationName);
 	irel = index_openr(AttrDefaultIndex);
@@ -1698,6 +1689,8 @@ AttrDefaultFetch(Relation relation)
 
 	for (found = 0;;)
 	{
+		Buffer	buffer;
+		
 		indexRes = index_getnext(sd, ForwardScanDirection);
 		if (!indexRes)
 			break;
@@ -1736,12 +1729,12 @@ AttrDefaultFetch(Relation relation)
 			attrdef[i].adsrc = textout(val);
 			break;
 		}
-
+		ReleaseBuffer(buffer);
+		
 		if (i >= ndef)
 			elog(ERROR, "AttrDefaultFetch: unexpected record found for attr %d in rel %s",
 				 adform->adnum,
 				 relation->rd_rel->relname.data);
-		ReleaseBuffer(buffer);
 	}
 
 	if (found < ndef)
@@ -1752,7 +1745,6 @@ AttrDefaultFetch(Relation relation)
 	pfree(sd);
 	index_close(irel);
 	heap_close(adrel);
-
 }
 
 static void
@@ -1766,7 +1758,6 @@ RelCheckFetch(Relation relation)
 	HeapTuple	tuple;
 	IndexScanDesc sd;
 	RetrieveIndexResult indexRes;
-	Buffer		buffer;
 	ItemPointer iptr;
 	Name		rcname;
 	struct varlena *val;
@@ -1777,7 +1768,7 @@ RelCheckFetch(Relation relation)
 						   (bits16) 0x0,
 						   (AttrNumber) 1,
 						   (RegProcedure) F_OIDEQ,
-						   ObjectIdGetDatum(relation->rd_id));
+						   ObjectIdGetDatum(RelationGetRelid(relation)));
 
 	rcrel = heap_openr(RelCheckRelationName);
 	irel = index_openr(RelCheckIndex);
@@ -1786,6 +1777,8 @@ RelCheckFetch(Relation relation)
 
 	for (found = 0;;)
 	{
+		Buffer buffer;
+		
 		indexRes = index_getnext(sd, ForwardScanDirection);
 		if (!indexRes)
 			break;
@@ -1821,7 +1814,6 @@ RelCheckFetch(Relation relation)
 				 relation->rd_rel->relname.data);
 		check[found].ccsrc = textout(val);
 		found++;
-
 		ReleaseBuffer(buffer);
 	}
 
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index e98a26a60b75bec2e1f24d0d31ae5ac166c2ea32..7b4a411d1721602f5589c6ebf887e1130d14f9d8 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.19 1998/07/20 16:57:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.20 1998/08/19 02:03:15 momjian Exp $
  *
  * NOTES
  *	  These routines allow the parser/planner/executor to perform
@@ -67,262 +67,320 @@ typedef HeapTuple (*ScanFunc) ();
 static struct cachedesc cacheinfo[] = {
 	{AccessMethodOperatorRelationName,	/* AMOPOPID */
 		3,
-		{Anum_pg_amop_amopclaid,
+		{
+			Anum_pg_amop_amopclaid,
 			Anum_pg_amop_amopopr,
 			Anum_pg_amop_amopid,
-		0},
+			0
+		},
 		sizeof(FormData_pg_amop),
 		NULL,
 	(ScanFunc) NULL},
 	{AccessMethodOperatorRelationName,	/* AMOPSTRATEGY */
 		3,
-		{Anum_pg_amop_amopid,
+		{
+			Anum_pg_amop_amopid,
 			Anum_pg_amop_amopclaid,
 			Anum_pg_amop_amopstrategy,
-		0},
+			0
+		},
 		sizeof(FormData_pg_amop),
 		NULL,
 	(ScanFunc) NULL},
 	{AttributeRelationName,		/* ATTNAME */
 		2,
-		{Anum_pg_attribute_attrelid,
+		{
+			Anum_pg_attribute_attrelid,
 			Anum_pg_attribute_attname,
 			0,
-		0},
+			0
+		},
 		ATTRIBUTE_TUPLE_SIZE,
 		AttributeNameIndex,
 	(ScanFunc) AttributeNameIndexScan},
 	{AttributeRelationName,		/* ATTNUM */
 		2,
-		{Anum_pg_attribute_attrelid,
+		{
+			Anum_pg_attribute_attrelid,
 			Anum_pg_attribute_attnum,
 			0,
-		0},
+			0
+		},
 		ATTRIBUTE_TUPLE_SIZE,
 		AttributeNumIndex,
 	(ScanFunc) AttributeNumIndexScan},
 	{IndexRelationName,			/* INDEXRELID */
 		1,
-		{Anum_pg_index_indexrelid,
+		{
+			Anum_pg_index_indexrelid,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_index, indpred),
 		NULL,
 	NULL},
 	{LanguageRelationName,		/* LANNAME */
 		1,
-		{Anum_pg_language_lanname,
+		{
+			Anum_pg_language_lanname,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_language, lancompiler),
 		NULL,
 	NULL},
 	{OperatorRelationName,		/* OPRNAME */
 		4,
-		{Anum_pg_operator_oprname,
+		{
+			Anum_pg_operator_oprname,
 			Anum_pg_operator_oprleft,
 			Anum_pg_operator_oprright,
-		Anum_pg_operator_oprkind},
+			Anum_pg_operator_oprkind
+		},
 		sizeof(FormData_pg_operator),
 		NULL,
 	NULL},
 	{OperatorRelationName,		/* OPROID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_operator),
 		NULL,
 	(ScanFunc) NULL},
 	{ProcedureRelationName,		/* PRONAME */
 		3,
-		{Anum_pg_proc_proname,
+		{
+			Anum_pg_proc_proname,
 			Anum_pg_proc_pronargs,
 			Anum_pg_proc_proargtypes,
-		0},
+			0
+		},
 		offsetof(FormData_pg_proc, prosrc),
 		ProcedureNameIndex,
 	(ScanFunc) ProcedureNameIndexScan},
 	{ProcedureRelationName,		/* PROOID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_proc, prosrc),
 		ProcedureOidIndex,
 	(ScanFunc) ProcedureOidIndexScan},
 	{RelationRelationName,		/* RELNAME */
 		1,
-		{Anum_pg_class_relname,
+		{
+			Anum_pg_class_relname,
 			0,
 			0,
-		0},
+			0
+		},
 		CLASS_TUPLE_SIZE,
 		ClassNameIndex,
 	(ScanFunc) ClassNameIndexScan},
 	{RelationRelationName,		/* RELOID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		CLASS_TUPLE_SIZE,
 		ClassOidIndex,
 	(ScanFunc) ClassOidIndexScan},
 	{TypeRelationName,			/* TYPNAME */
 		1,
-		{Anum_pg_type_typname,
+		{
+			Anum_pg_type_typname,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(TypeTupleFormData, typalign) +sizeof(char),
 		TypeNameIndex,
 	TypeNameIndexScan},
 	{TypeRelationName,			/* TYPOID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(TypeTupleFormData, typalign) +sizeof(char),
 		TypeOidIndex,
 	TypeOidIndexScan},
 	{AccessMethodRelationName,	/* AMNAME */
 		1,
-		{Anum_pg_am_amname,
+		{
+			Anum_pg_am_amname,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_am),
 		NULL,
 	NULL},
 	{OperatorClassRelationName, /* CLANAME */
 		1,
-		{Anum_pg_opclass_opcname,
+		{
+			Anum_pg_opclass_opcname,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_opclass),
 		NULL,
 	NULL},
-	{IndexRelationName,			/* INDRELIDKEY */
+	{IndexRelationName,			/* INDRELIDKEY */ /* never used */
 		2,
-		{Anum_pg_index_indrelid,
+		{
+			Anum_pg_index_indrelid,
 			Anum_pg_index_indkey,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_index, indpred),
 		NULL,
 	(ScanFunc) NULL},
 	{InheritsRelationName,		/* INHRELID */
 		2,
-		{Anum_pg_inherits_inhrel,
+		{
+			Anum_pg_inherits_inhrel,
 			Anum_pg_inherits_inhseqno,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_inherits),
 		NULL,
 	(ScanFunc) NULL},
 	{RewriteRelationName,		/* RULOID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_rewrite, ev_qual),
 		NULL,
 	(ScanFunc) NULL},
 	{AggregateRelationName,		/* AGGNAME */
 		2,
-		{Anum_pg_aggregate_aggname,
+		{
+			Anum_pg_aggregate_aggname,
 			Anum_pg_aggregate_aggbasetype,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_aggregate, agginitval1),
 		NULL,
 	(ScanFunc) NULL},
 	{ListenerRelationName,		/* LISTENREL */
 		2,
-		{Anum_pg_listener_relname,
+		{
+			Anum_pg_listener_relname,
 			Anum_pg_listener_pid,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_listener),
 		NULL,
 	(ScanFunc) NULL},
 	{ShadowRelationName,		/* USENAME */
 		1,
-		{Anum_pg_shadow_usename,
+		{
+			Anum_pg_shadow_usename,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_shadow),
 		NULL,
 	(ScanFunc) NULL},
 	{ShadowRelationName,		/* USESYSID */
 		1,
-		{Anum_pg_shadow_usesysid,
+		{
+			Anum_pg_shadow_usesysid,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_shadow),
 		NULL,
 	(ScanFunc) NULL},
 	{GroupRelationName,			/* GRONAME */
 		1,
-		{Anum_pg_group_groname,
+		{
+			Anum_pg_group_groname,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_group, grolist[0]),
 		NULL,
 	(ScanFunc) NULL},
 	{GroupRelationName,			/* GROSYSID */
 		1,
-		{Anum_pg_group_grosysid,
+		{
+			Anum_pg_group_grosysid,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_group, grolist[0]),
 		NULL,
 	(ScanFunc) NULL},
 	{RewriteRelationName,		/* REWRITENAME */
 		1,
-		{Anum_pg_rewrite_rulename,
+		{
+			Anum_pg_rewrite_rulename,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_rewrite, ev_qual),
 		NULL,
 	(ScanFunc) NULL},
 	{ProcedureRelationName,		/* PROSRC */
 		1,
-		{Anum_pg_proc_prosrc,
+		{
+			Anum_pg_proc_prosrc,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_proc, prosrc),
 		ProcedureSrcIndex,
 	(ScanFunc) ProcedureSrcIndexScan},
 	{OperatorClassRelationName, /* CLADEFTYPE */
 		1,
-		{Anum_pg_opclass_opcdeftype,
+		{
+			Anum_pg_opclass_opcdeftype,
 			0,
 			0,
-		0},
+			0
+		},
 		sizeof(FormData_pg_opclass),
 		NULL,
 	(ScanFunc) NULL},
 	{LanguageRelationName,		/* LANOID */
 		1,
-		{ObjectIdAttributeNumber,
+		{
+			ObjectIdAttributeNumber,
 			0,
 			0,
-		0},
+			0
+		},
 		offsetof(FormData_pg_language, lancompiler),
 		NULL,
 	NULL}
@@ -380,16 +438,39 @@ InitCatalogCache()
 		}
 	}
 }
+/*
+ * SearchSysCacheTupleCopy--
+ *
+ *	THis is like SearchSysCacheTuple, except it returns a copy of the tuple
+ *	that the user is required to pfree().
+ */
+HeapTuple
+SearchSysCacheTupleCopy(int cacheId,/* cache selection code */
+					Datum key1,
+					Datum key2,
+					Datum key3,
+					Datum key4)
+{
+	HeapTuple	cachetup;
+
+	cachetup = SearchSysCacheTuple(cacheId, key1, key2, key3, key4);
+	if (PointerIsValid(cachetup))
+		return heap_copytuple(cachetup);
+	else
+		return cachetup; /* NULL */
+}
+					
 
 /*
  * SearchSysCacheTuple--
  *
- *	  A layer on top of SearchSysCache that does the initialization and
- *	  key-setting for you.
+ *	A layer on top of SearchSysCache that does the initialization and
+ *	key-setting for you.
  *
- * Returns the tuple if one is found, NULL if not.
+ *	Returns the cache copy of the tuple if one is found, NULL if not.
+ *	The tuple is the 'cache' copy.
  *
- * XXX The tuple that is returned is NOT supposed to be pfree'd!
+ *	XXX The tuple that is returned is NOT supposed to be pfree'd!
  */
 HeapTuple
 SearchSysCacheTuple(int cacheId,/* cache selection code */
@@ -542,7 +623,6 @@ SearchSysCacheGetAttribute(int cacheId,
 
 	if (isNull)
 	{
-
 		/*
 		 * Used to be an elog(DEBUG, ...) here and a claim that it should
 		 * be a FATAL error, I don't think either is warranted -mer 6/9/92
@@ -622,7 +702,6 @@ TypeDefaultRetrieve(Oid typId)
 			 cacheinfo[TYPOID].name, TYPOID);
 #endif							/* defined(CACHEDEBUG) */
 		return (NULL);
-
 	}
 
 	dataSize = VARSIZE(typDefault) - VARHDRSZ;
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index e92878019b43e7f567581e5989709ffe27e7bb4e..d506ac1f57ac77f12fda7f8e72bade5cd5e32890 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.18 1998/06/15 19:29:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.19 1998/08/19 02:03:16 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -58,7 +58,7 @@ fmgr_dynamic(Oid procedureId, int *pronargs)
 			   *probinstring;
 	Datum		probinattr;
 	func_ptr	user_fn;
-	Relation	rdesc;
+	Relation	rel;
 	bool		isnull;
 
 	if (procedureId == procedureId_save)
@@ -71,7 +71,8 @@ fmgr_dynamic(Oid procedureId, int *pronargs)
 	 * The procedure isn't a builtin, so we'll have to do a catalog lookup
 	 * to find its pg_proc entry.
 	 */
-	procedureTuple = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(procedureId),
+	procedureTuple = SearchSysCacheTuple(PROOID,
+										 ObjectIdGetDatum(procedureId),
 										 0, 0, 0);
 	if (!HeapTupleIsValid(procedureTuple))
 	{
@@ -87,13 +88,13 @@ fmgr_dynamic(Oid procedureId, int *pronargs)
 	/*
 	 * Extract the procedure info from the pg_proc tuple. Since probin is
 	 * varlena, do a amgetattr() on the procedure tuple.  To do that, we
-	 * need the rdesc for the procedure relation, so...
+	 * need the rel for the procedure relation, so...
 	 */
 
 	/* open pg_procedure */
 
-	rdesc = heap_openr(ProcedureRelationName);
-	if (!RelationIsValid(rdesc))
+	rel = heap_openr(ProcedureRelationName);
+	if (!RelationIsValid(rel))
 	{
 		elog(ERROR, "fmgr: Could not open relation %s",
 			 ProcedureRelationName);
@@ -101,10 +102,10 @@ fmgr_dynamic(Oid procedureId, int *pronargs)
 	}
 	probinattr = heap_getattr(procedureTuple,
 							  Anum_pg_proc_probin,
-							  RelationGetTupleDescriptor(rdesc), &isnull);
+							  RelationGetTupleDescriptor(rel), &isnull);
 	if (!PointerIsValid(probinattr) /* || isnull */ )
 	{
-		heap_close(rdesc);
+		heap_close(rel);
 		elog(ERROR, "fmgr: Could not extract probin for %d from %s",
 			 procedureId, ProcedureRelationName);
 		return ((func_ptr) NULL);
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index c2a5b53aeb6571ba775140e84759c558cafc0274..217aa39a2b1b2e3dc0dab9f9e2552d3f60686245 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.17 1998/06/15 19:29:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.18 1998/08/19 02:03:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -172,7 +172,7 @@ fmgr_info(Oid procedureId, FmgrInfo *finfo)
 	if (!(fcp = fmgr_isbuiltin(procedureId)))
 	{
 		procedureTuple = SearchSysCacheTuple(PROOID,
-										   ObjectIdGetDatum(procedureId),
+										   	 ObjectIdGetDatum(procedureId),
 											 0, 0, 0);
 		if (!HeapTupleIsValid(procedureTuple))
 		{
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 375f7b6936f9e06856d446e8f062f1c1570d55c8..1a3d4bc8506156da284b0733324ce702062fdaa9 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.19 1998/08/11 18:28:25 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.20 1998/08/19 02:03:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -468,8 +468,9 @@ SetUserId()
 	}
 
 	userName = GetPgUserName();
-	userTup = SearchSysCacheTuple(USENAME, PointerGetDatum(userName),
-								  0, 0, 0);
+	userTup = SearchSysCacheTuple(USENAME,
+									PointerGetDatum(userName),
+								  	0, 0, 0);
 	if (!HeapTupleIsValid(userTup))
 		elog(FATAL, "SetUserId: user \"%s\" is not in \"%s\"",
 			 userName,
diff --git a/src/backend/utils/misc/database.c b/src/backend/utils/misc/database.c
index 9419004042dd445b297ba077ca69260d7bac3026..fa2bb2f1d8b835c20979b7a2b750123634febb9f 100644
--- a/src/backend/utils/misc/database.c
+++ b/src/backend/utils/misc/database.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.15 1998/08/11 18:28:30 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.16 1998/08/19 02:03:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -45,7 +45,6 @@ GetDatabaseInfo(char *name, int4 *owner, char *path)
 	Relation	dbrel;
 	HeapTuple	dbtup;
 	HeapTuple	tup;
-	Buffer		buf;
 	HeapScanDesc scan;
 	ScanKeyData scanKey;
 
@@ -64,13 +63,10 @@ GetDatabaseInfo(char *name, int4 *owner, char *path)
 	/*
 	 * Since we're going to close the relation, copy the tuple.
 	 */
-	tup = heap_getnext(scan, 0, &buf);
+	tup = heap_getnext(scan, 0);
 
 	if (HeapTupleIsValid(tup))
-	{
 		dbtup = heap_copytuple(tup);
-		ReleaseBuffer(buf);
-	}
 	else
 		dbtup = tup;
 
diff --git a/src/backend/utils/misc/superuser.c b/src/backend/utils/misc/superuser.c
index c2af5a182a7d08884bdef5b5e3fd8e6330ba0102..d5889b8733d47376b117255a16945c0ec3f24f61 100644
--- a/src/backend/utils/misc/superuser.c
+++ b/src/backend/utils/misc/superuser.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/misc/superuser.c,v 1.5 1998/02/25 13:08:23 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/misc/superuser.c,v 1.6 1998/08/19 02:03:25 momjian Exp $
  *
  * DESCRIPTION
  *	  See superuser().
@@ -30,8 +30,9 @@ superuser(void)
 
 	HeapTuple	utup;
 
-	utup = SearchSysCacheTuple(USENAME, PointerGetDatum(UserName),
-							   0, 0, 0);
+	utup = SearchSysCacheTuple(USENAME,
+								PointerGetDatum(UserName),
+							   	0, 0, 0);
 	Assert(utup != NULL);
 	return ((Form_pg_shadow) GETSTRUCT(utup))->usesuper;
 }
diff --git a/src/backend/utils/time/tqual.c b/src/backend/utils/time/tqual.c
index 14b961f066916714c68a5faa656b47cbeb40d342..6c08bd355f12433bb2dbb828ea52b15a8ec4b2ba 100644
--- a/src/backend/utils/time/tqual.c
+++ b/src/backend/utils/time/tqual.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.16 1998/06/15 19:29:58 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.17 1998/08/19 02:03:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -40,7 +40,7 @@ setheapoverride(bool on)
 	if (on)
 	{
 		TransactionIdStore(GetCurrentTransactionId(),
-						   &HeapSpecialTransactionId);
+							&HeapSpecialTransactionId);
 		HeapSpecialCommandId = GetCurrentCommandId();
 	}
 	else
diff --git a/src/include/access/genam.h b/src/include/access/genam.h
index c9ec32801953b3d4eb86f65354ee62368d789d4f..1494665b33e2cacda62de65212b7fd7a58515569 100644
--- a/src/include/access/genam.h
+++ b/src/include/access/genam.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: genam.h,v 1.13 1998/02/26 12:14:54 vadim Exp $
+ * $Id: genam.h,v 1.14 1998/08/19 02:03:35 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,7 +47,7 @@ index_getprocid(Relation irel, AttrNumber attnum,
 extern Datum
 GetIndexValue(HeapTuple tuple, TupleDesc hTupDesc,
 			  int attOff, AttrNumber attrNums[], FuncIndexInfo *fInfo,
-			  bool *attNull, Buffer buffer);
+			  bool *attNull);
 
 /* in genam.c */
 extern IndexScanDesc
diff --git a/src/include/access/hash.h b/src/include/access/hash.h
index f96936541c1e7ecacb397c2dab1b75bb2eac3c21..4c21adde10ec5df0c843986aea974b029d196278 100644
--- a/src/include/access/hash.h
+++ b/src/include/access/hash.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: hash.h,v 1.16 1998/04/26 04:08:41 momjian Exp $
+ * $Id: hash.h,v 1.17 1998/08/19 02:03:37 momjian Exp $
  *
  * NOTES
  *		modeled after Margo Seltzer's hash implementation for unix.
@@ -271,6 +271,7 @@ extern uint32 hashint4(uint32 key);
 extern uint32 hashfloat4(float32 keyp);
 extern uint32 hashfloat8(float64 keyp);
 extern uint32 hashoid(Oid key);
+extern uint32 hashoid8(Oid key[]);
 extern uint32 hashchar(char key);
 extern uint32 hashtext(struct varlena * key);
 extern uint32 hashname(NameData *n);
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index a28d06db987c2fc25d3f9855275b841970dea0a4..777f1acbe3e7fccc915caea3af9579062e8c07f4 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: heapam.h,v 1.34 1998/07/27 19:38:29 vadim Exp $
+ * $Id: heapam.h,v 1.35 1998/08/19 02:03:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -249,17 +249,17 @@ extern void heap_close(Relation relation);
 extern HeapScanDesc
 heap_beginscan(Relation relation, int atend,
 			   Snapshot snapshot, unsigned nkeys, ScanKey key);
-extern void heap_rescan(HeapScanDesc sdesc, bool scanFromEnd, ScanKey key);
-extern void heap_endscan(HeapScanDesc sdesc);
-extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw, Buffer *b);
-extern HeapTuple heap_fetch(Relation relation, Snapshot snapshot, ItemPointer tid, Buffer *b);
+extern void heap_rescan(HeapScanDesc scan, bool scanFromEnd, ScanKey key);
+extern void heap_endscan(HeapScanDesc scan);
+extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw);
+extern HeapTuple heap_fetch(Relation relation, Snapshot snapshot, ItemPointer tid, Buffer *userbuf);
 extern Oid	heap_insert(Relation relation, HeapTuple tup);
 extern int	heap_delete(Relation relation, ItemPointer tid);
 extern int
 heap_replace(Relation relation, ItemPointer otid,
 			 HeapTuple tup);
-extern void heap_markpos(HeapScanDesc sdesc);
-extern void heap_restrpos(HeapScanDesc sdesc);
+extern void heap_markpos(HeapScanDesc scan);
+extern void heap_restrpos(HeapScanDesc scan);
 
 /* in common/heaptuple.c */
 extern Size ComputeDataSize(TupleDesc tupleDesc, Datum value[], char nulls[]);
@@ -279,8 +279,8 @@ extern HeapTuple
 heap_formtuple(TupleDesc tupleDescriptor,
 			   Datum value[], char nulls[]);
 extern HeapTuple
-heap_modifytuple(HeapTuple tuple, Buffer buffer,
-	 Relation relation, Datum replValue[], char replNull[], char repl[]);
+heap_modifytuple(HeapTuple tuple,
+		Relation relation, Datum replValue[], char replNull[], char repl[]);
 HeapTuple	heap_addheader(uint32 natts, int structlen, char *structure);
 
 /* in common/heap/stats.c */
diff --git a/src/include/access/tupdesc.h b/src/include/access/tupdesc.h
index add88f5e77d2bc92deedbdf839b45bb3e7c632de..402bab9229d08cbf7caca92342c3b2c6b5390461 100644
--- a/src/include/access/tupdesc.h
+++ b/src/include/access/tupdesc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tupdesc.h,v 1.17 1998/07/12 21:29:26 momjian Exp $
+ * $Id: tupdesc.h,v 1.18 1998/08/19 02:03:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,7 +53,7 @@ typedef struct tupleDesc
 	AttributeTupleForm *attrs;
 	/* attrs[N] is a pointer to the description of Attribute Number N+1.  */
 	TupleConstr *constr;
-}		   *TupleDesc;
+} *TupleDesc;
 
 extern TupleDesc CreateTemplateTupleDesc(int natts);
 
diff --git a/src/include/catalog/duplicate_oids b/src/include/catalog/duplicate_oids
index caf43a80106dbd6d02ba058914a54496b09007ed..7d5cd2eafdc9b2b97db6c2609ebceab189c2cbcd 100755
--- a/src/include/catalog/duplicate_oids
+++ b/src/include/catalog/duplicate_oids
@@ -5,7 +5,10 @@
 # finds oids that are duplicated in the system tables.
 #
 
-egrep '^DATA' pg_*.h | \
+# no multibytes files
+FILES=`ls pg_*.h |grep -v '_mb.h'`
+
+egrep '^DATA' $FILES | \
 	sed -e 's/^.*OID[^=]*=[^0-9]*//' -e 's/[^0-9].*$//' | \
 	sort -n >/tmp/alloids.$$
 uniq /tmp/alloids.$$ >/tmp/uniqoids.$$
diff --git a/src/include/catalog/heap.h b/src/include/catalog/heap.h
index 3caebe74449ff40decbfb5797cfe0455194c1b3b..f3369a3b39a0d7fff18b7c1672d114a9666f6f62 100644
--- a/src/include/catalog/heap.h
+++ b/src/include/catalog/heap.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: heap.h,v 1.13 1998/08/06 05:13:01 momjian Exp $
+ * $Id: heap.h,v 1.14 1998/08/19 02:03:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,7 +21,7 @@ extern Oid	heap_create_with_catalog(char *relname,
 									 TupleDesc tupdesc, char relkind);
 
 extern void heap_destroy_with_catalog(char relname[]);
-extern void heap_destroy(Relation r);
+extern void heap_destroy(Relation rel);
 
 extern void InitTempRelList(void);
 extern void DestroyTempRels(void);
diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h
index 1667b75091d1eceab2f362d6032f488ed138ef3d..15d3663a5ad43eaecc8aaba977225f9a0692e06f 100644
--- a/src/include/catalog/index.h
+++ b/src/include/catalog/index.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: index.h,v 1.10 1998/02/26 04:40:40 momjian Exp $
+ * $Id: index.h,v 1.11 1998/08/19 02:03:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,7 +47,7 @@ extern void index_destroy(Oid indexId);
 extern void
 FormIndexDatum(int numberOfAttributes,
 			   AttrNumber attributeNumber[], HeapTuple heapTuple,
-			   TupleDesc heapDescriptor, Buffer buffer, Datum *datum,
+			   TupleDesc heapDescriptor, Datum *datum,
 			   char *nullv, FuncIndexInfoPtr fInfo);
 
 extern void UpdateStats(Oid relid, long reltuples, bool hasindex);
diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h
index bd3c6127dd964eae582a42eb469c2daab825f517..003ae30c0e8ef3ddce806a41af4404bf596f167f 100644
--- a/src/include/catalog/indexing.h
+++ b/src/include/catalog/indexing.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: indexing.h,v 1.15 1998/02/26 04:40:42 momjian Exp $
+ * $Id: indexing.h,v 1.16 1998/08/19 02:03:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -37,7 +37,7 @@
 #define AttributeNumIndex  "pg_attribute_relid_attnum_index"
 #define AttributeRelidIndex "pg_attribute_attrelid_index"
 #define ProcedureOidIndex  "pg_proc_oid_index"
-#define ProcedureNameIndex "pg_proc_proname_index"
+#define ProcedureNameIndex "pg_proc_proname_narg_type_index"
 #define ProcedureSrcIndex  "pg_proc_prosrc_index"
 #define TypeOidIndex	   "pg_type_oid_index"
 #define TypeNameIndex	   "pg_type_typname_index"
@@ -85,7 +85,7 @@ AttributeNumIndexScan(Relation heapRelation,
 extern HeapTuple ProcedureOidIndexScan(Relation heapRelation, Oid procId);
 extern HeapTuple
 ProcedureNameIndexScan(Relation heapRelation,
-					   char *procName, int nargs, Oid *argTypes);
+					   char *procName, int2 nargs, Oid *argTypes);
 extern HeapTuple ProcedureSrcIndexScan(Relation heapRelation, text *procSrc);
 extern HeapTuple TypeOidIndexScan(Relation heapRelation, Oid typeId);
 extern HeapTuple TypeNameIndexScan(Relation heapRelation, char *typeName);
@@ -100,12 +100,12 @@ extern HeapTuple ClassOidIndexScan(Relation heapRelation, Oid relId);
  * The keyword is DECLARE_INDEX every thing after that is just like in a
  * normal specification of the 'define index' POSTQUEL command.
  */
-DECLARE_INDEX(pg_attribute_relid_attnam_index on pg_attribute using btree(mkoidname(attrelid, attname) oidname_ops));
-DECLARE_INDEX(pg_attribute_relid_attnum_index on pg_attribute using btree(mkoidint2(attrelid, attnum) oidint2_ops));
+DECLARE_INDEX(pg_attribute_relid_attnam_index on pg_attribute using btree(attrelid oid_ops, attname name_ops));
+DECLARE_INDEX(pg_attribute_relid_attnum_index on pg_attribute using btree(attrelid oid_ops, attnum int2_ops));
 DECLARE_INDEX(pg_attribute_attrelid_index on pg_attribute using btree(attrelid oid_ops));
 
 DECLARE_INDEX(pg_proc_oid_index on pg_proc using btree(oid oid_ops));
-DECLARE_INDEX(pg_proc_proname_index on pg_proc using btree(proname name_ops));
+DECLARE_INDEX(pg_proc_proname_narg_type_index on pg_proc using btree(proname name_ops, pronargs int2_ops, proargtypes oid8_ops));
 DECLARE_INDEX(pg_proc_prosrc_index on pg_proc using btree(prosrc text_ops));
 
 DECLARE_INDEX(pg_type_oid_index on pg_type using btree(oid oid_ops));
diff --git a/src/include/catalog/pg_am.h b/src/include/catalog/pg_am.h
index 2b1667c6b11f19887bb04d06e87b7c5112b33b29..05e9b797f8b9a125df0eee15b44216f57d03f63e 100644
--- a/src/include/catalog/pg_am.h
+++ b/src/include/catalog/pg_am.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_am.h,v 1.7 1998/08/11 18:28:37 momjian Exp $
+ * $Id: pg_am.h,v 1.8 1998/08/19 02:03:48 momjian Exp $
  *
  * NOTES
  *		the genbki.sh script reads this file and generates .bki
@@ -99,13 +99,13 @@ typedef FormData_pg_am *Form_pg_am;
  * ----------------
  */
 
-DATA(insert OID = 405 (  hash PGUID "o"  1 1 hashgettuple hashinsert hashdelete - - - - hashbeginscan hashrescan hashendscan hashmarkpos hashrestrpos - - hashbuild - - ));
-DESCR("");
 DATA(insert OID = 402 (  rtree PGUID "o" 8 3 rtgettuple rtinsert rtdelete - - - - rtbeginscan rtrescan rtendscan rtmarkpos rtrestrpos - - rtbuild - - ));
 DESCR("");
 DATA(insert OID = 403 (  btree PGUID "o" 5 1 btgettuple btinsert btdelete - - - - btbeginscan btrescan btendscan btmarkpos btrestrpos - - btbuild - - ));
 DESCR("");
 #define BTREE_AM_OID 403
+DATA(insert OID = 405 (  hash PGUID "o"  1 1 hashgettuple hashinsert hashdelete - - - - hashbeginscan hashrescan hashendscan hashmarkpos hashrestrpos - - hashbuild - - ));
+DESCR("");
 DATA(insert OID = 783 (  gist PGUID "o" 100 7 gistgettuple gistinsert gistdelete - - - - gistbeginscan gistrescan gistendscan gistmarkpos gistrestrpos - - gistbuild - - ));
 DESCR("");
 
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 590753fc9900477899e7f850f5e906ea67595015..2044bff6ea258afa5743515ac21537d21f328adc 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.13 1998/08/11 05:32:45 momjian Exp $
+ * $Id: pg_amop.h,v 1.14 1998/08/19 02:03:49 momjian Exp $
  *
  * NOTES
  *	 the genbki.sh script reads this file and generates .bki
@@ -177,6 +177,16 @@ DATA(insert OID = 0 (  403 427 607 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 427 612 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 427 610 5 btreesel btreenpage ));
 
+/*
+ *	nbtree oid8_ops
+ */
+
+DATA(insert OID = 0 (  403 435	645 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 435  647 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 435	649 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 435  648 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 435  646 5 btreesel btreenpage ));
+
 /*
  *	nbtree float4_ops
  */
@@ -227,36 +237,6 @@ DATA(insert OID = 0 (  403 432 560 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 432 565 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 432 563 5 btreesel btreenpage ));
 
-/*
- *	nbtree oidint4_ops
- */
-
-DATA(insert OID = 0 (  403 435 930 1 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 435 931 2 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 435 932 3 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 435 933 4 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 435 934 5 btreesel btreenpage ));
-
-/*
- *	nbtree oidint2_ops
- */
-
-DATA(insert OID = 0 (  403 437 830 1 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 437 831 2 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 437 832 3 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 437 833 4 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 437 834 5 btreesel btreenpage ));
-
-/*
- *	nbtree oidname_ops
- */
-
-DATA(insert OID = 0 (  403 436 676 1 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 436 677 2 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 436 678 3 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 436 679 4 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 436 680 5 btreesel btreenpage ));
-
 /*
  *	nbtree bpchar_ops
  */
@@ -330,6 +310,8 @@ DATA(insert OID = 0 (  405	423  670 1 hashsel hashnpage ));
 DATA(insert OID = 0 (  405	426   96 1 hashsel hashnpage ));
 /* oid_ops */
 DATA(insert OID = 0 (  405	427  607 1 hashsel hashnpage ));
+/* oid8_ops */
+DATA(insert OID = 0 (  405	435  679 1 hashsel hashnpage ));
 /* float4_ops */
 DATA(insert OID = 0 (  405	428  620 1 hashsel hashnpage ));
 /* char_ops */
diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h
index 3c4a192cfc1478176562a8177095d827d690ebb6..e1726a59619e79f4eea0687d11564e19bb7d1891 100644
--- a/src/include/catalog/pg_amproc.h
+++ b/src/include/catalog/pg_amproc.h
@@ -9,7 +9,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amproc.h,v 1.8 1998/08/11 05:32:46 momjian Exp $
+ * $Id: pg_amproc.h,v 1.9 1998/08/19 02:03:51 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -61,7 +61,8 @@ typedef FormData_pg_amproc *Form_pg_amproc;
  *		initial contents of pg_amproc
  * ----------------
  */
-
+ 
+/* rtree */
 DATA(insert OID = 0 (402  422  193 1));
 DATA(insert OID = 0 (402  422  194 2));
 DATA(insert OID = 0 (402  422  195 3));
@@ -71,6 +72,12 @@ DATA(insert OID = 0 (402  433  196 3));
 DATA(insert OID = 0 (402  434  197 1));
 DATA(insert OID = 0 (402  434  198 2));
 DATA(insert OID = 0 (402  434  199 3));
+
+
+/* btree */
+DATA(insert OID = 0 (403  406  689 1));
+DATA(insert OID = 0 (403  407  690 1));
+DATA(insert OID = 0 (403  408  691 1));
 DATA(insert OID = 0 (403  421  350 1));
 DATA(insert OID = 0 (403  423  355 1));
 DATA(insert OID = 0 (403  424  353 1));
@@ -79,39 +86,39 @@ DATA(insert OID = 0 (403  426  351 1));
 DATA(insert OID = 0 (403  427  356 1));
 DATA(insert OID = 0 (403  428  354 1));
 DATA(insert OID = 0 (403  429  358 1));
-DATA(insert OID = 0 (403  406  689 1));
-DATA(insert OID = 0 (403  407  690 1));
-DATA(insert OID = 0 (403  408  691 1));
-DATA(insert OID = 0 (403 1181  359 1));
 DATA(insert OID = 0 (403  430 1274 1));
 DATA(insert OID = 0 (403  431  360 1));
 DATA(insert OID = 0 (403  432  357 1));
-DATA(insert OID = 0 (403  435  928 1));
+DATA(insert OID = 0 (403  435  404 1));
 DATA(insert OID = 0 (403  436  948 1));
 DATA(insert OID = 0 (403  437  828 1));
 DATA(insert OID = 0 (403 1076 1078 1));
 DATA(insert OID = 0 (403 1077 1079 1));
 DATA(insert OID = 0 (403 1114 1092 1));
 DATA(insert OID = 0 (403 1115 1107 1));
+DATA(insert OID = 0 (403 1181  359 1));
 DATA(insert OID = 0 (403 1312 1314 1));
 DATA(insert OID = 0 (403 1313 1315 1));
 
+
+/* hash */
+DATA(insert OID = 0 (405  406  692 1));
+DATA(insert OID = 0 (405  407  693 1));
+DATA(insert OID = 0 (405  408  694 1));
 DATA(insert OID = 0 (405  421  449 1));
 DATA(insert OID = 0 (405  423  452 1));
 DATA(insert OID = 0 (405  426  450 1));
 DATA(insert OID = 0 (405  427  453 1));
 DATA(insert OID = 0 (405  428  451 1));
 DATA(insert OID = 0 (405  429  454 1));
-DATA(insert OID = 0 (405  406  692 1));
-DATA(insert OID = 0 (405  407  693 1));
-DATA(insert OID = 0 (405  408  694 1));
-DATA(insert OID = 0 (405 1181  455 1));
 DATA(insert OID = 0 (405  430 1281 1));
 DATA(insert OID = 0 (405  431  456 1));
+DATA(insert OID = 0 (405  435  457 1));
 DATA(insert OID = 0 (405 1076 1080 1));
 DATA(insert OID = 0 (405 1077 1081 1));
 DATA(insert OID = 0 (405 1114  450 1));
 DATA(insert OID = 0 (405 1115  452 1));
+DATA(insert OID = 0 (405 1181  455 1));
 DATA(insert OID = 0 (405 1312  452 1));
 DATA(insert OID = 0 (405 1313  452 1));
 
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index 10a20f91d63e6046d333aafa61abd38fd95bf59e..882830be0bb22ffa7239d1f58efd276ed7988d26 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_opclass.h,v 1.9 1998/04/26 04:09:00 momjian Exp $
+ * $Id: pg_opclass.h,v 1.10 1998/08/19 02:03:52 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -62,8 +62,6 @@ typedef FormData_pg_opclass *Form_pg_opclass;
  * (see the README in this directory), so just put zeros
  * in, which are invalid OID's anyway.  --djm
  */
-DATA(insert OID = 1181 (	name_ops		 19   ));
-DESCR("");
 DATA(insert OID =  421 (	int2_ops		 21   ));
 DESCR("");
 DATA(insert OID =  422 (	box_ops			603   ));
@@ -91,11 +89,7 @@ DATA(insert OID =  433 (	bigbox_ops		  0   ));
 DESCR("");
 DATA(insert OID =  434 (	poly_ops		604   ));
 DESCR("");
-DATA(insert OID =  435 (	oidint4_ops		910   ));
-DESCR("");
-DATA(insert OID =  436 (	oidname_ops		911   ));
-DESCR("");
-DATA(insert OID =  437 (	oidint2_ops		810   ));
+DATA(insert OID =  435 (	oid8_ops		 30   ));
 DESCR("");
 DATA(insert OID =  714 (	circle_ops		718   ));
 DESCR("");
@@ -107,6 +101,8 @@ DATA(insert OID = 1114 (	date_ops	   1082   ));
 DESCR("");
 DATA(insert OID = 1115 (	time_ops	   1083   ));
 DESCR("");
+DATA(insert OID = 1181 (	name_ops		 19   ));
+DESCR("");
 DATA(insert OID = 1312 (	datetime_ops   1184   ));
 DESCR("");
 DATA(insert OID = 1313 (	timespan_ops   1186   ));
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index 0a3820459bf4dc9fe965c3870f24d42c360678d8..9e11a79ed68069975c12a759e019f4fdb6f93cd5 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.33 1998/08/11 18:28:45 momjian Exp $
+ * $Id: pg_operator.h,v 1.34 1998/08/19 02:03:53 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -279,6 +279,14 @@ DATA(insert OID = 606 (  "<#>"		PGUID 0 b t f 702 702 704	0	0	0	0 mktinterval -
 DATA(insert OID = 607 (  "="	   PGUID 0 b t t  26  26  16 607 608 97 97 oideq eqsel eqjoinsel ));
 #define OIDEqualOperator 607	/* XXX planner/prep/semanopt.c crock */
 DATA(insert OID = 608 (  "<>"	   PGUID 0 b t f  26  26  16 608 607  0  0 oidne neqsel neqjoinsel ));
+
+DATA(insert OID = 644 (  "<>"	   PGUID 0 b t f  30  30  16 644 649  0  0 oid8ne neqsel neqjoinsel ));
+DATA(insert OID = 645 (  "<"	   PGUID 0 b t f  30  30  16 646 648  0  0 oid8lt intltsel intltjoinsel ));
+DATA(insert OID = 646 (  ">"	   PGUID 0 b t f  30  30  16 645 647  0  0 oid8gt intgtsel intgtjoinsel ));
+DATA(insert OID = 647 (  "<="	   PGUID 0 b t f  30  30  16 648 646  0  0 oid8le intltsel intltjoinsel ));
+DATA(insert OID = 648 (  ">="	   PGUID 0 b t f  30  30  16 647 645  0  0 oid8ge intgtsel intgtjoinsel ));
+DATA(insert OID = 649 (  "="	   PGUID 0 b t f  30  30  16 649 644  0  0 oid8eq eqsel eqjoinsel ));
+
 DATA(insert OID = 609 (  "<"	   PGUID 0 b t f  26  26  16 610 612  0  0 int4lt intltsel intltjoinsel ));
 DATA(insert OID = 610 (  ">"	   PGUID 0 b t f  26  26  16 609 611  0  0 int4gt intgtsel intgtjoinsel ));
 DATA(insert OID = 611 (  "<="	   PGUID 0 b t f  26  26  16 612 610  0  0 int4le intltsel intltjoinsel ));
@@ -337,13 +345,6 @@ DATA(insert OID = 673 (  "<="	   PGUID 0 b t f  701  701	16 675 674	0 0 float8le
 DATA(insert OID = 674 (  ">"	   PGUID 0 b t f  701  701	16 672 673	0 0 float8gt intltsel intltjoinsel ));
 DATA(insert OID = 675 (  ">="	   PGUID 0 b t f  701  701	16 673 672	0 0 float8ge intltsel intltjoinsel ));
 
-DATA(insert OID = 676 (  "<"	   PGUID 0 b t f  911  911	16 680 679	0 0 oidnamelt intltsel intltjoinsel ));
-DATA(insert OID = 677 (  "<="	   PGUID 0 b t f  911  911	16 679 680	0 0 oidnamele intltsel intltjoinsel ));
-DATA(insert OID = 678 (  "="	   PGUID 0 b t f  911  911	16 678 681	0 0 oidnameeq intltsel intltjoinsel ));
-DATA(insert OID = 679 (  ">="	   PGUID 0 b t f  911  911	16 677 676	0 0 oidnamege intltsel intltjoinsel ));
-DATA(insert OID = 680 (  ">"	   PGUID 0 b t f  911  911	16 676 677	0 0 oidnamegt intltsel intltjoinsel ));
-DATA(insert OID = 681 (  "<>"	   PGUID 0 b t f  911  911	16 681 678	0 0 oidnamene intltsel intltjoinsel ));
-
 DATA(insert OID = 684 (  "+"	   PGUID 0 b t f  20  20  20 684   0   0   0 int8pl - - ));
 DATA(insert OID = 685 (  "-"	   PGUID 0 b t f  20  20  20 685   0   0   0 int8mi - - ));
 DATA(insert OID = 686 (  "*"	   PGUID 0 b t f  20  20  20 686   0   0   0 int8mul - - ));
@@ -407,13 +408,6 @@ DATA(insert OID = 814 (  ">"	   PGUID 0 b t f 704 704  16 814   0   0   0 interv
 DATA(insert OID = 815 (  "<="	   PGUID 0 b t f 704 704  16 815   0   0   0 intervalle - - ));
 DATA(insert OID = 816 (  ">="	   PGUID 0 b t f 704 704  16 816   0   0   0 intervalge - - ));
 
-DATA(insert OID = 830 (  "<"	   PGUID 0 b t f  810  810	16 834 833	0 0 oidint2lt intltsel intltjoinsel ));
-DATA(insert OID = 831 (  "<="	   PGUID 0 b t f  810  810	16 833 834	0 0 oidint2le intltsel intltjoinsel ));
-DATA(insert OID = 832 (  "="	   PGUID 0 b t f  810  810	16 832 835	0 0 oidint2eq intltsel intltjoinsel ));
-DATA(insert OID = 833 (  ">="	   PGUID 0 b t f  810  810	16 831 830	0 0 oidint2ge intltsel intltjoinsel ));
-DATA(insert OID = 834 (  ">"	   PGUID 0 b t f  810  810	16 830 831	0 0 oidint2gt intltsel intltjoinsel ));
-DATA(insert OID = 835 (  "<>"	   PGUID 0 b t f  810  810	16 835 832	0 0 oidint2ne intltsel intltjoinsel ));
-
 DATA(insert OID = 843 (  "*"	   PGUID 0 b t f  790  700	790 845   0   0   0 cash_mul_flt4 - - ));
 DATA(insert OID = 844 (  "/"	   PGUID 0 b t f  790  700	790   0   0   0   0 cash_div_flt4 - - ));
 DATA(insert OID = 845 (  "*"	   PGUID 0 b t f  700  790	790 843   0   0   0 flt4_mul_cash - - ));
@@ -436,13 +430,6 @@ DATA(insert OID = 916 (  "*"	   PGUID 0 b t f  701  790	790 908   0   0   0 flt8
 DATA(insert OID = 917 (  "*"	   PGUID 0 b t f  23  790	790 912   0   0   0 int4_mul_cash - - ));
 DATA(insert OID = 918 (  "*"	   PGUID 0 b t f  21  790	790 914   0   0   0 int2_mul_cash - - ));
 
-DATA(insert OID = 930 (  "<"	   PGUID 0 b t f  910  910	16 934 933	0 0 oidint4lt intltsel intltjoinsel ));
-DATA(insert OID = 931 (  "<="	   PGUID 0 b t f  910  910	16 933 934	0 0 oidint4le intltsel intltjoinsel ));
-DATA(insert OID = 932 (  "="	   PGUID 0 b t f  910  910	16 932 935	0 0 oidint4eq intltsel intltjoinsel ));
-DATA(insert OID = 933 (  ">="	   PGUID 0 b t f  910  910	16 931 930	0 0 oidint4ge intltsel intltjoinsel ));
-DATA(insert OID = 934 (  ">"	   PGUID 0 b t f  910  910	16 930 931	0 0 oidint4gt intltsel intltjoinsel ));
-DATA(insert OID = 935 (  "<>"	   PGUID 0 b t f  910  910	16 935 932	0 0 oidint4ne intltsel intltjoinsel ));
-
 DATA(insert OID = 965 (  "^"	   PGUID 0 b t f  701  701	701 0 0 0 0 dpow - - ));
 DATA(insert OID = 966 (  "+"	   PGUID 0 b t f 1034 1033 1034 0 0 0 0 aclinsert	intltsel intltjoinsel ));
 DATA(insert OID = 967 (  "-"	   PGUID 0 b t f 1034 1033 1034 0 0 0 0 aclremove	intltsel intltjoinsel ));
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index af78e4b1eb30b9494d8ab6f92e6519b7d2390d45..94f7439679085d922a45ea8be8d9834b4d867bc5 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.65 1998/08/15 06:47:39 thomas Exp $
+ * $Id: pg_proc.h,v 1.66 1998/08/19 02:03:54 momjian Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -745,6 +745,8 @@ DATA(insert OID = 355 (  btfloat8cmp	   PGUID 11 f t f 2 f 23 "701 701" 100 0 0
 DESCR("btree less-equal-greater");
 DATA(insert OID = 356 (  btoidcmp		   PGUID 11 f t f 2 f 23 "26 26" 100 0 0 100  foo bar ));
 DESCR("btree less-equal-greater");
+DATA(insert OID = 404 (  btoid8cmp		   PGUID 11 f t f 2 f 23 "30 30" 100 0 0 100  foo bar ));
+DESCR("btree less-equal-greater");
 DATA(insert OID = 357 (  btabstimecmp	   PGUID 11 f t f 2 f 23 "702 702" 100 0 0 100	foo bar ));
 DESCR("btree less-equal-greater");
 DATA(insert OID = 358 (  btcharcmp		   PGUID 11 f t f 2 f 23 "18 18" 100 0 0 100  foo bar ));
@@ -825,6 +827,8 @@ DATA(insert OID = 452 (  hashfloat8		   PGUID 11 f t f 2 f 23 "701 701" 100 0 0
 DESCR("hash");
 DATA(insert OID = 453 (  hashoid		   PGUID 11 f t f 2 f 23 "26 26" 100 0 0 100  foo bar ));
 DESCR("hash");
+DATA(insert OID = 457 (  hashoid8		   PGUID 11 f t f 2 f 23 "30 30" 100 0 0 100  foo bar ));
+DESCR("hash");
 DATA(insert OID = 454 (  hashchar		   PGUID 11 f t f 2 f 23 "18 18" 100 0 0 100  foo bar ));
 DESCR("hash");
 DATA(insert OID = 455 (  hashname		   PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
@@ -907,10 +911,18 @@ DESCR("not equal");
 DATA(insert OID = 668 (  bpchar			   PGUID 11 f t f 2 f 1042 "1042 23" 100 0 0 100  foo bar ));
 DATA(insert OID = 669 (  varchar		   PGUID 11 f t f 2 f 1043 "1043 23" 100 0 0 100  foo bar ));
 
-DATA(insert OID = 682 (  mktinterval	   PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 foo bar ));
+DATA(insert OID = 676 (  mktinterval	   PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 foo bar ));
 DESCR("convert to interval");
-DATA(insert OID = 683 (  oid8eq			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
+DATA(insert OID = 677 (  oid8lt			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
+DESCR("less-than");
+DATA(insert OID = 678 (  oid8le			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
+DESCR("less-than-or-equal");
+DATA(insert OID = 679 (  oid8eq			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
 DESCR("equal");
+DATA(insert OID = 680 (  oid8ge			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 681 (  oid8gt			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
+DESCR("greater-than");
 
 /* OIDS 700 - 799 */
 DATA(insert OID = 710 (  getpgusername	   PGUID 11 f t f 0 f 19 "0" 100 0 0 100  foo bar ));
@@ -1053,27 +1065,6 @@ DESCR("convert");
 DATA(insert OID = 819 (  text_int4		   PGUID 11 f t f 1 f 23 "25" 100 0 0 100  foo bar));
 DESCR("convert");
 
-DATA(insert OID = 820 (  oidint2in		   PGUID 11 f t f 1 f 810 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 821 (  oidint2out		   PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 822 (  oidint2lt		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("less-than");
-DATA(insert OID = 823 (  oidint2le		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("less-than-or-equal");
-DATA(insert OID = 824 (  oidint2eq		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("equal");
-DATA(insert OID = 825 (  oidint2ge		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("greater-than-or-equal");
-DATA(insert OID = 826 (  oidint2gt		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("greater-than");
-DATA(insert OID = 827 (  oidint2ne		   PGUID 11 f t f 2 f 16 "810 810" 100 0 0 100	foo bar));
-DESCR("not equal");
-DATA(insert OID = 828 (  oidint2cmp		   PGUID 11 f t f 2 f 21 "810 810" 100 0 0 100	foo bar));
-DESCR("less-equal-greater");
-DATA(insert OID = 829 (  mkoidint2		   PGUID 11 f t f 2 f 810 "26 21" 100 0 0 100  foo bar));
-DESCR("");
-
 DATA(insert OID =  849 (  textpos		   PGUID 11 f t f 2 f 23 "25 25" 100 0 1 0 foo bar ));
 DESCR("return position of substring");
 DATA(insert OID =  850 (  textlike		   PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0 foo bar ));
@@ -1159,27 +1150,6 @@ DESCR("multiply");
 
 /* OIDS 900 - 999 */
 
-DATA(insert OID = 920 (  oidint4in		   PGUID 11 f t f 1 f 910 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 921 (  oidint4out		   PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 922 (  oidint4lt		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("less-than");
-DATA(insert OID = 923 (  oidint4le		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("less-than-or-equal");
-DATA(insert OID = 924 (  oidint4eq		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("equal");
-DATA(insert OID = 925 (  oidint4ge		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("greater-than-or-equal");
-DATA(insert OID = 926 (  oidint4gt		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("greater-than");
-DATA(insert OID = 927 (  oidint4ne		   PGUID 11 f t f 2 f 16 "910 910" 100 0 0 100	foo bar));
-DESCR("not equal");
-DATA(insert OID = 928 (  oidint4cmp		   PGUID 11 f t f 2 f 23 "910 910" 100 0 0 100	foo bar));
-DESCR("less-equal-greater");
-DATA(insert OID = 929 (  mkoidint4		   PGUID 11 f t f 2 f 910 "26 23" 100 0 0 100  foo bar));
-DESCR("");
-
 /* isoldpath, upgradepath, upgradepoly, revertpoly are used to update pre-v6.1 to v6.1 - tgl 97/06/03 */
 DATA(insert OID = 936 (  isoldpath		   PGUID 11 f t f 1 f  16 "602" 100 0 0 100  foo bar ));
 DESCR("");
@@ -1190,27 +1160,6 @@ DESCR("");
 DATA(insert OID = 939 (  revertpoly		   PGUID 11 f t f 1 f 604 "604" 100 0 0 100  foo bar ));
 DESCR("");
 
-DATA(insert OID = 940 (  oidnamein		   PGUID 11 f t f 1 f 911 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 941 (  oidnameout		   PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo bar));
-DESCR("(internal)");
-DATA(insert OID = 942 (  oidnamelt		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("less-than");
-DATA(insert OID = 943 (  oidnamele		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("less-than-or-equal");
-DATA(insert OID = 944 (  oidnameeq		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("equal");
-DATA(insert OID = 945 (  oidnamege		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("greater-than-or-equal");
-DATA(insert OID = 946 (  oidnamegt		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("greater-than");
-DATA(insert OID = 947 (  oidnamene		   PGUID 11 f t f 2 f 16 "911 911" 100 0 0 100	foo bar));
-DESCR("not equal");
-DATA(insert OID = 948 (  oidnamecmp		   PGUID 11 f t f 2 f 23 "911 911" 100 0 0 100	foo bar));
-DESCR("less-equal-greater");
-DATA(insert OID = 949 (  mkoidname		   PGUID 11 f t f 2 f 911 "26 19" 100 0 0 100  foo bar));
-DESCR("");
-
 DATA(insert OID = 950 (  istrue			   PGUID 11 f t f 1 f 16 "16" 100 0 0 100  foo bar ));
 DESCR("");
 DATA(insert OID = 951 (  isfalse		   PGUID 11 f t f 1 f 16 "16" 100 0 0 100  foo bar ));
@@ -1508,7 +1457,7 @@ DESCR("date difference preserving months and years");
 
 /* OIDS 1200 - 1299 */
 
-DATA(insert OID = 1200 (  int42reltime	   PGUID 11 f t f 1 f  703 "21" 100 0 0 100  foo bar ));
+DATA(insert OID = 1200 (  int4reltime	   PGUID 11 f t f 1 f  703 "23" 100 0 0 100  foo bar ));
 DESCR("convert");
 
 DATA(insert OID = 1217 (  datetime_trunc   PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  foo bar ));
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index bfda556afe048cd3e682c305c4597dda40c55284..85ca3eb313ceef6970dab28fe740de844bd663fb 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.43 1998/08/11 18:28:49 momjian Exp $
+ * $Id: pg_type.h,v 1.44 1998/08/19 02:03:56 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -298,14 +298,8 @@ DESCR("money '$d,ddd.cc'");
 DATA(insert OID = 791 (  _money    PGUID  -1 -1 f b t \054 0  790 array_in array_out array_in array_out i _null_ ));
 
 /* OIDS 800 - 899 */
-DATA(insert OID = 810 (  oidint2   PGUID  6  20 f b t \054 0   0 oidint2in oidint2out oidint2in oidint2out i _null_ ));
-DESCR("oid and int2 composed");
 
 /* OIDS 900 - 999 */
-DATA(insert OID = 910 (  oidint4   PGUID  8  20 f b t \054 0   0 oidint4in oidint4out oidint4in oidint4out i _null_ ));
-DESCR("oid and int4 composed");
-DATA(insert OID = 911 (  oidname   PGUID  OIDNAMELEN OIDNAMELEN f b t \054 0   0 oidnamein oidnameout oidnamein oidnameout i _null_ ));
-DESCR("oid and name composed");
 
 /* OIDS 1000 - 1099 */
 DATA(insert OID = 1000 (  _bool		 PGUID -1  -1 f b t \054 0	16 array_in array_out array_in array_out i _null_ ));
diff --git a/src/include/postgres.h b/src/include/postgres.h
index f6cbc47c55ecdaf61f2c4b140e64c118f34f6403..6b659347fa0b2a00862d1258a3731b738610e997 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1995, Regents of the University of California
  *
- * $Id: postgres.h,v 1.17 1998/07/03 04:24:10 momjian Exp $
+ * $Id: postgres.h,v 1.18 1998/08/19 02:03:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,7 +22,6 @@
  *				int28	  oid8
  *				bytea	   text
  *				NameData   Name
- *				oidint4    oidint2	  oidname
  *
  *	 TABLE OF CONTENTS
  *		1)		simple type definitions
@@ -99,48 +98,6 @@ typedef struct nameData
 } NameData;
 typedef NameData *Name;
 
-/* ----------------
- *		oidint4
- *
- *		this is a new system type used by the file interface.
- * ----------------
- */
-typedef struct OidInt4Data
-{
-	Oid			oi_oid;
-	int32		oi_int4;
-} OidInt4Data;
-
-typedef struct OidInt4Data *OidInt4;
-
-/* ----------------
- *		oidint2
- *
- *		this is a new system type used to define indices on two attrs.
- * ----------------
- */
-typedef struct OidInt2Data
-{
-	Oid			oi_oid;
-	int16		oi_int2;
-} OidInt2Data;
-
-typedef struct OidInt2Data *OidInt2;
-
-/* ----------------
- *		oidname
- *
- *		this is a new system type used to define indices on two attrs.
- * ----------------
- */
-typedef struct OidNameData
-{
-	Oid			id;
-	NameData	name;
-} OidNameData;
-
-typedef struct OidNameData *OidName;
-
 /* ----------------------------------------------------------------
  *				Section 3: TransactionId and CommandId
  * ----------------------------------------------------------------
diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h
index 9b590227b5a91e27dc3c5bd81374b8fe151bd68b..60acb866348906b68de4aa64c2de83d1548a4701 100644
--- a/src/include/storage/bufmgr.h
+++ b/src/include/storage/bufmgr.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: bufmgr.h,v 1.20 1998/06/15 18:40:02 momjian Exp $
+ * $Id: bufmgr.h,v 1.21 1998/08/19 02:03:57 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -147,7 +147,7 @@ extern void FlushBufferPool(int StableMainMemoryFlag);
 extern BlockNumber BufferGetBlockNumber(Buffer buffer);
 extern Relation BufferGetRelation(Buffer buffer);
 extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
-extern void ReleaseRelationBuffers(Relation rdesc);
+extern void ReleaseRelationBuffers(Relation rel);
 extern void DropBuffers(Oid dbid);
 extern void PrintBufferDescs(void);
 extern void PrintPinnedBufs(void);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index e359c526f00e254698222fb3aa61f2149542bdeb..26453ddae45f4cc6ca6636d935a3280a4ada1b3c 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.46 1998/07/12 21:29:38 momjian Exp $
+ * $Id: builtins.h,v 1.47 1998/08/19 02:04:03 momjian Exp $
  *
  * NOTES
  *	  This should normally only be included by fmgr.h.
@@ -165,6 +165,7 @@ extern int32 btint42cmp(int32 a, int16 b);
 extern int32 btfloat4cmp(float32 a, float32 b);
 extern int32 btfloat8cmp(float64 a, float64 b);
 extern int32 btoidcmp(Oid a, Oid b);
+extern int32 btoid8cmp(Oid a[], Oid b[]);
 extern int32 btabstimecmp(AbsoluteTime a, AbsoluteTime b);
 extern int32 btcharcmp(char a, char b);
 extern int32 btnamecmp(NameData *a, NameData *b);
@@ -334,6 +335,10 @@ extern char *oidout(Oid o);
 extern bool oideq(Oid arg1, Oid arg2);
 extern bool oidne(Oid arg1, Oid arg2);
 extern bool oid8eq(Oid arg1[], Oid arg2[]);
+extern bool oid8lt(Oid arg1[], Oid arg2[]);
+extern bool oid8le(Oid arg1[], Oid arg2[]);
+extern bool oid8ge(Oid arg1[], Oid arg2[]);
+extern bool oid8gt(Oid arg1[], Oid arg2[]);
 extern bool oideqint4(Oid arg1, int32 arg2);
 extern bool int4eqoid(int32 arg1, Oid arg2);
 extern text *oid_text(Oid arg1);
@@ -484,7 +489,7 @@ extern bool time_gt(TimeADT *time1, TimeADT *time2);
 extern bool time_ge(TimeADT *time1, TimeADT *time2);
 extern int	time_cmp(TimeADT *time1, TimeADT *time2);
 extern TimeADT *datetime_time(DateTime *datetime);
-extern int32 int42reltime(int32 timevalue);
+extern int32 int4reltime(int32 timevalue);
 
 /* like.c */
 extern bool namelike(NameData *n, struct varlena * p);
diff --git a/src/include/utils/oidcompos.h b/src/include/utils/oidcompos.h
deleted file mode 100644
index 5f58d11d5258cf29874a5b4b026bf6d77dbfc58f..0000000000000000000000000000000000000000
--- a/src/include/utils/oidcompos.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * oidcompos.h--
- *	  prototype file for the oid {name,int4} composite type functions.
- *
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * $Id: oidcompos.h,v 1.6 1998/04/26 04:09:28 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#ifndef OIDCOMPOS_H
-#define OIDCOMPOS_H
-
-/* oidint4.c */
-OidInt4		oidint4in(char *o);
-char	   *oidint4out(OidInt4 o);
-bool		oidint4lt(OidInt4 o1, OidInt4 o2);
-bool		oidint4le(OidInt4 o1, OidInt4 o2);
-bool		oidint4eq(OidInt4 o1, OidInt4 o2);
-bool		oidint4ge(OidInt4 o1, OidInt4 o2);
-bool		oidint4gt(OidInt4 o1, OidInt4 o2);
-bool		oidint4ne(OidInt4 o1, OidInt4 o2);
-int			oidint4cmp(OidInt4 o1, OidInt4 o2);
-OidInt4		mkoidint4(Oid v_oid, uint32 v_int4);
-
-/* oidint2.c */
-OidInt2		oidint2in(char *o);
-char	   *oidint2out(OidInt2 o);
-bool		oidint2lt(OidInt2 o1, OidInt2 o2);
-bool		oidint2le(OidInt2 o1, OidInt2 o2);
-bool		oidint2eq(OidInt2 o1, OidInt2 o2);
-bool		oidint2ge(OidInt2 o1, OidInt2 o2);
-bool		oidint2gt(OidInt2 o1, OidInt2 o2);
-bool		oidint2ne(OidInt2 o1, OidInt2 o2);
-int			oidint2cmp(OidInt2 o1, OidInt2 o2);
-OidInt2		mkoidint2(Oid v_oid, uint16 v_int2);
-
-/* oidname.c */
-OidName		oidnamein(char *inStr);
-char	   *oidnameout(OidName oidname);
-bool		oidnamelt(OidName o1, OidName o2);
-bool		oidnamele(OidName o1, OidName o2);
-bool		oidnameeq(OidName o1, OidName o2);
-bool		oidnamene(OidName o1, OidName o2);
-bool		oidnamege(OidName o1, OidName o2);
-bool		oidnamegt(OidName o1, OidName o2);
-int			oidnamecmp(OidName o1, OidName o2);
-OidName		mkoidname(Oid id, char *name);
-
-#endif							/* OIDCOMPOS_H */
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index 8b1d45edb1583e19f3c45dc2c6e2d9eb9a9c702a..edfd5d47b8e41716f7ef4b850fbbfebb79b52a61 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: rel.h,v 1.17 1998/02/26 04:44:09 momjian Exp $
+ * $Id: rel.h,v 1.18 1998/08/19 02:04:07 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,12 +146,12 @@ typedef Relation *RelationPtr;
 
 
 /*
- * RelationGetRelationId --
+ * RelationGetRelid --
  *
  *	returns the object id of the relation
  *
  */
-#define RelationGetRelationId(relation) ((relation)->rd_id)
+#define RelationGetRelid(relation) ((relation)->rd_id)
 
 /*
  * RelationGetFile --
diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h
index 712345614be0b089123d2b1e340cfac518dadd33..add859e5eae3805d5f6f894431de9730640fed05 100644
--- a/src/include/utils/syscache.h
+++ b/src/include/utils/syscache.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: syscache.h,v 1.10 1998/02/26 04:44:11 momjian Exp $
+ * $Id: syscache.h,v 1.11 1998/08/19 02:04:09 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -15,6 +15,8 @@
 
 #include <access/attnum.h>
 #include <access/htup.h>
+#include <storage/buf.h>
+#include <utils/rel.h>
 
  /* #define CACHEDEBUG *//* turns DEBUG elogs on */
 
@@ -67,8 +69,7 @@
  */
 struct cachedesc
 {
-	char	   *name;			/* this is Name * so that we can
-								 * initialize it */
+	char	   *name;			/* this is Name so that we can initialize it */
 	int			nkeys;
 	int			key[4];
 	int			size;			/* sizeof(appropriate struct) */
@@ -80,18 +81,18 @@ struct cachedesc
 extern void zerocaches(void);
 extern void InitCatalogCache(void);
 extern HeapTuple
-SearchSysCacheTuple(int cacheId, Datum key1, Datum key2,
-					Datum key3, Datum key4);
+SearchSysCacheTupleCopy(int cacheId,
+					Datum key1, Datum key2, Datum key3, Datum key4);
+extern HeapTuple
+SearchSysCacheTuple(int cacheId,
+					Datum key1, Datum key2, Datum key3, Datum key4);
 extern int32
 SearchSysCacheStruct(int cacheId, char *returnStruct,
 					 Datum key1, Datum key2, Datum key3, Datum key4);
 extern void *
 SearchSysCacheGetAttribute(int cacheId,
 						   AttrNumber attributeNumber,
-						   Datum key1,
-						   Datum key2,
-						   Datum key3,
-						   Datum key4);
+						   Datum key1, Datum key2, Datum key3, Datum key4);
 extern void *TypeDefaultRetrieve(Oid typId);
 
 #endif							/* SYSCACHE_H */
diff --git a/src/interfaces/ecpg/preproc/type.h b/src/interfaces/ecpg/preproc/type.h
index 835f50b359f2b6e8df86728e79b46ec4237f9b67..4f24043444ca30040abafff0a11530fa33f18d0d 100644
--- a/src/interfaces/ecpg/preproc/type.h
+++ b/src/interfaces/ecpg/preproc/type.h
@@ -75,7 +75,7 @@ struct when
 	char	   	*str;
 };
 
-struct index
+struct RelationGetRelidindex
 {
     int index1;
     int index2;
diff --git a/src/man/create_index.l b/src/man/create_index.l
index 0d63590878121ee58cdac865d2069f4e431d303f..a0a5f4651a37e3752e1fc267ab69c257abe00dc3 100644
--- a/src/man/create_index.l
+++ b/src/man/create_index.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_index.l,v 1.11 1998/04/26 04:09:39 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/create_index.l,v 1.12 1998/08/19 02:04:12 momjian Exp $
 .TH "CREATE INDEX" SQL 11/05/95 PostgreSQL PostgreSQL
 .SH NAME
 create index - construct a secondary index
@@ -149,21 +149,6 @@ btree   |oid_ops    |<=
 btree   |oid_ops    |=       
 btree   |oid_ops    |>       
 btree   |oid_ops    |>=      
-btree   |oidint2_ops|<       
-btree   |oidint2_ops|<=      
-btree   |oidint2_ops|=       
-btree   |oidint2_ops|>       
-btree   |oidint2_ops|>=      
-btree   |oidint4_ops|<       
-btree   |oidint4_ops|<=      
-btree   |oidint4_ops|=       
-btree   |oidint4_ops|>       
-btree   |oidint4_ops|>=      
-btree   |oidname_ops|<       
-btree   |oidname_ops|<=      
-btree   |oidname_ops|=       
-btree   |oidname_ops|>       
-btree   |oidname_ops|>=      
 btree   |text_ops   |<       
 btree   |text_ops   |<=      
 btree   |text_ops   |=       
@@ -226,15 +211,6 @@ Similarly,
 support indices on int4 data that is to be compared against int2 data
 in queries.
 .PP
-The operator classes
-.IR oidint2_ops ,
-.IR oidint4_ops ,
-and
-.IR oidname_ops
-represent the use of 
-.IR "functional indices"
-to simulate multi-key indices.
-These are no longer needed now that multi-key indexes are supported.
 .PP
 The Postgres query optimizer will consider using btree indices in a scan
 whenever an indexed attribute is involved in a comparison using one of:
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 751a243b40792834664580084a0d3d9ed84bb5ed..a0736dbcdac63ee2fd1959e4faf78169bde7b211 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -3,7 +3,7 @@
  *			  procedural language (PL)
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.3 1998/06/15 19:30:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.4 1998/08/19 02:04:14 momjian Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -514,7 +514,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
 		 * return value.
 		 ************************************************************/
 		typeTup = SearchSysCacheTuple(TYPOID,
-								ObjectIdGetDatum(procStruct->prorettype),
+									ObjectIdGetDatum(procStruct->prorettype),
 									  0, 0, 0);
 		if (!HeapTupleIsValid(typeTup))
 		{
@@ -544,7 +544,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
 		for (i = 0; i < proinfo->fn_nargs; i++)
 		{
 			typeTup = SearchSysCacheTuple(TYPOID,
-							ObjectIdGetDatum(procStruct->proargtypes[i]),
+								ObjectIdGetDatum(procStruct->proargtypes[i]),
 										  0, 0, 0);
 			if (!HeapTupleIsValid(typeTup))
 			{
@@ -1139,7 +1139,7 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
 		 * for the input function
 		 ************************************************************/
 		typeTup = SearchSysCacheTuple(TYPOID,
-				  ObjectIdGetDatum(tupdesc->attrs[attnum - 1]->atttypid),
+					  ObjectIdGetDatum(tupdesc->attrs[attnum - 1]->atttypid),
 									  0, 0, 0);
 		if (!HeapTupleIsValid(typeTup))
 		{
@@ -2156,7 +2156,7 @@ pltcl_set_tuple_values(Tcl_Interp * interp, char *arrayname,
 		 * for the output function
 		 ************************************************************/
 		typeTup = SearchSysCacheTuple(TYPOID,
-						   ObjectIdGetDatum(tupdesc->attrs[i]->atttypid),
+							   ObjectIdGetDatum(tupdesc->attrs[i]->atttypid),
 									  0, 0, 0);
 		if (!HeapTupleIsValid(typeTup))
 		{
@@ -2229,7 +2229,7 @@ pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc,
 		 * for the output function
 		 ************************************************************/
 		typeTup = SearchSysCacheTuple(TYPOID,
-						   ObjectIdGetDatum(tupdesc->attrs[i]->atttypid),
+							   ObjectIdGetDatum(tupdesc->attrs[i]->atttypid),
 									  0, 0, 0);
 		if (!HeapTupleIsValid(typeTup))
 		{
diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent
index c0dd5f6b1d0841a76031df9795a469797a3f1371..5e0338276b42c472e2b4c57b2c0d179c6a318b3b 100755
--- a/src/tools/pgindent/pgindent
+++ b/src/tools/pgindent/pgindent
@@ -797,6 +797,7 @@ do
 # workaround indent bug
 	sed 's;^static[ 	][ 	]*;static ;g' |
 	sed 's;^}[ 	][ 	]*/\*;}   /*;' |
+	sed 's;^#endif[ 	][ 	]*/\*;#endif   /*;' |
 	detab -t8 -qc |
 	entab -t4 -qc |
 # move trailing * in function return type