diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 8979d0992215d15a04c5bc51af0246d3653058ce..518b6f553da12d7de6f3ef91ef017047c36dcbeb 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.43 1998/07/15 14:54:31 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.44 1998/07/18 04:22:25 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -998,10 +998,10 @@ _copyArrayRef(ArrayRef *from)
  ** planner/path/xfunc.c accordingly!!!
  **			-- JMH, 8/2/93
  */
-static Rel *
-_copyRel(Rel *from)
+static RelOptInfo *
+_copyRel(RelOptInfo *from)
 {
-	Rel		   *newnode = makeNode(Rel);
+	RelOptInfo		   *newnode = makeNode(RelOptInfo);
 	int			i,
 				len;
 
@@ -1734,7 +1734,7 @@ copyObject(void *from)
 			/*
 			 * RELATION NODES
 			 */
-		case T_Rel:
+		case T_RelOptInfo:
 			retval = _copyRel(from);
 			break;
 		case T_Path:
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 43f0204015ec26668faf01cab046707b51678a4e..aaa726740ff1302823c3cfb23df731b4edea8d66 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.40 1998/07/15 14:54:32 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.41 1998/07/18 04:22:26 momjian Exp $
  *
  * NOTES
  *	  Every (plan) node in POSTGRES has an associated "out" routine which
@@ -990,11 +990,11 @@ _outEState(StringInfo str, EState *node)
  *	Stuff from relation.h
  */
 static void
-_outRel(StringInfo str, Rel *node)
+_outRel(StringInfo str, RelOptInfo *node)
 {
 	char		buf[500];
 
-	appendStringInfo(str, " REL ");
+	appendStringInfo(str, " RELOPTINFO ");
 
 	appendStringInfo(str, " :relids ");
 	_outIntList(str, node->relids);
@@ -1058,7 +1058,7 @@ _outRel(StringInfo str, Rel *node)
 static void
 _outTargetEntry(StringInfo str, TargetEntry *node)
 {
-	appendStringInfo(str, " TLE ");
+	appendStringInfo(str, " TARGETENTRY ");
 	appendStringInfo(str, " :resdom ");
 	_outNode(str, node->resdom);
 
@@ -1787,7 +1787,7 @@ _outNode(StringInfo str, void *obj)
 			case T_EState:
 				_outEState(str, obj);
 				break;
-			case T_Rel:
+			case T_RelOptInfo:
 				_outRel(str, obj);
 				break;
 			case T_TargetEntry:
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index c82e5e5ff86bd6012abaeebb8ba7d57bd0fbe09f..39201e2613e1f767c947fb6035c9e282eee78750 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.32 1998/07/15 14:54:34 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.33 1998/07/18 04:22:26 momjian Exp $
  *
  * NOTES
  *	  Most of the read functions for plan nodes are tested. (In fact, they
@@ -1221,14 +1221,14 @@ _readEState()
  *		_readRel
  * ----------------
  */
-static Rel *
+static RelOptInfo *
 _readRel()
 {
-	Rel		   *local_node;
+	RelOptInfo		   *local_node;
 	char	   *token;
 	int			length;
 
-	local_node = makeNode(Rel);
+	local_node = makeNode(RelOptInfo);
 
 	token = lsptok(NULL, &length);		/* get :relids */
 	local_node->relids =
@@ -1990,9 +1990,9 @@ parsePlanString(void)
 		return_value = _readParam();
 	else if (!strncmp(token, "ESTATE", length))
 		return_value = _readEState();
-	else if (!strncmp(token, "REL", length))
+	else if (!strncmp(token, "RELOPTINFO", length))
 		return_value = _readRel();
-	else if (!strncmp(token, "TLE", length))
+	else if (!strncmp(token, "TARGETENTRY", length))
 		return_value = _readTargetEntry();
 	else if (!strncmp(token, "RTE", length))
 		return_value = _readRangeTblEntry();
diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c
index 7430b34bccdca3ec85f21728a546d926470d31ec..efd94dda460be5110f5894a103bb0b897e86760e 100644
--- a/src/backend/optimizer/geqo/geqo_eval.c
+++ b/src/backend/optimizer/geqo/geqo_eval.c
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_eval.c,v 1.19 1998/06/15 19:28:35 momjian Exp $
+ * $Id: geqo_eval.c,v 1.20 1998/07/18 04:22:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -50,13 +50,13 @@
 #include "optimizer/geqo_paths.h"
 
 
-static List *gimme_clause_joins(Query *root, Rel *outer_rel, Rel *inner_rel);
-static Rel *gimme_clauseless_join(Rel *outer_rel, Rel *inner_rel);
-static Rel *init_join_rel(Rel *outer_rel, Rel *inner_rel, JInfo *joininfo);
+static List *gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel);
+static RelOptInfo *gimme_clauseless_join(RelOptInfo *outer_rel, RelOptInfo *inner_rel);
+static RelOptInfo *init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JInfo *joininfo);
 static List *new_join_tlist(List *tlist, List *other_relids, int first_resdomno);
 static List *new_joininfo_list(List *joininfo_list, List *join_relids);
-static void geqo_joinrel_size(Rel *joinrel, Rel *outer_rel, Rel *inner_rel);
-static Rel *geqo_nth(int stop, List *rels);
+static void geqo_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel);
+static RelOptInfo *geqo_nth(int stop, List *rels);
 
 /*
  * geqo_eval--
@@ -66,7 +66,7 @@ static Rel *geqo_nth(int stop, List *rels);
 Cost
 geqo_eval(Query *root, Gene *tour, int num_gene)
 {
-	Rel		   *joinrel;
+	RelOptInfo		   *joinrel;
 	Cost		fitness;
 	List	   *temp;
 
@@ -98,14 +98,14 @@ geqo_eval(Query *root, Gene *tour, int num_gene)
  *
  * Returns a new join relation incorporating all joins in a left-sided tree.
  */
-Rel *
-gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, Rel *outer_rel)
+RelOptInfo *
+gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *outer_rel)
 {
-	Rel		   *inner_rel;		/* current relation */
+	RelOptInfo		   *inner_rel;		/* current relation */
 	int			base_rel_index;
 
 	List	   *new_rels = NIL;
-	Rel		   *new_rel = NULL;
+	RelOptInfo		   *new_rel = NULL;
 
 	if (rel_count < num_gene)
 	{							/* tree not yet finished */
@@ -113,7 +113,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, Rel *outer_rel)
 		/* tour[0] = 3; tour[1] = 1; tour[2] = 2 */
 		base_rel_index = (int) tour[rel_count];
 
-		inner_rel = (Rel *) geqo_nth(base_rel_index, root->base_relation_list_);
+		inner_rel = (RelOptInfo *) geqo_nth(base_rel_index, root->base_relation_list_);
 
 		if (rel_count == 0)
 		{						/* processing first join with
@@ -158,7 +158,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, Rel *outer_rel)
 			}
 
 			/* get essential new relation */
-			new_rel = (Rel *) lfirst(new_rels);
+			new_rel = (RelOptInfo *) lfirst(new_rels);
 			rel_count++;
 
 			/* process new_rel->cheapestpath, new_rel->unorderedpath */
@@ -189,7 +189,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, Rel *outer_rel)
  */
 
 static List *
-gimme_clause_joins(Query *root, Rel *outer_rel, Rel *inner_rel)
+gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel)
 {
 	List	   *join_list = NIL;
 	List	   *i = NIL;
@@ -198,7 +198,7 @@ gimme_clause_joins(Query *root, Rel *outer_rel, Rel *inner_rel)
 	foreach(i, joininfo_list)
 	{
 		JInfo	   *joininfo = (JInfo *) lfirst(i);
-		Rel		   *rel = NULL;
+		RelOptInfo		   *rel = NULL;
 
 		if (!joininfo->inactive)
 		{
@@ -239,8 +239,8 @@ gimme_clause_joins(Query *root, Rel *outer_rel, Rel *inner_rel)
  * Returns a new join relation.
  */
 
-static Rel *
-gimme_clauseless_join(Rel *outer_rel, Rel *inner_rel)
+static RelOptInfo *
+gimme_clauseless_join(RelOptInfo *outer_rel, RelOptInfo *inner_rel)
 {
 	return (init_join_rel(outer_rel, inner_rel, (JInfo *) NULL));
 }
@@ -256,10 +256,10 @@ gimme_clauseless_join(Rel *outer_rel, Rel *inner_rel)
  *
  * Returns the new join relation node.
  */
-static Rel *
-init_join_rel(Rel *outer_rel, Rel *inner_rel, JInfo *joininfo)
+static RelOptInfo *
+init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JInfo *joininfo)
 {
-	Rel		   *joinrel = makeNode(Rel);
+	RelOptInfo		   *joinrel = makeNode(RelOptInfo);
 	List	   *joinrel_joininfo_list = NIL;
 	List	   *new_outer_tlist;
 	List	   *new_inner_tlist;
@@ -457,7 +457,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 	List	   *xrel = NIL;
 	List	   *xjoininfo = NIL;
 
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 	List	   *relids;
 
 	List	   *super_rels;
@@ -466,7 +466,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 	foreach(xjoinrel, joinrels)
 	{
-		Rel		   *joinrel = (Rel *) lfirst(xjoinrel);
+		RelOptInfo		   *joinrel = (RelOptInfo *) lfirst(xjoinrel);
 
 		foreach(xrelid, joinrel->relids)
 		{
@@ -477,7 +477,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 			 */
 
 			/*
-			 * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); Rel *rel =
+			 * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); RelOptInfo *rel =
 			 * get_join_rel(root, relid);
 			 */
 
@@ -502,7 +502,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 	}
 	foreach(xjoinrel, joinrels)
 	{
-		Rel		   *joinrel = (Rel *) lfirst(xjoinrel);
+		RelOptInfo		   *joinrel = (RelOptInfo *) lfirst(xjoinrel);
 
 		foreach(xjoininfo, joinrel->joininfo)
 		{
@@ -516,7 +516,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 			{
 
 				/*
-				 * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); Rel
+				 * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); RelOptInfo
 				 * *rel = get_join_rel(root, relid);
 				 */
 
@@ -549,7 +549,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 				foreach(xsuper_rel, super_rels)
 				{
-					Rel		   *super_rel = (Rel *) lfirst(xsuper_rel);
+					RelOptInfo		   *super_rel = (RelOptInfo *) lfirst(xsuper_rel);
 
 					if (nonoverlap_rels(super_rel, joinrel))
 					{
@@ -584,7 +584,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 	}
 	foreach(xrel, outerrels)
 	{
-		rel = (Rel *) lfirst(xrel);
+		rel = (RelOptInfo *) lfirst(xrel);
 		rel->superrels = NIL;
 	}
 }
@@ -611,7 +611,7 @@ geqo_final_join_rels(List *join_rel_list)
 	 */
 	foreach(xrel, join_rel_list)
 	{
-		Rel		   *rel = (Rel *) lfirst(xrel);
+		RelOptInfo		   *rel = (RelOptInfo *) lfirst(xrel);
 		List	   *xjoininfo = NIL;
 		bool		final = true;
 
@@ -645,7 +645,7 @@ geqo_final_join_rels(List *join_rel_list)
  * Modifies the superrels field of rel
  */
 static void
-add_superrels(Rel *rel, Rel *super_rel)
+add_superrels(RelOptInfo *rel, RelOptInfo *super_rel)
 {
 	rel->superrels = lappend(rel->superrels, super_rel);
 }
@@ -660,7 +660,7 @@ add_superrels(Rel *rel, Rel *super_rel)
  * Returns non-nil if rel1 and rel2 do not overlap.
  */
 static bool
-nonoverlap_rels(Rel *rel1, Rel *rel2)
+nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2)
 {
 	return (nonoverlap_sets(rel1->relids, rel2->relids));
 }
@@ -688,7 +688,7 @@ nonoverlap_sets(List *s1, List *s2)
  *	  long join queries; so get logarithm of size when MAXINT overflow;
  */
 static void
-geqo_joinrel_size(Rel *joinrel, Rel *outer_rel, Rel *inner_rel)
+geqo_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel)
 {
 	Cost		temp;
 	int			ntuples;
@@ -715,7 +715,7 @@ geqo_log(double x, double b)
 	return (log(x) / log(b));
 }
 
-static Rel *
+static RelOptInfo *
 geqo_nth(int stop, List *rels)
 {
 	List	   *r;
diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c
index 2073416c2e479f3ba969ee94e8ef8ebcb13d7568..37f6ab1533d6889cb03d916b7dc792ed78dc2cfc 100644
--- a/src/backend/optimizer/geqo/geqo_main.c
+++ b/src/backend/optimizer/geqo/geqo_main.c
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_main.c,v 1.7 1998/02/26 04:32:22 momjian Exp $
+ * $Id: geqo_main.c,v 1.8 1998/07/18 04:22:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -63,7 +63,7 @@
  *	  similar to a constrained Traveling Salesman Problem (TSP)
  */
 
-Rel *
+RelOptInfo *
 geqo(Query *root)
 {
 	int			generation;
@@ -98,7 +98,7 @@ geqo(Query *root)
 				status_interval;
 
 	Gene	   *best_tour;
-	Rel		   *best_rel;
+	RelOptInfo		   *best_rel;
 
 /*	Plan *best_plan; */
 
@@ -254,7 +254,7 @@ geqo(Query *root)
 	best_tour = (Gene *) pool->data[0].string;
 
 /* root->join_relation_list_ will be modified during this ! */
-	best_rel = (Rel *) gimme_tree(root, best_tour, 0, pool->string_length, NULL);
+	best_rel = (RelOptInfo *) gimme_tree(root, best_tour, 0, pool->string_length, NULL);
 
 /* DBG: show the query plan
 print_plan(best_plan, root);
diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c
index 99b968ec3b6016dd8f6f3bb8c0b178ebcc776347..ce915a5f2c87b940802c2252490e937bdd1e403c 100644
--- a/src/backend/optimizer/geqo/geqo_misc.c
+++ b/src/backend/optimizer/geqo/geqo_misc.c
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_misc.c,v 1.8 1998/06/15 19:28:35 momjian Exp $
+ * $Id: geqo_misc.c,v 1.9 1998/07/18 04:22:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -262,7 +262,7 @@ geqo_print_path(Query *root, Path *path, int indent)
 }
 
 void
-geqo_print_rel(Query *root, Rel *rel)
+geqo_print_rel(Query *root, RelOptInfo *rel)
 {
 	List	   *l;
 
diff --git a/src/backend/optimizer/geqo/geqo_paths.c b/src/backend/optimizer/geqo/geqo_paths.c
index a46a6c30a039ad8312dd34d0b3bb3a57afc4012d..8bc75c2349a3890ee2552f0b279d06175c1df6c3 100644
--- a/src/backend/optimizer/geqo/geqo_paths.c
+++ b/src/backend/optimizer/geqo/geqo_paths.c
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_paths.c,v 1.9 1998/06/15 19:28:37 momjian Exp $
+ * $Id: geqo_paths.c,v 1.10 1998/07/18 04:22:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -28,8 +28,8 @@
 #include "optimizer/geqo_paths.h"
 
 
-static List *geqo_prune_rel(Rel *rel, List *other_rels);
-static Path *set_paths(Rel *rel, Path *unorderedpath);
+static List *geqo_prune_rel(RelOptInfo *rel, List *other_rels);
+static Path *set_paths(RelOptInfo *rel, Path *unorderedpath);
 
 /*
  * geqo-prune-rels--
@@ -47,7 +47,7 @@ geqo_prune_rels(List *rel_list)
 	if (rel_list != NIL)
 	{
 		temp_list = lcons(lfirst(rel_list),
-				 geqo_prune_rels(geqo_prune_rel((Rel *) lfirst(rel_list),
+				 geqo_prune_rels(geqo_prune_rel((RelOptInfo *) lfirst(rel_list),
 												lnext(rel_list))));
 	}
 	return (temp_list);
@@ -65,16 +65,16 @@ geqo_prune_rels(List *rel_list)
  *
  */
 static List *
-geqo_prune_rel(Rel *rel, List *other_rels)
+geqo_prune_rel(RelOptInfo *rel, List *other_rels)
 {
 	List	   *i = NIL;
 	List	   *t_list = NIL;
 	List	   *temp_node = NIL;
-	Rel		   *other_rel = (Rel *) NULL;
+	RelOptInfo		   *other_rel = (RelOptInfo *) NULL;
 
 	foreach(i, other_rels)
 	{
-		other_rel = (Rel *) lfirst(i);
+		other_rel = (RelOptInfo *) lfirst(i);
 		if (same(rel->relids, other_rel->relids))
 		{
 			rel->pathlist = add_pathlist(rel,
@@ -102,7 +102,7 @@ geqo_prune_rel(Rel *rel, List *other_rels)
  *
  */
 void
-geqo_rel_paths(Rel *rel)
+geqo_rel_paths(RelOptInfo *rel)
 {
 	List	   *y = NIL;
 	Path	   *path = (Path *) NULL;
@@ -134,7 +134,7 @@ geqo_rel_paths(Rel *rel)
  *
  */
 static Path *
-set_paths(Rel *rel, Path *unorderedpath)
+set_paths(RelOptInfo *rel, Path *unorderedpath)
 {
 	Path	   *cheapest = set_cheapest(rel, rel->pathlist);
 
diff --git a/src/backend/optimizer/geqo/minspantree.c b/src/backend/optimizer/geqo/minspantree.c
index 9d5eba97d6870cc96c5c2d90c8ff0ef7f30a8587..6df11b75dd6832597ae1650e2cd456932ce0c750 100644
--- a/src/backend/optimizer/geqo/minspantree.c
+++ b/src/backend/optimizer/geqo/minspantree.c
@@ -7,7 +7,7 @@
 *
 *
 * IDENTIFICATION
-*	 $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.5 1998/06/15 19:28:38 momjian Exp $
+*	 $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.6 1998/07/18 04:22:29 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
@@ -41,7 +41,7 @@
 */
 
 void
-minspantree(Query *root, List *join_rels, Rel *garel)
+minspantree(Query *root, List *join_rels, RelOptInfo *garel)
 {
 	int			number_of_rels = length(root->base_relation_list_);
 	int			number_of_joins = length(join_rels);
@@ -70,28 +70,28 @@ minspantree(Query *root, List *join_rels, Rel *garel)
 				id1,
 				id2;
 	List	   *r = NIL;
-	Rel		   *joinrel = NULL;
-	Rel		  **tmprel_array;
+	RelOptInfo		   *joinrel = NULL;
+	RelOptInfo		  **tmprel_array;
 
 
 	/* allocate memory for matrix tmprel_array[x][y] */
-	tmprel_array = (Rel **) palloc((number_of_rels + 1) * sizeof(Rel *));
+	tmprel_array = (RelOptInfo **) palloc((number_of_rels + 1) * sizeof(RelOptInfo *));
 	for (i = 0; i <= number_of_rels; i++)
-		(tmprel_array[i] = (Rel *) palloc((number_of_rels + 1) * sizeof(Rel)));
+		(tmprel_array[i] = (RelOptInfo *) palloc((number_of_rels + 1) * sizeof(RelOptInfo)));
 
 	/* read relations of join-relations into tmprel_array */
 
 	foreach(r, join_rels)
 	{
-		joinrel = (Rel *) lfirst(r);
+		joinrel = (RelOptInfo *) lfirst(r);
 		id1 = (int) lfirst(joinrel->relids);
 		id2 = (int) lsecond(joinrel->relids);
 
 		if (id1 > id2)
-			tmprel_array[id2][id1] = *(Rel *) joinrel;
+			tmprel_array[id2][id1] = *(RelOptInfo *) joinrel;
 		else
 		{
-			tmprel_array[id1][id2] = *(Rel *) joinrel;	/* ever reached? */
+			tmprel_array[id1][id2] = *(RelOptInfo *) joinrel;	/* ever reached? */
 		}
 	}
 
@@ -103,7 +103,7 @@ minspantree(Query *root, List *join_rels, Rel *garel)
 		i = 1;
 		foreach(r, join_rels)
 		{
-			garel[i] = *(Rel *) lfirst(r);
+			garel[i] = *(RelOptInfo *) lfirst(r);
 			i++;
 		}
 	}
@@ -111,9 +111,9 @@ minspantree(Query *root, List *join_rels, Rel *garel)
 
 	else if (number_of_joins == 3)
 	{
-		Rel		   *rel12 = (Rel *) &tmprel_array[1][2];
-		Rel		   *rel13 = (Rel *) &tmprel_array[1][3];
-		Rel		   *rel23 = (Rel *) &tmprel_array[2][3];
+		RelOptInfo		   *rel12 = (RelOptInfo *) &tmprel_array[1][2];
+		RelOptInfo		   *rel13 = (RelOptInfo *) &tmprel_array[1][3];
+		RelOptInfo		   *rel23 = (RelOptInfo *) &tmprel_array[2][3];
 
 		if (rel12->cheapestpath->path_cost > rel13->cheapestpath->path_cost)
 		{
@@ -159,9 +159,9 @@ minspantree(Query *root, List *join_rels, Rel *garel)
 				if (connectto[tempn] != 0)
 				{
 					if (n > tempn)
-						joinrel = (Rel *) &tmprel_array[tempn][n];
+						joinrel = (RelOptInfo *) &tmprel_array[tempn][n];
 					else
-						joinrel = (Rel *) &tmprel_array[n][tempn];
+						joinrel = (RelOptInfo *) &tmprel_array[n][tempn];
 					dist = joinrel->cheapestpath->path_cost;
 
 					if (dist < disttoconnect[tempn])
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 53b78cdfdc1fa3f2e3a11b0d9fce44fc99a19d1b..ff68a7fde492eaa90db5ae8476f32ce4e7941248 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.16 1998/06/15 19:28:38 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.17 1998/07/18 04:22:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -105,7 +105,7 @@ static void
 find_rel_paths(Query *root, List *rels)
 {
 	List	   *temp;
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 	List	   *lastpath;
 
 	foreach(temp, rels)
@@ -114,7 +114,7 @@ find_rel_paths(Query *root, List *rels)
 		List	   *rel_index_scan_list;
 		List	   *or_index_scan_list;
 
-		rel = (Rel *) lfirst(temp);
+		rel = (RelOptInfo *) lfirst(temp);
 		sequential_scan_list = lcons(create_seqscan_path(rel),
 									 NIL);
 
@@ -175,7 +175,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
 {
 	List	   *x;
 	List	   *new_rels = NIL;
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 
 	/*******************************************
 	 * genetic query optimizer entry point	   *
@@ -183,7 +183,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
 	 *******************************************/
 
 	if ((_use_geqo_) && length(root->base_relation_list_) >= _use_geqo_rels_)
-		return lcons(geqo(root), NIL);	/* returns *one* Rel, so lcons it */
+		return lcons(geqo(root), NIL);	/* returns *one* RelOptInfo, so lcons it */
 
 	/*******************************************
 	 * rest will be deprecated in case of GEQO *
@@ -212,7 +212,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
 		 */
 		if (XfuncMode != XFUNC_NOPULL && XfuncMode != XFUNC_OFF)
 			foreach(x, new_rels)
-				xfunc_trypullup((Rel *) lfirst(x));
+				xfunc_trypullup((RelOptInfo *) lfirst(x));
 #endif
 
 		prune_rel_paths(new_rels);
@@ -231,7 +231,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
 
 		foreach(x, new_rels)
 		{
-			rel = (Rel *) lfirst(x);
+			rel = (RelOptInfo *) lfirst(x);
 			if (rel->size <= 0)
 				rel->size = compute_rel_size(rel);
 			rel->width = compute_rel_width(rel);
@@ -399,7 +399,7 @@ print_path(Query *root, Path *path, int indent)
 }
 
 static void
-debug_print_rel(Query *root, Rel *rel)
+debug_print_rel(Query *root, RelOptInfo *rel)
 {
 	List	   *l;
 
diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c
index ef7b59023470184c969d4e9ee3088840a550b490..c372b6ce64447a9bb142fd42008976e9921b9001 100644
--- a/src/backend/optimizer/path/clausesel.c
+++ b/src/backend/optimizer/path/clausesel.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.8 1998/06/15 19:28:39 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.9 1998/07/18 04:22:30 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -95,12 +95,12 @@ product_selec(List *clauseinfo_list)
 void
 set_rest_relselec(Query *root, List *rel_list)
 {
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 	List	   *x;
 
 	foreach(x, rel_list)
 	{
-		rel = (Rel *) lfirst(x);
+		rel = (RelOptInfo *) lfirst(x);
 		set_rest_selec(root, rel->clauseinfo);
 	}
 }
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index efe2fab25d9a481de44709e2c237deef23821a3b..4ee522d9c37e2312a19f99c621d059fc6772229d 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.21 1998/06/15 19:28:39 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.22 1998/07/18 04:22:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -360,7 +360,7 @@ cost_hashjoin(Cost outercost,
  * Returns the size.
  */
 int
-compute_rel_size(Rel *rel)
+compute_rel_size(RelOptInfo *rel)
 {
 	Cost		temp;
 	int			temp1;
@@ -383,7 +383,7 @@ compute_rel_size(Rel *rel)
  * Returns the width of the tuple as a fixnum.
  */
 int
-compute_rel_width(Rel *rel)
+compute_rel_width(RelOptInfo *rel)
 {
 	return (compute_targetlist_width(get_actual_tlist(rel->targetlist)));
 }
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index fec093cd67abe39ca45617ab5378cddb4574e827..270bc23928f43eda70c0f24cef09d05fb5a719e1 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.16 1998/06/15 19:28:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.17 1998/07/18 04:22:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,22 +42,22 @@
 
 
 static void
-match_index_orclauses(Rel *rel, Rel *index, int indexkey,
+match_index_orclauses(RelOptInfo *rel, RelOptInfo *index, int indexkey,
 					  int xclass, List *clauseinfo_list);
 static bool
 match_index_to_operand(int indexkey, Expr *operand,
-					   Rel *rel, Rel *index);
+					   RelOptInfo *rel, RelOptInfo *index);
 static List *
-match_index_orclause(Rel *rel, Rel *index, int indexkey,
+match_index_orclause(RelOptInfo *rel, RelOptInfo *index, int indexkey,
 			 int xclass, List *or_clauses, List *other_matching_indices);
 static List *
-group_clauses_by_indexkey(Rel *rel, Rel *index,
+group_clauses_by_indexkey(RelOptInfo *rel, RelOptInfo *index,
 					int *indexkeys, Oid *classes, List *clauseinfo_list);
 static List *
-group_clauses_by_ikey_for_joins(Rel *rel, Rel *index,
+group_clauses_by_ikey_for_joins(RelOptInfo *rel, RelOptInfo *index,
 								int *indexkeys, Oid *classes, List *join_cinfo_list, List *restr_cinfo_list);
 static CInfo *
-match_clause_to_indexkey(Rel *rel, Rel *index, int indexkey,
+match_clause_to_indexkey(RelOptInfo *rel, RelOptInfo *index, int indexkey,
 						 int xclass, CInfo *clauseInfo, bool join);
 static bool
 pred_test(List *predicate_list, List *clauseinfo_list,
@@ -67,17 +67,17 @@ static bool one_pred_clause_expr_test(Expr *predicate, Node *clause);
 static bool one_pred_clause_test(Expr *predicate, Node *clause);
 static bool clause_pred_clause_test(Expr *predicate, Node *clause);
 static List *
-indexable_joinclauses(Rel *rel, Rel *index,
+indexable_joinclauses(RelOptInfo *rel, RelOptInfo *index,
 					  List *joininfo_list, List *clauseinfo_list);
 static List *
-index_innerjoin(Query *root, Rel *rel,
-				List *clausegroup_list, Rel *index);
+index_innerjoin(Query *root, RelOptInfo *rel,
+				List *clausegroup_list, RelOptInfo *index);
 static List *
-create_index_paths(Query *root, Rel *rel, Rel *index,
+create_index_paths(Query *root, RelOptInfo *rel, RelOptInfo *index,
 				   List *clausegroup_list, bool join);
 static List *add_index_paths(List *indexpaths, List *new_indexpaths);
-static bool function_index_operand(Expr *funcOpnd, Rel *rel, Rel *index);
-static bool SingleAttributeIndex(Rel *index);
+static bool function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo *index);
+static bool SingleAttributeIndex(RelOptInfo *index);
 
 /* If Spyros can use a constant PRS2_BOOL_TYPEID, I can use this */
 #define BOOL_TYPEID ((Oid) 16)
@@ -110,14 +110,14 @@ static bool SingleAttributeIndex(Rel *index);
  */
 List *
 find_index_paths(Query *root,
-				 Rel *rel,
+				 RelOptInfo *rel,
 				 List *indices,
 				 List *clauseinfo_list,
 				 List *joininfo_list)
 {
 	List	   *scanclausegroups = NIL;
 	List	   *scanpaths = NIL;
-	Rel		   *index = (Rel *) NULL;
+	RelOptInfo		   *index = (RelOptInfo *) NULL;
 	List	   *joinclausegroups = NIL;
 	List	   *joinpaths = NIL;
 	List	   *retval = NIL;
@@ -125,7 +125,7 @@ find_index_paths(Query *root,
 	if (indices == NIL)
 		return (NULL);
 
-	index = (Rel *) lfirst(indices);
+	index = (RelOptInfo *) lfirst(indices);
 
 	retval = find_index_paths(root,
 							  rel,
@@ -235,8 +235,8 @@ find_index_paths(Query *root,
  *
  */
 static void
-match_index_orclauses(Rel *rel,
-					  Rel *index,
+match_index_orclauses(RelOptInfo *rel,
+					  RelOptInfo *index,
 					  int indexkey,
 					  int xclass,
 					  List *clauseinfo_list)
@@ -273,8 +273,8 @@ match_index_orclauses(Rel *rel,
 static bool
 match_index_to_operand(int indexkey,
 					   Expr *operand,
-					   Rel *rel,
-					   Rel *index)
+					   RelOptInfo *rel,
+					   RelOptInfo *index)
 {
 
 	/*
@@ -311,8 +311,8 @@ match_index_to_operand(int indexkey,
  * match the third, g,h match the fourth, etc.
  */
 static List *
-match_index_orclause(Rel *rel,
-					 Rel *index,
+match_index_orclause(RelOptInfo *rel,
+					 RelOptInfo *index,
 					 int indexkey,
 					 int xclass,
 					 List *or_clauses,
@@ -393,8 +393,8 @@ match_index_orclause(Rel *rel,
  *
  */
 static List *
-group_clauses_by_indexkey(Rel *rel,
-						  Rel *index,
+group_clauses_by_indexkey(RelOptInfo *rel,
+						  RelOptInfo *index,
 						  int *indexkeys,
 						  Oid *classes,
 						  List *clauseinfo_list)
@@ -455,8 +455,8 @@ group_clauses_by_indexkey(Rel *rel,
  *
  */
 static List *
-group_clauses_by_ikey_for_joins(Rel *rel,
-								Rel *index,
+group_clauses_by_ikey_for_joins(RelOptInfo *rel,
+								RelOptInfo *index,
 								int *indexkeys,
 								Oid *classes,
 								List *join_cinfo_list,
@@ -578,8 +578,8 @@ group_clauses_by_ikey_for_joins(Rel *rel,
  *
  */
 static CInfo *
-match_clause_to_indexkey(Rel *rel,
-						 Rel *index,
+match_clause_to_indexkey(RelOptInfo *rel,
+						 RelOptInfo *index,
 						 int indexkey,
 						 int xclass,
 						 CInfo *clauseInfo,
@@ -1102,7 +1102,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
  *
  */
 static List *
-indexable_joinclauses(Rel *rel, Rel *index,
+indexable_joinclauses(RelOptInfo *rel, RelOptInfo *index,
 					  List *joininfo_list, List *clauseinfo_list)
 {
 	JInfo	   *joininfo = (JInfo *) NULL;
@@ -1176,7 +1176,7 @@ extract_restrict_clauses(List *clausegroup)
  *
  */
 static List *
-index_innerjoin(Query *root, Rel *rel, List *clausegroup_list, Rel *index)
+index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, RelOptInfo *index)
 {
 	List	   *clausegroup = NIL;
 	List	   *cg_list = NIL;
@@ -1262,8 +1262,8 @@ index_innerjoin(Query *root, Rel *rel, List *clausegroup_list, Rel *index)
  */
 static List *
 create_index_paths(Query *root,
-				   Rel *rel,
-				   Rel *index,
+				   RelOptInfo *rel,
+				   RelOptInfo *index,
 				   List *clausegroup_list,
 				   bool join)
 {
@@ -1308,7 +1308,7 @@ add_index_paths(List *indexpaths, List *new_indexpaths)
 }
 
 static bool
-function_index_operand(Expr *funcOpnd, Rel *rel, Rel *index)
+function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo *index)
 {
 	Oid			heapRelid = (Oid) lfirsti(rel->relids);
 	Func	   *function;
@@ -1368,7 +1368,7 @@ function_index_operand(Expr *funcOpnd, Rel *rel, Rel *index)
 }
 
 static bool
-SingleAttributeIndex(Rel *index)
+SingleAttributeIndex(RelOptInfo *index)
 {
 
 	/*
diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c
index 33448a6c037b4e0a5cec9abd2d23075b511f2cb9..2e835276710c3baf94c1644969729b39dcab371b 100644
--- a/src/backend/optimizer/path/joinpath.c
+++ b/src/backend/optimizer/path/joinpath.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.6 1998/06/15 19:28:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.7 1998/07/18 04:22:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,18 +31,18 @@
 
 static Path *best_innerjoin(List *join_paths, List *outer_relid);
 static List *
-sort_inner_and_outer(Rel *joinrel, Rel *outerrel, Rel *innerrel,
+sort_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel,
 					 List *mergeinfo_list);
 static List *
-match_unsorted_outer(Rel *joinrel, Rel *outerrel, Rel *innerrel,
+match_unsorted_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel,
 		List *outerpath_list, Path *cheapest_inner, Path *best_innerjoin,
 					 List *mergeinfo_list);
 static List *
-match_unsorted_inner(Rel *joinrel, Rel *outerrel, Rel *innerrel,
+match_unsorted_inner(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel,
 					 List *innerpath_list, List *mergeinfo_list);
-static bool EnoughMemoryForHashjoin(Rel *hashrel);
+static bool EnoughMemoryForHashjoin(RelOptInfo *hashrel);
 static List *
-hash_inner_and_outer(Rel *joinrel, Rel *outerrel, Rel *innerrel,
+hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel,
 					 List *hashinfo_list);
 
 /*
@@ -76,11 +76,11 @@ find_all_join_paths(Query *root, List *joinrels)
 
 	while (joinrels != NIL)
 	{
-		Rel		   *joinrel = (Rel *) lfirst(joinrels);
+		RelOptInfo		   *joinrel = (RelOptInfo *) lfirst(joinrels);
 		List	   *innerrelids;
 		List	   *outerrelids;
-		Rel		   *innerrel;
-		Rel		   *outerrel;
+		RelOptInfo		   *innerrel;
+		RelOptInfo		   *outerrel;
 		Path	   *bestinnerjoin;
 		List	   *pathlist = NIL;
 
@@ -238,9 +238,9 @@ best_innerjoin(List *join_paths, List *outer_relids)
  * Returns a list of mergesort paths.
  */
 static List *
-sort_inner_and_outer(Rel *joinrel,
-					 Rel *outerrel,
-					 Rel *innerrel,
+sort_inner_and_outer(RelOptInfo *joinrel,
+					 RelOptInfo *outerrel,
+					 RelOptInfo *innerrel,
 					 List *mergeinfo_list)
 {
 	List	   *ms_list = NIL;
@@ -316,9 +316,9 @@ sort_inner_and_outer(Rel *joinrel,
  * Returns a list of possible join path nodes.
  */
 static List *
-match_unsorted_outer(Rel *joinrel,
-					 Rel *outerrel,
-					 Rel *innerrel,
+match_unsorted_outer(RelOptInfo *joinrel,
+					 RelOptInfo *outerrel,
+					 RelOptInfo *innerrel,
 					 List *outerpath_list,
 					 Path *cheapest_inner,
 					 Path *best_innerjoin,
@@ -469,9 +469,9 @@ match_unsorted_outer(Rel *joinrel,
  * Returns a list of possible merge paths.
  */
 static List *
-match_unsorted_inner(Rel *joinrel,
-					 Rel *outerrel,
-					 Rel *innerrel,
+match_unsorted_inner(RelOptInfo *joinrel,
+					 RelOptInfo *outerrel,
+					 RelOptInfo *innerrel,
 					 List *innerpath_list,
 					 List *mergeinfo_list)
 {
@@ -565,7 +565,7 @@ match_unsorted_inner(Rel *joinrel,
 }
 
 static bool
-EnoughMemoryForHashjoin(Rel *hashrel)
+EnoughMemoryForHashjoin(RelOptInfo *hashrel)
 {
 	int			ntuples;
 	int			tupsize;
@@ -599,9 +599,9 @@ EnoughMemoryForHashjoin(Rel *hashrel)
  * Returns a list of hashjoin paths.
  */
 static List *
-hash_inner_and_outer(Rel *joinrel,
-					 Rel *outerrel,
-					 Rel *innerrel,
+hash_inner_and_outer(RelOptInfo *joinrel,
+					 RelOptInfo *outerrel,
+					 RelOptInfo *innerrel,
 					 List *hashinfo_list)
 {
 	HInfo	   *xhashinfo = (HInfo *) NULL;
diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c
index 48b0b28c52f22439349462ce406e4ff6ce27d106..4ca9cc157ee012c6ef807b2420499ff359e21bac 100644
--- a/src/backend/optimizer/path/joinrels.c
+++ b/src/backend/optimizer/path/joinrels.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.10 1998/06/15 19:28:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.11 1998/07/18 04:22:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,18 +31,18 @@ bool		_use_right_sided_plans_ = false;
 
 #endif
 
-static List *find_clause_joins(Query *root, Rel *outer_rel, List *joininfo_list);
-static List *find_clauseless_joins(Rel *outer_rel, List *inner_rels);
-static Rel *init_join_rel(Rel *outer_rel, Rel *inner_rel, JInfo *joininfo);
+static List *find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list);
+static List *find_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels);
+static RelOptInfo *init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JInfo *joininfo);
 static List *
 new_join_tlist(List *tlist, List *other_relids,
 			   int first_resdomno);
 static List *new_joininfo_list(List *joininfo_list, List *join_relids);
-static void add_superrels(Rel *rel, Rel *super_rel);
-static bool nonoverlap_rels(Rel *rel1, Rel *rel2);
+static void add_superrels(RelOptInfo *rel, RelOptInfo *super_rel);
+static bool nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2);
 static bool nonoverlap_sets(List *s1, List *s2);
 static void
-set_joinrel_size(Rel *joinrel, Rel *outer_rel, Rel *inner_rel,
+set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel,
 				 JInfo *jinfo);
 
 /*
@@ -67,7 +67,7 @@ find_join_rels(Query *root, List *outer_rels)
 
 	foreach(r, outer_rels)
 	{
-		Rel		   *outer_rel = (Rel *) lfirst(r);
+		RelOptInfo		   *outer_rel = (RelOptInfo *) lfirst(r);
 
 		if (!(joins = find_clause_joins(root, outer_rel, outer_rel->joininfo)))
 		{
@@ -99,7 +99,7 @@ find_join_rels(Query *root, List *outer_rels)
  * Returns a list of new join relations.
  */
 static List *
-find_clause_joins(Query *root, Rel *outer_rel, List *joininfo_list)
+find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list)
 {
 	List	   *join_list = NIL;
 	List	   *i = NIL;
@@ -107,7 +107,7 @@ find_clause_joins(Query *root, Rel *outer_rel, List *joininfo_list)
 	foreach(i, joininfo_list)
 	{
 		JInfo	   *joininfo = (JInfo *) lfirst(i);
-		Rel		   *rel;
+		RelOptInfo		   *rel;
 
 		if (!joininfo->inactive)
 		{
@@ -158,16 +158,16 @@ find_clause_joins(Query *root, Rel *outer_rel, List *joininfo_list)
  * Returns a list of new join relations.
  */
 static List *
-find_clauseless_joins(Rel *outer_rel, List *inner_rels)
+find_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels)
 {
-	Rel		   *inner_rel;
+	RelOptInfo		   *inner_rel;
 	List	   *t_list = NIL;
 	List	   *temp_node = NIL;
 	List	   *i = NIL;
 
 	foreach(i, inner_rels)
 	{
-		inner_rel = (Rel *) lfirst(i);
+		inner_rel = (RelOptInfo *) lfirst(i);
 		if (nonoverlap_rels(inner_rel, outer_rel))
 		{
 			temp_node = lcons(init_join_rel(outer_rel,
@@ -192,10 +192,10 @@ find_clauseless_joins(Rel *outer_rel, List *inner_rels)
  *
  * Returns the new join relation node.
  */
-static Rel *
-init_join_rel(Rel *outer_rel, Rel *inner_rel, JInfo *joininfo)
+static RelOptInfo *
+init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JInfo *joininfo)
 {
-	Rel		   *joinrel = makeNode(Rel);
+	RelOptInfo		   *joinrel = makeNode(RelOptInfo);
 	List	   *joinrel_joininfo_list = NIL;
 	List	   *new_outer_tlist;
 	List	   *new_inner_tlist;
@@ -396,19 +396,19 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 	foreach(xjoinrel, joinrels)
 	{
-		Rel		   *joinrel = (Rel *) lfirst(xjoinrel);
+		RelOptInfo		   *joinrel = (RelOptInfo *) lfirst(xjoinrel);
 
 		foreach(xrelid, joinrel->relids)
 		{
 			Relid		relid = (Relid) lfirst(xrelid);
-			Rel		   *rel = get_join_rel(root, relid);
+			RelOptInfo		   *rel = get_join_rel(root, relid);
 
 			add_superrels(rel, joinrel);
 		}
 	}
 	foreach(xjoinrel, joinrels)
 	{
-		Rel		   *joinrel = (Rel *) lfirst(xjoinrel);
+		RelOptInfo		   *joinrel = (RelOptInfo *) lfirst(xjoinrel);
 
 		foreach(xjoininfo, joinrel->joininfo)
 		{
@@ -421,7 +421,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 			foreach(xrelid, other_rels)
 			{
 				Relid		relid = (Relid) lfirst(xrelid);
-				Rel		   *rel = get_join_rel(root, relid);
+				RelOptInfo		   *rel = get_join_rel(root, relid);
 				List	   *super_rels = rel->superrels;
 				List	   *xsuper_rel = NIL;
 				JInfo	   *new_joininfo = makeNode(JInfo);
@@ -436,7 +436,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 				foreach(xsuper_rel, super_rels)
 				{
-					Rel		   *super_rel = (Rel *) lfirst(xsuper_rel);
+					RelOptInfo		   *super_rel = (RelOptInfo *) lfirst(xsuper_rel);
 
 					if (nonoverlap_rels(super_rel, joinrel))
 					{
@@ -471,7 +471,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 	}
 	foreach(xrel, outerrels)
 	{
-		Rel		   *rel = (Rel *) lfirst(xrel);
+		RelOptInfo		   *rel = (RelOptInfo *) lfirst(xrel);
 
 		rel->superrels = NIL;
 	}
@@ -499,7 +499,7 @@ final_join_rels(List *join_rel_list)
 	 */
 	foreach(xrel, join_rel_list)
 	{
-		Rel		   *rel = (Rel *) lfirst(xrel);
+		RelOptInfo		   *rel = (RelOptInfo *) lfirst(xrel);
 		List	   *xjoininfo = NIL;
 		bool		final = true;
 
@@ -533,7 +533,7 @@ final_join_rels(List *join_rel_list)
  * Modifies the superrels field of rel
  */
 static void
-add_superrels(Rel *rel, Rel *super_rel)
+add_superrels(RelOptInfo *rel, RelOptInfo *super_rel)
 {
 	rel->superrels = lappend(rel->superrels, super_rel);
 }
@@ -548,7 +548,7 @@ add_superrels(Rel *rel, Rel *super_rel)
  * Returns non-nil if rel1 and rel2 do not overlap.
  */
 static bool
-nonoverlap_rels(Rel *rel1, Rel *rel2)
+nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2)
 {
 	return (nonoverlap_sets(rel1->relids, rel2->relids));
 }
@@ -569,7 +569,7 @@ nonoverlap_sets(List *s1, List *s2)
 }
 
 static void
-set_joinrel_size(Rel *joinrel, Rel *outer_rel, Rel *inner_rel, JInfo *jinfo)
+set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel, JInfo *jinfo)
 {
 	int			ntuples;
 	float		selec;
diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c
index fc535ba8ba61c96b80ec6313594de0db279d8e1d..c697078e1b20986f417959d85d057ee7749b217e 100644
--- a/src/backend/optimizer/path/orindxpath.c
+++ b/src/backend/optimizer/path/orindxpath.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.6 1998/06/15 19:28:41 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.7 1998/07/18 04:22:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -32,11 +32,11 @@
 
 
 static void
-best_or_subclause_indices(Query *root, Rel *rel, List *subclauses,
+best_or_subclause_indices(Query *root, RelOptInfo *rel, List *subclauses,
 List *indices, List *examined_indexids, Cost subcost, List *selectivities,
 						  List **indexids, Cost *cost, List **selecs);
 static void
-best_or_subclause_index(Query *root, Rel *rel, Expr *subclause,
+best_or_subclause_index(Query *root, RelOptInfo *rel, Expr *subclause,
 				   List *indices, int *indexid, Cost *cost, Cost *selec);
 
 
@@ -52,7 +52,7 @@ best_or_subclause_index(Query *root, Rel *rel, Expr *subclause,
  */
 List *
 create_or_index_paths(Query *root,
-					  Rel *rel, List *clauses)
+					  RelOptInfo *rel, List *clauses)
 {
 	List	   *t_list = NIL;
 
@@ -157,7 +157,7 @@ create_or_index_paths(Query *root,
  */
 static void
 best_or_subclause_indices(Query *root,
-						  Rel *rel,
+						  RelOptInfo *rel,
 						  List *subclauses,
 						  List *indices,
 						  List *examined_indexids,
@@ -212,7 +212,7 @@ best_or_subclause_indices(Query *root,
  */
 static void
 best_or_subclause_index(Query *root,
-						Rel *rel,
+						RelOptInfo *rel,
 						Expr *subclause,
 						List *indices,
 						int *retIndexid,		/* return value */
@@ -224,7 +224,7 @@ best_or_subclause_index(Query *root,
 		Datum		value;
 		int			flag = 0;
 		Cost		subcost;
-		Rel		   *index = (Rel *) lfirst(indices);
+		RelOptInfo		   *index = (RelOptInfo *) lfirst(indices);
 		AttrNumber	attno = (get_leftop(subclause))->varattno;
 		Oid			opno = ((Oper *) subclause->oper)->opno;
 		bool		constant_on_right = non_null((Expr *) get_rightop(subclause));
diff --git a/src/backend/optimizer/path/prune.c b/src/backend/optimizer/path/prune.c
index 85bc780261bd5e32404641c357bffecdedfaf431..f9c1605b3918381b70d3c262ed983a02e40833d8 100644
--- a/src/backend/optimizer/path/prune.c
+++ b/src/backend/optimizer/path/prune.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.14 1998/06/15 19:28:41 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.15 1998/07/18 04:22:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,7 +24,7 @@
 #include "utils/elog.h"
 
 
-static List *prune_joinrel(Rel *rel, List *other_rels);
+static List *prune_joinrel(RelOptInfo *rel, List *other_rels);
 
 /*
  * prune-joinrels--
@@ -44,7 +44,7 @@ prune_joinrels(List *rel_list)
 	 * deleted
 	 */
 	foreach(i, rel_list)
-		lnext(i) = prune_joinrel((Rel *) lfirst(i), lnext(i));
+		lnext(i) = prune_joinrel((RelOptInfo *) lfirst(i), lnext(i));
 }
 
 /*
@@ -59,14 +59,14 @@ prune_joinrels(List *rel_list)
  *
  */
 static List *
-prune_joinrel(Rel *rel, List *other_rels)
+prune_joinrel(RelOptInfo *rel, List *other_rels)
 {
 	List	   *i = NIL;
 	List	   *result = NIL;
 
 	foreach(i, other_rels)
 	{
-		Rel	   *other_rel = (Rel *) lfirst(i);
+		RelOptInfo	   *other_rel = (RelOptInfo *) lfirst(i);
 		
 		if (same(rel->relids, other_rel->relids))
 		{
@@ -96,12 +96,12 @@ prune_rel_paths(List *rel_list)
 	List	   *x = NIL;
 	List	   *y = NIL;
 	Path	   *path = NULL;
-	Rel		   *rel = (Rel *) NULL;
+	RelOptInfo		   *rel = (RelOptInfo *) NULL;
 	JoinPath   *cheapest = (JoinPath *) NULL;
 
 	foreach(x, rel_list)
 	{
-		rel = (Rel *) lfirst(x);
+		rel = (RelOptInfo *) lfirst(x);
 		rel->size = 0;
 		foreach(y, rel->pathlist)
 		{
@@ -130,7 +130,7 @@ prune_rel_paths(List *rel_list)
  *
  */
 Path *
-prune_rel_path(Rel *rel, Path *unorderedpath)
+prune_rel_path(RelOptInfo *rel, Path *unorderedpath)
 {
 	Path	   *cheapest = set_cheapest(rel, rel->pathlist);
 
@@ -165,7 +165,7 @@ merge_joinrels(List *rel_list1, List *rel_list2)
 
 	foreach(xrel, rel_list1)
 	{
-		Rel		   *rel = (Rel *) lfirst(xrel);
+		RelOptInfo		   *rel = (RelOptInfo *) lfirst(xrel);
 
 		rel_list2 = prune_joinrel(rel, rel_list2);
 	}
@@ -187,7 +187,7 @@ merge_joinrels(List *rel_list1, List *rel_list2)
 List *
 prune_oldrels(List *old_rels)
 {
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 	List	   *joininfo_list,
 			   *xjoininfo,
 			   *i,
@@ -195,7 +195,7 @@ prune_oldrels(List *old_rels)
 
 	foreach(i, old_rels)
 	{
-		rel = (Rel *) lfirst(i);
+		rel = (RelOptInfo *) lfirst(i);
 		joininfo_list = rel->joininfo;
 
 		if (joininfo_list == NIL)
diff --git a/src/backend/optimizer/path/xfunc.c b/src/backend/optimizer/path/xfunc.c
index 6aaf09823df207d29f526c0efe9462551d8dea4a..3aac31b5cf52695aac743411a3d533a526249d34 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.15 1998/06/15 19:28:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.16 1998/07/18 04:22:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,7 +57,7 @@ xfunc_card_unreferenced(Query *queryInfo,
 */
 
 void
-xfunc_trypullup(Rel rel)
+xfunc_trypullup(RelOptInfo rel)
 {
 	LispValue	y;				/* list ptr */
 	CInfo		maxcinfo;		/* The CInfo to pull up, as calculated by
@@ -242,7 +242,7 @@ xfunc_shouldpull(Query *queryInfo,
 			/*
 			 * * we've left an expensive restriction below a join.  Since *
 			 * we may pullup this restriction in predmig.c, we'd best *
-			 * set the Rel of this join to be unpruneable
+			 * set the RelOptInfo of this join to be unpruneable
 			 */
 			set_pruneable(get_parent(parentpath), false);
 			/* and fall through */
@@ -256,8 +256,8 @@ xfunc_shouldpull(Query *queryInfo,
  ** xfunc_pullup --
  **    move clause from child pathnode to parent pathnode.	 This operation
  ** makes the child pathnode produce a larger relation than it used to.
- ** This means that we must construct a new Rel just for the childpath,
- ** although this Rel will not be added to the list of Rels to be joined up
+ ** This means that we must construct a new RelOptInfo just for the childpath,
+ ** although this RelOptInfo will not be added to the list of Rels to be joined up
  ** in the query; it's merely a parent for the new childpath.
  **    We also have to fix up the path costs of the child and parent.
  **
@@ -272,7 +272,7 @@ xfunc_pullup(Query *queryInfo,
 			 int clausetype)	/* whether clause to pull is join or local */
 {
 	Path		newkid;
-	Rel			newrel;
+	RelOptInfo			newrel;
 	Cost		pulled_selec;
 	Cost		cost;
 	CInfo		newinfo;
@@ -294,7 +294,7 @@ xfunc_pullup(Query *queryInfo,
 	}
 
 	/*
-	 * * give the new child path its own Rel node that reflects the * lack
+	 * * give the new child path its own RelOptInfo node that reflects the * lack
 	 * of the pulled-up predicate
 	 */
 	pulled_selec = compute_clause_selec(queryInfo,
@@ -400,7 +400,7 @@ xfunc_join_expense(Query *queryInfo, JoinPath path, int whichchild)
 	/*
 	 * * the second argument to xfunc_card_unreferenced reflects all the *
 	 * relations involved in the join clause, i.e. all the relids in the
-	 * Rel * of the join clause
+	 * RelOptInfo * of the join clause
 	 */
 	Count		card = 0;
 	Cost		cost = xfunc_expense_per_tuple(path, whichchild);
@@ -736,9 +736,9 @@ xfunc_card_unreferenced(Query *queryInfo,
 	/* find all relids of base relations referenced in query */
 	foreach(temp, queryInfo->base_relation_list_)
 	{
-		Assert(lnext(get_relids((Rel) lfirst(temp))) == LispNil);
+		Assert(lnext(get_relids((RelOptInfo) lfirst(temp))) == LispNil);
 		allrelids = lappend(allrelids,
-							lfirst(get_relids((Rel) lfirst(temp))));
+							lfirst(get_relids((RelOptInfo) lfirst(temp))));
 	}
 
 	/* find all relids referenced in query but not in clause */
@@ -758,7 +758,7 @@ xfunc_card_product(Query *queryInfo, Relid relids)
 {
 	LispValue	cinfonode;
 	LispValue	temp;
-	Rel			currel;
+	RelOptInfo			currel;
 	Cost		tuples;
 	Count		retval = 0;
 
@@ -1095,8 +1095,8 @@ xfunc_total_path_cost(JoinPath pathnode)
 Cost
 xfunc_expense_per_tuple(JoinPath joinnode, int whichchild)
 {
-	Rel			outerrel = get_parent((Path) get_outerjoinpath(joinnode));
-	Rel			innerrel = get_parent((Path) get_innerjoinpath(joinnode));
+	RelOptInfo			outerrel = get_parent((Path) get_outerjoinpath(joinnode));
+	RelOptInfo			innerrel = get_parent((Path) get_innerjoinpath(joinnode));
 	Count		outerwidth = get_width(outerrel);
 	Count		outers_per_page = ceil(BLCKSZ / (outerwidth + sizeof(HeapTupleData)));
 
@@ -1133,11 +1133,11 @@ xfunc_expense_per_tuple(JoinPath joinnode, int whichchild)
  ** nodes to point to the correct varno (either INNER or OUTER, depending
  ** on which child the clause was pulled from), and the right varattno in the
  ** target list of the child's former relation.  If the target list of the
- ** child Rel does not contain the attribute we need, we add it.
+ ** child RelOptInfo does not contain the attribute we need, we add it.
  */
 void
 xfunc_fixvars(LispValue clause, /* clause being pulled up */
-			  Rel rel,			/* rel it's being pulled from */
+			  RelOptInfo rel,			/* rel it's being pulled from */
 			  int varno)		/* whether rel is INNER or OUTER of join */
 {
 	LispValue	tmpclause;		/* temporary variable */
@@ -1426,9 +1426,9 @@ do { \
  **   Just like _copyRel, but doesn't copy the paths
  */
 bool
-xfunc_copyrel(Rel from, Rel *to)
+xfunc_copyrel(RelOptInfo from, RelOptInfo *to)
 {
-	Rel			newnode;
+	RelOptInfo			newnode;
 
 	Pointer		(*alloc) () = palloc;
 
@@ -1444,7 +1444,7 @@ xfunc_copyrel(Rel from, Rel *to)
 	}
 
 	/* COPY_NEW(c) */
-	newnode = (Rel) (*alloc) (classSize(Rel));
+	newnode = (RelOptInfo) (*alloc) (classSize(RelOptInfo));
 	if (newnode == NULL)
 		return false;
 
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 22d44471ac423a80de3637cb8a8a84e3810ef157..3d0efbd51faf4f10e08a9ff336ea35b74ddde459 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.28 1998/06/15 19:28:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.29 1998/07/18 04:22:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -106,7 +106,7 @@ create_plan(Path *best_path)
 {
 	List	   *tlist;
 	Plan	   *plan_node = (Plan *) NULL;
-	Rel		   *parent_rel;
+	RelOptInfo		   *parent_rel;
 	int			size;
 	int			width;
 	int			pages;
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index cacf728f4d44af4dbd81aefae48e67b911283490..41cc515405e36d955e05020bc643de92f32f9d12 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.12 1998/06/15 19:28:43 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.13 1998/07/18 04:22:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -79,7 +79,7 @@ initialize_base_rels_list(Query *root, List *tlist)
 	{
 		Var		   *var;
 		Index		varno;
-		Rel		   *result;
+		RelOptInfo		   *result;
 
 		var = (Var *) lfirst(tvar);
 		varno = var->varno;
@@ -108,7 +108,7 @@ add_missing_vars_to_base_rels(Query *root, List *tlist)
 	{
 		RangeTblEntry *rte = (RangeTblEntry *) lfirst(l);
 		List	   *relids;
-		Rel		   *result;
+		RelOptInfo		   *result;
 		Var		   *var;
 
 		relids = lconsi(varno, NIL);
@@ -187,7 +187,7 @@ add_clause_to_rels(Query *root, List *clause)
 
 	if (length(relids) == 1)
 	{
-		Rel		   *rel = get_base_rel(root, lfirsti(relids));
+		RelOptInfo		   *rel = get_base_rel(root, lfirsti(relids));
 
 		/*
 		 * There is only one relation participating in 'clause', so
@@ -302,7 +302,7 @@ add_vars_to_rels(Query *root, List *vars, List *join_relids)
 {
 	Var		   *var;
 	List	   *temp = NIL;
-	Rel		   *rel = (Rel *) NULL;
+	RelOptInfo		   *rel = (RelOptInfo *) NULL;
 	TargetEntry *tlistentry;
 
 	foreach(temp, vars)
@@ -337,14 +337,14 @@ initialize_join_clause_info(List *rel_list)
 	List	   *x,
 			   *y,
 			   *z;
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 	JInfo	   *joininfo;
 	CInfo	   *clauseinfo;
 	Expr	   *clause;
 
 	foreach(x, rel_list)
 	{
-		rel = (Rel *) lfirst(x);
+		rel = (RelOptInfo *) lfirst(x);
 		foreach(y, rel->joininfo)
 		{
 			joininfo = (JInfo *) lfirst(y);
diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c
index 9af01930374eec4798fc9913045a3535a8801c8f..d1825f80ea3fecb02b68424c7f7388cc35eabb40 100644
--- a/src/backend/optimizer/plan/planmain.c
+++ b/src/backend/optimizer/plan/planmain.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.22 1998/06/15 19:28:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.23 1998/07/18 04:22:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -250,7 +250,7 @@ subplanner(Query *root,
 		   List *flat_tlist,
 		   List *qual)
 {
-	Rel		   *final_relation;
+	RelOptInfo		   *final_relation;
 	List	   *final_relation_list;
 
 	/*
@@ -274,9 +274,9 @@ subplanner(Query *root,
 									 root->base_relation_list_);
 
 	if (final_relation_list)
-		final_relation = (Rel *) lfirst(final_relation_list);
+		final_relation = (RelOptInfo *) lfirst(final_relation_list);
 	else
-		final_relation = (Rel *) NIL;
+		final_relation = (RelOptInfo *) NIL;
 
 #if 0							/* fix xfunc */
 
diff --git a/src/backend/optimizer/util/indexnode.c b/src/backend/optimizer/util/indexnode.c
index 33a52e2c8d944b9cc0a0dbff11c70e6486f700fe..43f870cb1fc5569c81d542eb11169e0020f91718 100644
--- a/src/backend/optimizer/util/indexnode.c
+++ b/src/backend/optimizer/util/indexnode.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.7 1998/06/15 19:28:48 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.8 1998/07/18 04:22:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,7 +33,7 @@ static List *find_secondary_index(Query *root, Oid relid);
  *
  */
 List *
-find_relation_indices(Query *root, Rel *rel)
+find_relation_indices(Query *root, RelOptInfo *rel)
 {
 	if (rel->indexed)
 		return (find_secondary_index(root, lfirsti(rel->relids)));
@@ -61,7 +61,7 @@ find_secondary_index(Query *root, Oid relid)
 
 	while (index_info(root, first, relid, &indexinfo))
 	{
-		Rel		   *indexnode = makeNode(Rel);
+		RelOptInfo		   *indexnode = makeNode(RelOptInfo);
 
 		indexnode->relids = lconsi(indexinfo.relid, NIL);
 		indexnode->relam = indexinfo.relam;
diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c
index 32e0f60454cd74bbf7f25191d8207bbe9e7ffd95..9f2e574fe63261cf33226c42c6c1b31740e6fcc7 100644
--- a/src/backend/optimizer/util/joininfo.c
+++ b/src/backend/optimizer/util/joininfo.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.7 1998/06/15 19:28:48 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.8 1998/07/18 04:22:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,7 +62,7 @@ joininfo_member(List *join_relids, List *joininfo_list)
  *
  */
 JInfo *
-find_joininfo_node(Rel *this_rel, List *join_relids)
+find_joininfo_node(RelOptInfo *this_rel, List *join_relids)
 {
 	JInfo	   *joininfo = joininfo_member(join_relids,
 										   this_rel->joininfo);
diff --git a/src/backend/optimizer/util/keys.c b/src/backend/optimizer/util/keys.c
index eb49cb5ad3b97e6bfad58d043a357da36f1541da..60bbf08dd170ecb837860b2db8ab2b562aa66fc5 100644
--- a/src/backend/optimizer/util/keys.c
+++ b/src/backend/optimizer/util/keys.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.6 1998/02/26 04:33:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.7 1998/07/18 04:22:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -54,7 +54,7 @@ static bool equal_indexkey_var(int index_key, Var *var);
  *
  */
 bool
-match_indexkey_operand(int indexkey, Var *operand, Rel *rel)
+match_indexkey_operand(int indexkey, Var *operand, RelOptInfo *rel)
 {
 	if (IsA(operand, Var) &&
 		(lfirsti(rel->relids) == operand->varno) &&
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index 23917e2c9d93491ae068b78fa71bf9d7db9f74df..7b48b91bd5cbe72490291c522125c080f9fa50ed 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.8 1998/06/15 19:28:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.9 1998/07/18 04:22:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,13 +62,13 @@ path_is_cheaper(Path *path1, Path *path2)
  *
  */
 Path *
-set_cheapest(Rel *parent_rel, List *pathlist)
+set_cheapest(RelOptInfo *parent_rel, List *pathlist)
 {
 	List	   *p;
 	Path	   *cheapest_so_far;
 
 	Assert(pathlist != NIL);
-	Assert(IsA(parent_rel, Rel));
+	Assert(IsA(parent_rel, RelOptInfo));
 
 	cheapest_so_far = (Path *) lfirst(pathlist);
 
@@ -99,7 +99,7 @@ set_cheapest(Rel *parent_rel, List *pathlist)
  *
  */
 List *
-add_pathlist(Rel *parent_rel, List *unique_paths, List *new_paths)
+add_pathlist(RelOptInfo *parent_rel, List *unique_paths, List *new_paths)
 {
 	List	   *x;
 	Path	   *new_path;
@@ -200,7 +200,7 @@ better_path(Path *new_path, List *unique_paths, bool *noOther)
  *
  */
 Path *
-create_seqscan_path(Rel *rel)
+create_seqscan_path(RelOptInfo *rel)
 {
 	int			relid = 0;
 
@@ -251,8 +251,8 @@ create_seqscan_path(Rel *rel)
  */
 IndexPath  *
 create_index_path(Query *root,
-				  Rel *rel,
-				  Rel *index,
+				  RelOptInfo *rel,
+				  RelOptInfo *index,
 				  List *restriction_clauses,
 				  bool is_join_scan)
 {
@@ -406,8 +406,8 @@ create_index_path(Query *root,
  *
  */
 JoinPath   *
-create_nestloop_path(Rel *joinrel,
-					 Rel *outer_rel,
+create_nestloop_path(RelOptInfo *joinrel,
+					 RelOptInfo *outer_rel,
 					 Path *outer_path,
 					 Path *inner_path,
 					 List *keys)
@@ -481,7 +481,7 @@ create_nestloop_path(Rel *joinrel,
  *
  */
 MergePath  *
-create_mergesort_path(Rel *joinrel,
+create_mergesort_path(RelOptInfo *joinrel,
 					  int outersize,
 					  int innersize,
 					  int outerwidth,
@@ -547,7 +547,7 @@ create_mergesort_path(Rel *joinrel,
  *
  */
 HashPath   *
-create_hashjoin_path(Rel *joinrel,
+create_hashjoin_path(RelOptInfo *joinrel,
 					 int outersize,
 					 int innersize,
 					 int outerwidth,
diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index b18f3342015385c09b1b1ddc894d0218d93c9bbe..87f0aef8d4d2761ee71c149cb57dd0497119ade8 100644
--- a/src/backend/optimizer/util/relnode.c
+++ b/src/backend/optimizer/util/relnode.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.5 1998/02/26 04:33:21 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.6 1998/07/18 04:22:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,17 +27,17 @@
  *	  necessary. This is for base relations.
  *
  */
-Rel *
+RelOptInfo *
 get_base_rel(Query *root, int relid)
 {
 	List	   *relids;
-	Rel		   *rel;
+	RelOptInfo		   *rel;
 
 	relids = lconsi(relid, NIL);
 	rel = rel_member(relids, root->base_relation_list_);
 	if (rel == NULL)
 	{
-		rel = makeNode(Rel);
+		rel = makeNode(RelOptInfo);
 		rel->relids = relids;
 		rel->indexed = false;
 		rel->pages = 0;
@@ -100,7 +100,7 @@ get_base_rel(Query *root, int relid)
  *	  creating a new one if necessary. This is for join relations.
  *
  */
-Rel *
+RelOptInfo *
 get_join_rel(Query *root, List *relid)
 {
 	return rel_member(relid, root->join_relation_list_);
@@ -114,7 +114,7 @@ get_join_rel(Query *root, List *relid)
  * Returns the corresponding entry in 'rels' if it is there.
  *
  */
-Rel *
+RelOptInfo *
 rel_member(List *relid, List *rels)
 {
 	List	   *temp = NIL;
@@ -124,9 +124,9 @@ rel_member(List *relid, List *rels)
 	{
 		foreach(temp, rels)
 		{
-			temprelid = ((Rel *) lfirst(temp))->relids;
+			temprelid = ((RelOptInfo *) lfirst(temp))->relids;
 			if (same(temprelid, relid))
-				return ((Rel *) (lfirst(temp)));
+				return ((RelOptInfo *) (lfirst(temp)));
 		}
 	}
 	return (NULL);
diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c
index b151155bc1d78ac0ff78f0f6b03c317f310cef5e..488bc4b5e14ac0ec01f9ff63342caeb90d183a1e 100644
--- a/src/backend/optimizer/util/tlist.c
+++ b/src/backend/optimizer/util/tlist.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.13 1998/06/15 19:28:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.14 1998/07/18 04:22:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -93,7 +93,7 @@ matching_tlvar(Var *var, List *targetlist)
  * CREATES:  new var-node iff no matching var-node exists in targetlist
  */
 void
-add_tl_element(Rel *rel, Var *var)
+add_tl_element(RelOptInfo *rel, Var *var)
 {
 	Expr	   *oldvar = (Expr *) NULL;
 
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index d205f4236a3ad75b1786eeb28875ed325855e18a..1a172d83e08d153f752991a370e882151971a75a 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nodes.h,v 1.24 1998/02/13 03:45:23 vadim Exp $
+ * $Id: nodes.h,v 1.25 1998/07/18 04:22:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -70,7 +70,7 @@ typedef enum NodeTag
 	 * TAGS FOR INNER PLAN NODES (relation.h)
 	 *---------------------
 	 */
-	T_Rel = 200,
+	T_RelOptInfo = 200,
 	T_Path,
 	T_IndexPath,
 	T_JoinPath,
diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h
index 8c2fb363a9251e8ad6f00b8217611ed6888f5f00..baee1b1d079dd4a8ba757ea1a89436b05fd31a6b 100644
--- a/src/include/nodes/relation.h
+++ b/src/include/nodes/relation.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: relation.h,v 1.7 1997/09/08 21:53:01 momjian Exp $
+ * $Id: relation.h,v 1.8 1998/07/18 04:22:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,7 +24,7 @@
 typedef List *Relid;
 
 /*
- * Rel
+ * RelOptInfo
  *		Per-base-relation information
  *
  *		Parts of this data structure are specific to various scan and join
@@ -47,7 +47,7 @@ typedef List *Relid;
  *						leaves the tuples unordered)
  *		cheapestpath -	least expensive Path (regardless of final order)
  *		pruneable - flag to let the planner know whether it can prune the plan
- *					space of this Rel or not.  -- JMH, 11/11/92
+ *					space of this RelOptInfo or not.  -- JMH, 11/11/92
  *
  *	 * If the relation is a (secondary) index it will have the following
  *		three fields:
@@ -71,7 +71,7 @@ typedef List *Relid;
  *	   is always 0.								2/95 - ay
  */
 
-typedef struct Rel
+typedef struct RelOptInfo
 {
 	NodeTag		type;
 
@@ -106,7 +106,7 @@ typedef struct Rel
 	List	   *joininfo;		/* join clauses */
 	List	   *innerjoin;
 	List	   *superrels;
-} Rel;
+} RelOptInfo;
 
 extern Var *get_expr(TargetEntry *foo);
 
@@ -139,7 +139,7 @@ typedef struct Path
 {
 	NodeTag		type;
 
-	Rel		   *parent;
+	RelOptInfo		   *parent;
 	Cost		path_cost;
 
 	NodeTag		pathtype;
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index 05bc19fec85e58256df34046a32bffb4c6c0ee95..0c1a88b586ac29c100970bd3a721abb877d688f3 100644
--- a/src/include/optimizer/cost.h
+++ b/src/include/optimizer/cost.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: cost.h,v 1.8 1998/02/26 04:42:14 momjian Exp $
+ * $Id: cost.h,v 1.9 1998/07/18 04:22:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,8 +47,8 @@ extern Cost
 cost_hashjoin(Cost outercost, Cost innercost, List *outerkeys,
 			  List *innerkeys, int outersize, int innersize,
 			  int outerwidth, int innerwidth);
-extern int	compute_rel_size(Rel *rel);
-extern int	compute_rel_width(Rel *rel);
+extern int	compute_rel_size(RelOptInfo *rel);
+extern int	compute_rel_width(RelOptInfo *rel);
 extern int	compute_joinrel_size(JoinPath *joinpath);
 extern int	page_size(int tuples, int width);
 
diff --git a/src/include/optimizer/geqo.h b/src/include/optimizer/geqo.h
index a653b4d6325662b074f3e05961be6e0ff8224c09..2a1018ed2833246038cf33deb76a9e16fca52037 100644
--- a/src/include/optimizer/geqo.h
+++ b/src/include/optimizer/geqo.h
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo.h,v 1.7 1997/11/26 01:13:23 momjian Exp $
+ * $Id: geqo.h,v 1.8 1998/07/18 04:22:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -70,13 +70,13 @@ double		SelectionBias;
  /* ^^^						*/
 
 /* geqo prototypes */
-extern Rel *geqo(Query *root);
+extern RelOptInfo *geqo(Query *root);
 
 extern void geqo_params(int string_length);
 
 extern Cost geqo_eval(Query *root, Gene *tour, int num_gene);
 double		geqo_log(double x, double b);
-extern Rel *gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, Rel *outer_rel);
+extern RelOptInfo *gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *outer_rel);
 
 
 #endif							/* GEQO_H */
diff --git a/src/include/optimizer/geqo_misc.h b/src/include/optimizer/geqo_misc.h
index 2a7a801305bd76d932973b632f354f5df4b2912e..2dcc6351c5b3ae8204942a5fe29682baf5b3c6bd 100644
--- a/src/include/optimizer/geqo_misc.h
+++ b/src/include/optimizer/geqo_misc.h
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_misc.h,v 1.5 1997/11/26 01:13:28 momjian Exp $
+ * $Id: geqo_misc.h,v 1.6 1998/07/18 04:22:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,7 +31,7 @@ extern void print_pool(FILE *fp, Pool *pool, int start, int stop);
 extern void print_gen(FILE *fp, Pool *pool, int generation);
 extern void print_edge_table(FILE *fp, Edge *edge_table, int num_gene);
 
-extern void geqo_print_rel(Query *root, Rel *rel);
+extern void geqo_print_rel(Query *root, RelOptInfo *rel);
 extern void geqo_print_path(Query *root, Path *path, int indent);
 extern void geqo_print_joinclauses(Query *root, List *clauses);
 
diff --git a/src/include/optimizer/geqo_paths.h b/src/include/optimizer/geqo_paths.h
index 8be4032a227df3c1473bfb2b4e3276bed6eb5fc7..c222cb1fae1a9bd6aa367c52d6a206e5c36f6c27 100644
--- a/src/include/optimizer/geqo_paths.h
+++ b/src/include/optimizer/geqo_paths.h
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_paths.h,v 1.4 1997/09/08 21:53:14 momjian Exp $
+ * $Id: geqo_paths.h,v 1.5 1998/07/18 04:22:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,6 +23,6 @@
 
 
 extern List *geqo_prune_rels(List *rel_list);
-extern void geqo_rel_paths(Rel *rel);
+extern void geqo_rel_paths(RelOptInfo *rel);
 
 #endif							/* GEQO_PATHS_H */
diff --git a/src/include/optimizer/joininfo.h b/src/include/optimizer/joininfo.h
index 9fdbe231234e6552a8c58e8cac9a1c407e404811..57fe535df0cb46e01d824ace0d638c9f67eb0cc1 100644
--- a/src/include/optimizer/joininfo.h
+++ b/src/include/optimizer/joininfo.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: joininfo.h,v 1.5 1997/11/26 01:13:39 momjian Exp $
+ * $Id: joininfo.h,v 1.6 1998/07/18 04:22:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,7 +18,7 @@
 #include "nodes/primnodes.h"
 
 extern JInfo *joininfo_member(List *join_relids, List *joininfo_list);
-extern JInfo *find_joininfo_node(Rel *this_rel, List *join_relids);
+extern JInfo *find_joininfo_node(RelOptInfo *this_rel, List *join_relids);
 extern Var *other_join_clause_var(Var *var, Expr *clause);
 
 #endif							/* JOININFO_H */
diff --git a/src/include/optimizer/keys.h b/src/include/optimizer/keys.h
index ea02f5f13075e89e41d863f00f47995180333519..3ae613629d0553c4fb9b85fb652c8c491a8febb2 100644
--- a/src/include/optimizer/keys.h
+++ b/src/include/optimizer/keys.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: keys.h,v 1.6 1997/11/26 01:13:41 momjian Exp $
+ * $Id: keys.h,v 1.7 1998/07/18 04:22:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -16,7 +16,7 @@
 #include "nodes/nodes.h"
 #include "nodes/relation.h"
 
-extern bool match_indexkey_operand(int indexkey, Var *operand, Rel *rel);
+extern bool match_indexkey_operand(int indexkey, Var *operand, RelOptInfo *rel);
 extern Var *extract_subkey(JoinKey *jk, int which_subkey);
 extern bool samekeys(List *keys1, List *keys2);
 extern List *collect_index_pathkeys(int *index_keys, List *tlist);
diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h
index b71512cad7ffd905fc1c3d6c07f8b73068068aff..d8369f7e74631bf5a295ba724dcec92cd091736a 100644
--- a/src/include/optimizer/pathnode.h
+++ b/src/include/optimizer/pathnode.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pathnode.h,v 1.7 1998/02/26 04:42:16 momjian Exp $
+ * $Id: pathnode.h,v 1.8 1998/07/18 04:22:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,25 +21,25 @@
  * prototypes for pathnode.c
  */
 extern bool path_is_cheaper(Path *path1, Path *path2);
-extern Path *set_cheapest(Rel *parent_rel, List *pathlist);
+extern Path *set_cheapest(RelOptInfo *parent_rel, List *pathlist);
 extern List *
-add_pathlist(Rel *parent_rel, List *unique_paths,
+add_pathlist(RelOptInfo *parent_rel, List *unique_paths,
 			 List *new_paths);
-extern Path *create_seqscan_path(Rel *rel);
+extern Path *create_seqscan_path(RelOptInfo *rel);
 extern IndexPath *
-create_index_path(Query *root, Rel *rel, Rel *index,
+create_index_path(Query *root, RelOptInfo *rel, RelOptInfo *index,
 				  List *restriction_clauses, bool is_join_scan);
 extern JoinPath *
-create_nestloop_path(Rel *joinrel, Rel *outer_rel,
+create_nestloop_path(RelOptInfo *joinrel, RelOptInfo *outer_rel,
 					 Path *outer_path, Path *inner_path, List *keys);
 extern MergePath *
-create_mergesort_path(Rel *joinrel, int outersize,
+create_mergesort_path(RelOptInfo *joinrel, int outersize,
 		 int innersize, int outerwidth, int innerwidth, Path *outer_path,
 					  Path *inner_path, List *keys, MergeOrder *order,
 		   List *mergeclauses, List *outersortkeys, List *innersortkeys);
 
 extern HashPath *
-create_hashjoin_path(Rel *joinrel, int outersize,
+create_hashjoin_path(RelOptInfo *joinrel, int outersize,
 		 int innersize, int outerwidth, int innerwidth, Path *outer_path,
 		   Path *inner_path, List *keys, Oid operator, List *hashclauses,
 					 List *outerkeys, List *innerkeys);
@@ -47,13 +47,13 @@ create_hashjoin_path(Rel *joinrel, int outersize,
 /*
  * prototypes for rel.c
  */
-extern Rel *rel_member(List *relid, List *rels);
-extern Rel *get_base_rel(Query *root, int relid);
-extern Rel *get_join_rel(Query *root, List *relid);
+extern RelOptInfo *rel_member(List *relid, List *rels);
+extern RelOptInfo *get_base_rel(Query *root, int relid);
+extern RelOptInfo *get_join_rel(Query *root, List *relid);
 
 /*
  * prototypes for indexnode.h
  */
-extern List *find_relation_indices(Query *root, Rel *rel);
+extern List *find_relation_indices(Query *root, RelOptInfo *rel);
 
 #endif							/* PATHNODE_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index 741204dfe87af812581a9cb7d151d3ddacf15d9c..1a2e3db83f721e3f58cf3bf2c14803b8900f3b85 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: paths.h,v 1.8 1998/02/26 04:42:17 momjian Exp $
+ * $Id: paths.h,v 1.9 1998/07/18 04:22:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -28,7 +28,7 @@ extern List *find_paths(Query *root, List *rels);
  *	  routines to generate index paths
  */
 extern List *
-find_index_paths(Query *root, Rel *rel, List *indices,
+find_index_paths(Query *root, RelOptInfo *rel, List *indices,
 				 List *clauseinfo_list,
 				 List *joininfo_list);
 
@@ -42,7 +42,7 @@ extern void find_all_join_paths(Query *root, List *joinrels);
 /*
  * orindxpath.h
  */
-extern List *create_or_index_paths(Query *root, Rel *rel, List *clauses);
+extern List *create_or_index_paths(Query *root, RelOptInfo *rel, List *clauses);
 
 /*
  * hashutils.h
@@ -94,7 +94,7 @@ extern List *final_join_rels(List *join_rel_list);
  */
 extern void prune_joinrels(List *rel_list);
 extern void prune_rel_paths(List *rel_list);
-extern Path *prune_rel_path(Rel *rel, Path *unorderedpath);
+extern Path *prune_rel_path(RelOptInfo *rel, Path *unorderedpath);
 extern List *merge_joinrels(List *rel_list1, List *rel_list2);
 extern List *prune_oldrels(List *old_rels);
 
diff --git a/src/include/optimizer/tlist.h b/src/include/optimizer/tlist.h
index 76dd57439e1f2fe7462f2f5cbfcc854166479839..b6b1d2eb7ebcb37a6663fea5a00db0a478aac75a 100644
--- a/src/include/optimizer/tlist.h
+++ b/src/include/optimizer/tlist.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tlist.h,v 1.8 1998/02/26 04:42:31 momjian Exp $
+ * $Id: tlist.h,v 1.9 1998/07/18 04:22:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,7 +20,7 @@
 extern int	exec_tlist_length(List *targelist);
 extern TargetEntry *tlistentry_member(Var *var, List *targetlist);
 extern Expr *matching_tlvar(Var *var, List *targetlist);
-extern void add_tl_element(Rel *rel, Var *var);
+extern void add_tl_element(RelOptInfo *rel, Var *var);
 extern TargetEntry *create_tl_element(Var *var, int resdomno);
 extern List *get_actual_tlist(List *tlist);
 extern Resdom *tlist_member(Var *var, List *tlist);
diff --git a/src/include/optimizer/xfunc.h b/src/include/optimizer/xfunc.h
index c3888cdc3bc53a8a05d54b4f1c1c5468341d4855..cbc998c7a96927e8cfcc5032c9a988c2ebe0e78e 100644
--- a/src/include/optimizer/xfunc.h
+++ b/src/include/optimizer/xfunc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xfunc.h,v 1.7 1998/02/26 04:42:33 momjian Exp $
+ * $Id: xfunc.h,v 1.8 1998/07/18 04:22:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -49,7 +49,7 @@ extern int	XfuncMode;			/* defined in tcop/postgres.c */
 #define is_join(pathnode) (length(get_relids(get_parent(pathnode))) > 1 ? 1 : 0)
 
 /* function prototypes from planner/path/xfunc.c */
-extern void xfunc_trypullup(Rel *rel);
+extern void xfunc_trypullup(RelOptInfo *rel);
 extern int
 xfunc_shouldpull(Path *childpath, JoinPath *parentpath,
 				 int whichchild, CInfo *maxcinfopt);
@@ -71,7 +71,7 @@ extern List *xfunc_primary_join(JoinPath *pathnode);
 extern Cost xfunc_get_path_cost(Path *pathnode);
 extern Cost xfunc_total_path_cost(JoinPath *pathnode);
 extern Cost xfunc_expense_per_tuple(JoinPath *joinnode, int whichchild);
-extern void xfunc_fixvars(Expr *clause, Rel *rel, int varno);
+extern void xfunc_fixvars(Expr *clause, RelOptInfo *rel, int varno);
 extern int	xfunc_cinfo_compare(void *arg1, void *arg2);
 extern int	xfunc_clause_compare(void *arg1, void *arg2);
 extern void xfunc_disjunct_sort(List *clause_list);
@@ -80,7 +80,7 @@ extern int	xfunc_func_width(RegProcedure funcid, List *args);
 extern int	xfunc_tuple_width(Relation rd);
 extern int	xfunc_num_join_clauses(JoinPath *path);
 extern List *xfunc_LispRemove(List *foo, List *bar);
-extern bool xfunc_copyrel(Rel *from, Rel **to);
+extern bool xfunc_copyrel(RelOptInfo *from, RelOptInfo **to);
 
 /*
  * function prototypes for path/predmig.c