diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c
index 4b75ff8bcd9e475a84210eeb6c2e4c6cafec4d35..ed36836f77666d210b769abe1a641d906dfffb33 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.31 1999/02/02 03:44:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.32 1999/02/03 20:15:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +20,7 @@
 #include <access/heapam.h>
 #include <utils/builtins.h>
 #include <utils/syscache.h>
+#include <catalog/heap.h>
 #include <catalog/index.h>
 #include <catalog/pg_index.h>
 #include <catalog/pg_proc.h>
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 24266633f2f0b53387d2cbca153c1919efbad490..886ebfe5e1f08b8ddfb534e54648ce03e8eb3911 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -1,4 +1,4 @@
- /*-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
  *
  * copyfuncs.c--
  *	  Copy functions for Postgres tree nodes.
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.57 1999/02/02 03:44:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.58 1999/02/03 20:15:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1064,7 +1064,7 @@ _copyRelOptInfo(RelOptInfo * from)
 		newnode->ordering[len] = 0;
 	}
 
-	Node_Copy(from, newnode, clauseinfo);
+	Node_Copy(from, newnode, restrictinfo);
 	Node_Copy(from, newnode, joininfo);
 	Node_Copy(from, newnode, innerjoin);
 	Node_Copy(from, newnode, superrels);
@@ -1119,7 +1119,7 @@ CopyPathFields(Path *from, Path *newnode)
 	newnode->outerjoincost = from->outerjoincost;
 
 	newnode->joinid = listCopy(from->joinid);
-	Node_Copy(from, newnode, locclauseinfo);
+	Node_Copy(from, newnode, loc_restrictinfo);
 }
 
 /* ----------------
@@ -1184,7 +1184,7 @@ _copyIndexPath(IndexPath *from)
 static void
 CopyJoinPathFields(JoinPath *from, JoinPath *newnode)
 {
-	Node_Copy(from, newnode, pathclauseinfo);
+	Node_Copy(from, newnode, pathinfo);
 	Node_Copy(from, newnode, outerjoinpath);
 	Node_Copy(from, newnode, innerjoinpath);
 }
@@ -1324,13 +1324,13 @@ _copyMergeOrder(MergeOrder *from)
 }
 
 /* ----------------
- *		_copyClauseInfo
+ *		_copyRestrictInfo
  * ----------------
  */
-static ClauseInfo *
-_copyClauseInfo(ClauseInfo * from)
+static RestrictInfo *
+_copyRestrictInfo(RestrictInfo * from)
 {
-	ClauseInfo *newnode = makeNode(ClauseInfo);
+	RestrictInfo *newnode = makeNode(RestrictInfo);
 
 	/* ----------------
 	 *	copy remainder of node
@@ -1430,7 +1430,7 @@ _copyJoinInfo(JoinInfo * from)
 	 * ----------------
 	 */
 	newnode->otherrels = listCopy(from->otherrels);
-	Node_Copy(from, newnode, jinfoclauseinfo);
+	Node_Copy(from, newnode, jinfo_restrictinfo);
 
 	newnode->mergejoinable = from->mergejoinable;
 	newnode->hashjoinable = from->hashjoinable;
@@ -1792,8 +1792,8 @@ copyObject(void *from)
 		case T_MergeOrder:
 			retval = _copyMergeOrder(from);
 			break;
-		case T_ClauseInfo:
-			retval = _copyClauseInfo(from);
+		case T_RestrictInfo:
+			retval = _copyRestrictInfo(from);
 			break;
 		case T_JoinMethod:
 			retval = _copyJoinMethod(from);
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 763a9d48354a846e8eeaf594644046bd4583f268..b8727f7f331cf6cc618da08d436d7135a89e0321 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.21 1999/02/02 23:53:25 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.22 1999/02/03 20:15:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -278,13 +278,13 @@ _equalFunc(Func *a, Func *b)
 }
 
 /*
- * ClauseInfo is a subclass of Node.
+ * RestrictInfo is a subclass of Node.
  */
 static bool
-_equalClauseInfo(ClauseInfo * a, ClauseInfo * b)
+_equalRestrictInfo(RestrictInfo * a, RestrictInfo * b)
 {
-	Assert(IsA(a, ClauseInfo));
-	Assert(IsA(b, ClauseInfo));
+	Assert(IsA(a, RestrictInfo));
+	Assert(IsA(b, RestrictInfo));
 
 	if (!equal(a->clause, b->clause))
 		return false;
@@ -298,8 +298,7 @@ _equalClauseInfo(ClauseInfo * a, ClauseInfo * b)
 #endif
 	if (a->hashjoinoperator != b->hashjoinoperator)
 		return false;
-	return (equal((a->indexids),
-				  (b->indexids)));
+	return equal(a->indexids, b->indexids);
 }
 
 /*
@@ -311,8 +310,7 @@ _equalRelOptInfo(RelOptInfo * a, RelOptInfo * b)
 	Assert(IsA(a, RelOptInfo));
 	Assert(IsA(b, RelOptInfo));
 
-	return (equal((a->relids),
-				  (b->relids)));
+	return equal(a->relids, b->relids);
 }
 
 static bool
@@ -321,11 +319,9 @@ _equalJoinMethod(JoinMethod *a, JoinMethod *b)
 	Assert(IsA(a, JoinMethod));
 	Assert(IsA(b, JoinMethod));
 
-	if (!equal((a->jmkeys),
-			   (b->jmkeys)))
+	if (!equal(a->jmkeys, b->jmkeys))
 		return false;
-	if (!equal((a->clauses),
-			   (b->clauses)))
+	if (!equal(a->clauses, b->clauses))
 		return false;
 	return true;
 }
@@ -368,19 +364,16 @@ _equalPath(Path *a, Path *b)
 	}
 	else
 	{
-		if (!equal((a->p_ordering.ord.merge),
-				   (b->p_ordering.ord.merge)))
+		if (!equal(a->p_ordering.ord.merge, b->p_ordering.ord.merge))
 			return false;
 	}
-	if (!equal((a->keys),
-			   (b->keys)))
+	if (!equal(a->keys, b->keys))
 		return false;
 
 	/*
 	 * if (a->outerjoincost != b->outerjoincost) return(false);
 	 */
-	if (!equali((a->joinid),
-				(b->joinid)))
+	if (!equali(a->joinid, b->joinid))
 		return false;
 	return true;
 }
@@ -390,9 +383,9 @@ _equalIndexPath(IndexPath *a, IndexPath *b)
 {
 	if (!_equalPath((Path *) a, (Path *) b))
 		return false;
-	if (!equali((a->indexid), (b->indexid)))
+	if (!equali(a->indexid, b->indexid))
 		return false;
-	if (!equal((a->indexqual), (b->indexqual)))
+	if (!equal(a->indexqual, b->indexqual))
 		return false;
 	return true;
 }
@@ -405,11 +398,11 @@ _equalJoinPath(JoinPath *a, JoinPath *b)
 
 	if (!_equalPath((Path *) a, (Path *) b))
 		return false;
-	if (!equal((a->pathclauseinfo), (b->pathclauseinfo)))
+	if (!equal(a->pathinfo, b->pathinfo))
 		return false;
-	if (!equal((a->outerjoinpath), (b->outerjoinpath)))
+	if (!equal(a->outerjoinpath, b->outerjoinpath))
 		return false;
-	if (!equal((a->innerjoinpath), (b->innerjoinpath)))
+	if (!equal(a->innerjoinpath, b->innerjoinpath))
 		return false;
 	return true;
 }
@@ -454,9 +447,9 @@ _equalJoinKey(JoinKey *a, JoinKey *b)
 	Assert(IsA(a, JoinKey));
 	Assert(IsA(b, JoinKey));
 
-	if (!equal((a->outer), (b->outer)))
+	if (!equal(a->outer, b->outer))
 		return false;
-	if (!equal((a->inner), (b->inner)))
+	if (!equal(a->inner, b->inner))
 		return false;
 	return true;
 }
@@ -506,13 +499,13 @@ _equalIndexScan(IndexScan *a, IndexScan *b)
 	 * if(a->scan.plan.cost != b->scan.plan.cost) return(false);
 	 */
 
-	if (!equal((a->indxqual), (b->indxqual)))
+	if (!equal(a->indxqual, b->indxqual))
 		return false;
 
 	if (a->scan.scanrelid != b->scan.scanrelid)
 		return false;
 
-	if (!equali((a->indxid), (b->indxid)))
+	if (!equali(a->indxid, b->indxid))
 		return false;
 	return true;
 }
@@ -523,7 +516,7 @@ _equalSubPlan(SubPlan *a, SubPlan *b)
 	if (a->plan_id != b->plan_id)
 		return false;
 
-	if (!equal((a->sublink->oper), (b->sublink->oper)))
+	if (!equal(a->sublink->oper, b->sublink->oper))
 		return false;
 
 	return true;
@@ -534,9 +527,9 @@ _equalJoinInfo(JoinInfo * a, JoinInfo * b)
 {
 	Assert(IsA(a, JoinInfo));
 	Assert(IsA(b, JoinInfo));
-	if (!equal((a->otherrels), (b->otherrels)))
+	if (!equal(a->otherrels, b->otherrels))
 		return false;
-	if (!equal((a->jinfoclauseinfo), (b->jinfoclauseinfo)))
+	if (!equal(a->jinfo_restrictinfo, b->jinfo_restrictinfo))
 		return false;
 	if (a->mergejoinable != b->mergejoinable)
 		return false;
@@ -673,8 +666,8 @@ equal(void *a, void *b)
 		case T_Func:
 			retval = _equalFunc(a, b);
 			break;
-		case T_ClauseInfo:
-			retval = _equalClauseInfo(a, b);
+		case T_RestrictInfo:
+			retval = _equalRestrictInfo(a, b);
 			break;
 		case T_RelOptInfo:
 			retval = _equalRelOptInfo(a, b);
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 71b188d8b514f895e9fa133917af0ff88b03fe11..7c370053c14e6e4e158fea148b0d88797d0a0a60 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- *  $Id: outfuncs.c,v 1.62 1999/02/02 03:44:26 momjian Exp $
+ *  $Id: outfuncs.c,v 1.63 1999/02/03 20:15:22 momjian Exp $
  *
  * NOTES
  *	  Every (plan) node in POSTGRES has an associated "out" routine which
@@ -879,11 +879,11 @@ _outRelOptInfo(StringInfo str, RelOptInfo * node)
 	 */
 
 	appendStringInfo(str, 
-			" :unorderedpath @ 0x%x :cheapestpath @ 0x%x :pruneable %s :clauseinfo ",
+			" :unorderedpath @ 0x%x :cheapestpath @ 0x%x :pruneable %s :restrictinfo ",
 			(int) node->unorderedpath,
 			(int) node->cheapestpath,
 			node->pruneable ? "true" : "false");
-	_outNode(str, node->clauseinfo);
+	_outNode(str, node->restrictinfo);
 
 	appendStringInfo(str, " :joininfo ");
 	_outNode(str, node->joininfo);
@@ -967,8 +967,8 @@ _outJoinPath(StringInfo str, JoinPath *node)
 			node->path.path_cost);
 	_outNode(str, node->path.keys);
 
-	appendStringInfo(str, " :pathclauseinfo ");
-	_outNode(str, node->pathclauseinfo);
+	appendStringInfo(str, " :pathinfo ");
+	_outNode(str, node->pathinfo);
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -995,8 +995,8 @@ _outMergePath(StringInfo str, MergePath *node)
 			node->jpath.path.path_cost);
 	_outNode(str, node->jpath.path.keys);
 
-	appendStringInfo(str, " :pathclauseinfo ");
-	_outNode(str, node->jpath.pathclauseinfo);
+	appendStringInfo(str, " :pathinfo ");
+	_outNode(str, node->jpath.pathinfo);
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -1032,8 +1032,8 @@ _outHashPath(StringInfo str, HashPath *node)
 			node->jpath.path.path_cost);
 	_outNode(str, node->jpath.path.keys);
 
-	appendStringInfo(str, " :pathclauseinfo ");
-	_outNode(str, node->jpath.pathclauseinfo);
+	appendStringInfo(str, " :pathinfo ");
+	_outNode(str, node->jpath.pathinfo);
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -1102,10 +1102,10 @@ _outMergeOrder(StringInfo str, MergeOrder *node)
 }
 
 /*
- *	ClauseInfo is a subclass of Node.
+ *	RestrictInfo is a subclass of Node.
  */
 static void
-_outClauseInfo(StringInfo str, ClauseInfo * node)
+_outRestrictInfo(StringInfo str, RestrictInfo * node)
 {
 	appendStringInfo(str, " CINFO :clause ");
 	_outNode(str, node->clause);
@@ -1158,8 +1158,8 @@ _outJoinInfo(StringInfo str, JoinInfo * node)
 	appendStringInfo(str, " JINFO :otherrels ");
 	_outIntList(str, node->otherrels);
 
-	appendStringInfo(str, " :jinfoclauseinfo ");
-	_outNode(str, node->jinfoclauseinfo);
+	appendStringInfo(str, " :jinfo_restrictinfo ");
+	_outNode(str, node->jinfo_restrictinfo);
 
 	appendStringInfo(str, " :mergejoinable %s :hashjoinable %s ",
 			node->mergejoinable ? "true" : "false",
@@ -1572,8 +1572,8 @@ _outNode(StringInfo str, void *obj)
 			case T_MergeOrder:
 				_outMergeOrder(str, obj);
 				break;
-			case T_ClauseInfo:
-				_outClauseInfo(str, obj);
+			case T_RestrictInfo:
+				_outRestrictInfo(str, obj);
 				break;
 			case T_JoinMethod:
 				_outJoinMethod(str, obj);
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 65d2405b5fd8de978c9519a3ec302a8cc174665c..07f85a2303c0b000165d90a5731de6b9ece2d91a 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.44 1999/02/02 03:44:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.45 1999/02/03 20:15:22 momjian Exp $
  *
  * NOTES
  *	  Most of the read functions for plan nodes are tested. (In fact, they
@@ -1348,8 +1348,8 @@ _readRelOptInfo()
 	sscanf(token, "%x", (unsigned int *) &local_node->cheapestpath);
 
 
-	token = lsptok(NULL, &length);		/* get :clauseinfo */
-	local_node->clauseinfo = nodeRead(true);	/* now read it */
+	token = lsptok(NULL, &length);		/* get :restrictinfo */
+	local_node->restrictinfo = nodeRead(true);	/* now read it */
 
 	token = lsptok(NULL, &length);		/* get :joininfo */
 	local_node->joininfo = nodeRead(true);		/* now read it */
@@ -1560,8 +1560,8 @@ _readJoinPath()
 	token = lsptok(NULL, &length);		/* get :keys */
 	local_node->path.keys = nodeRead(true);		/* now read it */
 
-	token = lsptok(NULL, &length);		/* get :pathclauseinfo */
-	local_node->pathclauseinfo = nodeRead(true);		/* now read it */
+	token = lsptok(NULL, &length);		/* get :pathinfo */
+	local_node->pathinfo = nodeRead(true);		/* now read it */
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -1628,8 +1628,8 @@ _readMergePath()
 	token = lsptok(NULL, &length);		/* get :keys */
 	local_node->jpath.path.keys = nodeRead(true);		/* now read it */
 
-	token = lsptok(NULL, &length);		/* get :pathclauseinfo */
-	local_node->jpath.pathclauseinfo = nodeRead(true);	/* now read it */
+	token = lsptok(NULL, &length);		/* get :pathinfo */
+	local_node->jpath.pathinfo = nodeRead(true);	/* now read it */
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -1705,8 +1705,8 @@ _readHashPath()
 	token = lsptok(NULL, &length);		/* get :keys */
 	local_node->jpath.path.keys = nodeRead(true);		/* now read it */
 
-	token = lsptok(NULL, &length);		/* get :pathclauseinfo */
-	local_node->jpath.pathclauseinfo = nodeRead(true);	/* now read it */
+	token = lsptok(NULL, &length);		/* get :pathinfo */
+	local_node->jpath.pathinfo = nodeRead(true);	/* now read it */
 
 	/*
 	 * Not sure if these are nodes; they're declared as "struct path *".
@@ -1844,19 +1844,19 @@ _readMergeOrder()
 }
 
 /* ----------------
- *		_readClauseInfo
+ *		_readRestrictInfo
  *
- *	ClauseInfo is a subclass of Node.
+ *	RestrictInfo is a subclass of Node.
  * ----------------
  */
-static ClauseInfo *
-_readClauseInfo()
+static RestrictInfo *
+_readRestrictInfo()
 {
-	ClauseInfo *local_node;
+	RestrictInfo *local_node;
 	char	   *token;
 	int			length;
 
-	local_node = makeNode(ClauseInfo);
+	local_node = makeNode(RestrictInfo);
 
 	token = lsptok(NULL, &length);		/* get :clause */
 	local_node->clause = nodeRead(true);		/* now read it */
@@ -1960,8 +1960,8 @@ _readJoinInfo()
 	local_node->otherrels =
 		toIntList(nodeRead(true));		/* now read it */
 
-	token = lsptok(NULL, &length);		/* get :jinfoclauseinfo */
-	local_node->jinfoclauseinfo = nodeRead(true);		/* now read it */
+	token = lsptok(NULL, &length);		/* get :jinfo_restrictinfo */
+	local_node->jinfo_restrictinfo = nodeRead(true);		/* now read it */
 
 	token = lsptok(NULL, &length);		/* get :mergejoinable */
 
@@ -2096,7 +2096,7 @@ parsePlanString(void)
 	else if (!strncmp(token, "MERGEORDER", length))
 		return_value = _readMergeOrder();
 	else if (!strncmp(token, "CLAUSEINFO", length))
-		return_value = _readClauseInfo();
+		return_value = _readRestrictInfo();
 	else if (!strncmp(token, "JOINMETHOD", length))
 		return_value = _readJoinMethod();
 	else if (!strncmp(token, "JOININFO", length))
diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README
index 8e9684c6d9b1bc6bc91535beb1b0478319ff7488..0bce226a798af1c4d25975d6867617cbb8f208fe 100644
--- a/src/backend/optimizer/README
+++ b/src/backend/optimizer/README
@@ -1,4 +1,4 @@
-Thse directories take the Query structure returned by the parser, and
+These directories take the Query structure returned by the parser, and
 generate a plan used by the executor.  The /plan directory generates the
 plan, the /path generates all possible ways to join the tables, and
 /prep handles special cases like inheritance.  /utils is utility stuff.
@@ -81,10 +81,20 @@ planner()
         remove from the join list the relation we just added to each join
        prune_rel_paths()
         set cheapest and perhaps remove unordered path, recompute table sizes
-       if we have not done all the tables, go to "again"
+       if we have not done all the tables, go to again:
    do group(GROUP)
    do aggregate
    put back constants
    re-flatten target list
  make unique(DISTINCT)
  make sort(ORDER BY)
+
+
+
+Optimizer Structures
+--------------------
+Path		- info about every way to access a relation(sequential, index)
+  PathOrder - info about every ordering (sort, merge of relations)
+RelOptInfo	- info about every relation 
+  JoinInfo	- info about join combinations
+RestrictInfo	- info about restrictions
diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c
index 4d2df3373c6b9014038a4f5eb1f1cb7fed983928..ba6aba90c4c36c5cee08be3899d29f850ad784f2 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.24 1998/09/01 04:29:16 momjian Exp $
+ * $Id: geqo_eval.c,v 1.25 1999/02/03 20:15:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -290,7 +290,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
 	joinrel->classlist = NULL;
 	joinrel->relam = InvalidOid;
 	joinrel->ordering = NULL;
-	joinrel->clauseinfo = NIL;
+	joinrel->restrictinfo = NIL;
 	joinrel->joininfo = NULL;
 	joinrel->innerjoin = NIL;
 	joinrel->superrels = NIL;
@@ -302,7 +302,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
 
 	if (joininfo)
 	{
-		joinrel->clauseinfo = joininfo->jinfoclauseinfo;
+		joinrel->restrictinfo = joininfo->jinfo_restrictinfo;
 		if (BushyPlanFlag)
 			joininfo->inactive = true;
 	}
@@ -410,22 +410,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids)
 											 current_joininfo_list);
 			if (other_joininfo)
 			{
-				other_joininfo->jinfoclauseinfo =
-					(List *) LispUnion(joininfo->jinfoclauseinfo,
-									   other_joininfo->jinfoclauseinfo);
+				other_joininfo->jinfo_restrictinfo =
+					(List *) LispUnion(joininfo->jinfo_restrictinfo,
+									   other_joininfo->jinfo_restrictinfo);
 			}
 			else
 			{
 				other_joininfo = makeNode(JoinInfo);
 
-				other_joininfo->otherrels =
-					joininfo->otherrels;
-				other_joininfo->jinfoclauseinfo =
-					joininfo->jinfoclauseinfo;
-				other_joininfo->mergejoinable =
-					joininfo->mergejoinable;
-				other_joininfo->hashjoinable =
-					joininfo->hashjoinable;
+				other_joininfo->otherrels = joininfo->otherrels;
+				other_joininfo->jinfo_restrictinfo = joininfo->jinfo_restrictinfo;
+				other_joininfo->mergejoinable = joininfo->mergejoinable;
+				other_joininfo->hashjoinable = joininfo->hashjoinable;
 				other_joininfo->inactive = false;
 
 				current_joininfo_list = lcons(other_joininfo,
@@ -508,7 +504,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 		{
 			JoinInfo   *joininfo = (JoinInfo *) lfirst(xjoininfo);
 			List	   *other_rels = joininfo->otherrels;
-			List	   *clause_info = joininfo->jinfoclauseinfo;
+			List	   *restrict_info = joininfo->jinfo_restrictinfo;
 			bool		mergejoinable = joininfo->mergejoinable;
 			bool		hashjoinable = joininfo->hashjoinable;
 
@@ -540,7 +536,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 				new_joininfo = makeNode(JoinInfo);
 
 				new_joininfo->otherrels = joinrel->relids;
-				new_joininfo->jinfoclauseinfo = clause_info;
+				new_joininfo->jinfo_restrictinfo = restrict_info;
 				new_joininfo->mergejoinable = mergejoinable;
 				new_joininfo->hashjoinable = hashjoinable;
 				new_joininfo->inactive = false;
@@ -560,16 +556,16 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 						if (other_joininfo)
 						{
-							other_joininfo->jinfoclauseinfo =
-								(List *) LispUnion(clause_info,
-										other_joininfo->jinfoclauseinfo);
+							other_joininfo->jinfo_restrictinfo =
+								(List *) LispUnion(restrict_info,
+										other_joininfo->jinfo_restrictinfo);
 						}
 						else
 						{
 							JoinInfo   *new_joininfo = makeNode(JoinInfo);
 
 							new_joininfo->otherrels = new_relids;
-							new_joininfo->jinfoclauseinfo = clause_info;
+							new_joininfo->jinfo_restrictinfo = restrict_info;
 							new_joininfo->mergejoinable = mergejoinable;
 							new_joininfo->hashjoinable = hashjoinable;
 							new_joininfo->inactive = false;
@@ -695,8 +691,8 @@ geqo_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inn
 
 	temp = (Cost) inner_rel->tuples * (Cost) outer_rel->tuples; /* cartesian product */
 
-	if (joinrel->clauseinfo)
-		temp = temp * product_selec(joinrel->clauseinfo);
+	if (joinrel->restrictinfo)
+		temp = temp * product_selec(joinrel->restrictinfo);
 
 	if (temp >= (MAXINT - 1))
 		ntuples = ceil(geqo_log((double) temp, (double) GEQO_LOG_BASE));
diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c
index e79b2138ea84665ef2dccdd9399b6270e0479e23..6a68fe1ddb224dba1d74f8da3c54b0e6b0066734 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.11 1998/09/01 04:29:19 momjian Exp $
+ * $Id: geqo_misc.c,v 1.12 1999/02/03 20:15:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,7 +146,7 @@ geqo_print_joinclauses(Query *root, List *clauses)
 
 	foreach(l, clauses)
 	{
-		ClauseInfo *c = lfirst(l);
+		RestrictInfo *c = lfirst(l);
 
 		print_expr((Node *) c->clause, root->rtable);
 		if (lnext(l))
@@ -204,7 +204,7 @@ geqo_print_path(Query *root, Path *path, int indent)
 					printf("\t");
 				printf("   clauses=(");
 				geqo_print_joinclauses(root,
-									((JoinPath *) path)->pathclauseinfo);
+									((JoinPath *) path)->pathinfo);
 				printf(")\n");
 
 				if (nodeTag(path) == T_MergePath)
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 4e5ab10094df53a485ab0b44982a7c0885c5eceb..ee8b6be27d787bfa85e4a8b8bc6e9b3406449f4f 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.24 1999/02/02 20:30:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.25 1999/02/03 20:15:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -122,10 +122,10 @@ find_rel_paths(Query *root, List *rels)
 		rel_index_scan_list = find_index_paths(root,
 											   rel,
 											   find_relation_indices(root, rel),
-											   rel->clauseinfo,
+											   rel->restrictinfo,
 											   rel->joininfo);
 
-		or_index_scan_list = create_or_index_paths(root, rel, rel->clauseinfo);
+		or_index_scan_list = create_or_index_paths(root, rel, rel->restrictinfo);
 
 		rel->pathlist = add_pathlist(rel,
 									 sequential_scan_list,
@@ -145,7 +145,7 @@ find_rel_paths(Query *root, List *rels)
 		 * if there is a qualification of sequential scan the selec. value
 		 * is not set -- so set it explicitly -- Sunita
 		 */
-		set_rest_selec(root, rel->clauseinfo);
+		set_rest_selec(root, rel->restrictinfo);
 		rel->size = compute_rel_size(rel);
 		rel->width = compute_rel_width(rel);
 	}
@@ -290,7 +290,7 @@ print_joinclauses(Query *root, List *clauses)
 
 	foreach(l, clauses)
 	{
-		ClauseInfo *c = lfirst(l);
+		RestrictInfo *c = lfirst(l);
 
 		print_expr((Node *) c->clause, root->rtable);
 		if (lnext(l))
@@ -347,8 +347,7 @@ print_path(Query *root, Path *path, int indent)
 				for (i = 0; i < indent + 1; i++)
 					printf("\t");
 				printf("   clauses=(");
-				print_joinclauses(root,
-								  ((JoinPath *) path)->pathclauseinfo);
+				print_joinclauses(root, ((JoinPath *) path)->pathinfo);
 				printf(")\n");
 
 				if (nodeTag(path) == T_MergePath)
diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c
index 0bdca62893f63568f396d90921707a6549b9fce4..3a10b05bb368bc9bc0464b83f8fb0fc9148265f9 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.14 1998/11/09 02:49:13 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.15 1999/02/03 20:15:28 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -19,7 +19,7 @@
 #include "nodes/primnodes.h"
 #include "nodes/relation.h"
 #include "optimizer/clauses.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/cost.h"
 #include "optimizer/internal.h"
 #include "optimizer/plancat.h"
@@ -35,7 +35,7 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities);
 
 /*
  * set_clause_selectivities -
- *	  Sets the selectivity field for each of clause in 'clauseinfo-list'
+ *	  Sets the selectivity field for each of clause in 'restrictinfo-list'
  *	  to 'new-selectivity'.  If the selectivity has already been set, reset
  *	  it only if the new one is better.
  *
@@ -43,15 +43,15 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities);
  *
  */
 void
-set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity)
+set_clause_selectivities(List *restrictinfo_list, Cost new_selectivity)
 {
 	List	   *temp;
-	ClauseInfo *clausenode;
+	RestrictInfo *clausenode;
 	Cost		cost_clause;
 
-	foreach(temp, clauseinfo_list)
+	foreach(temp, restrictinfo_list)
 	{
-		clausenode = (ClauseInfo *) lfirst(temp);
+		clausenode = (RestrictInfo *) lfirst(temp);
 		cost_clause = clausenode->selectivity;
 		if (FLOAT_IS_ZERO(cost_clause) || new_selectivity < cost_clause)
 			clausenode->selectivity = new_selectivity;
@@ -60,23 +60,23 @@ set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity)
 
 /*
  * product_selec -
- *	  Multiplies the selectivities of each clause in 'clauseinfo-list'.
+ *	  Multiplies the selectivities of each clause in 'restrictinfo-list'.
  *
- * Returns a flonum corresponding to the selectivity of 'clauseinfo-list'.
+ * Returns a flonum corresponding to the selectivity of 'restrictinfo-list'.
  */
 Cost
-product_selec(List *clauseinfo_list)
+product_selec(List *restrictinfo_list)
 {
 	Cost		result = 1.0;
 
-	if (clauseinfo_list != NIL)
+	if (restrictinfo_list != NIL)
 	{
 		List	   *xclausenode = NIL;
 		Cost		temp;
 
-		foreach(xclausenode, clauseinfo_list)
+		foreach(xclausenode, restrictinfo_list)
 		{
-			temp = ((ClauseInfo *) lfirst(xclausenode))->selectivity;
+			temp = ((RestrictInfo *) lfirst(xclausenode))->selectivity;
 			result = result * temp;
 		}
 	}
@@ -89,7 +89,7 @@ product_selec(List *clauseinfo_list)
  *	  those clauses that haven't been assigned a selectivity by an index.
  *
  * Returns nothing of interest.
- * MODIFIES: selectivities of the various rel's clauseinfo
+ * MODIFIES: selectivities of the various rel's restrictinfo
  *		  slots.
  */
 void
@@ -101,28 +101,28 @@ set_rest_relselec(Query *root, List *rel_list)
 	foreach(x, rel_list)
 	{
 		rel = (RelOptInfo *) lfirst(x);
-		set_rest_selec(root, rel->clauseinfo);
+		set_rest_selec(root, rel->restrictinfo);
 	}
 }
 
 /*
  * set_rest_selec -
  *	  Sets the selectivity fields for those clauses within a single
- *	  relation's 'clauseinfo-list' that haven't already been set.
+ *	  relation's 'restrictinfo-list' that haven't already been set.
  *
  * Returns nothing of interest.
  *
  */
 void
-set_rest_selec(Query *root, List *clauseinfo_list)
+set_rest_selec(Query *root, List *restrictinfo_list)
 {
 	List	   *temp = NIL;
-	ClauseInfo *clausenode = (ClauseInfo *) NULL;
+	RestrictInfo *clausenode = (RestrictInfo *) NULL;
 	Cost		cost_clause;
 
-	foreach(temp, clauseinfo_list)
+	foreach(temp, restrictinfo_list)
 	{
-		clausenode = (ClauseInfo *) lfirst(temp);
+		clausenode = (RestrictInfo *) lfirst(temp);
 		cost_clause = clausenode->selectivity;
 
 		/*
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 5fbf3e5059f7a0719512af25998aeca0566a017d..fd4ef5c9b2bc4e22e2b09bfc7f945b23622c0583 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.25 1998/09/01 04:29:30 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.26 1999/02/03 20:15:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -365,7 +365,7 @@ compute_rel_size(RelOptInfo * rel)
 	Cost		temp;
 	int			temp1;
 
-	temp = rel->tuples * product_selec(rel->clauseinfo);
+	temp = rel->tuples * product_selec(rel->restrictinfo);
 	Assert(temp >= 0);
 	if (temp >= (MAXINT - 1))
 		temp1 = MAXINT;
@@ -443,7 +443,7 @@ compute_joinrel_size(JoinPath *joinpath)
 	temp *= ((Path *) joinpath->outerjoinpath)->parent->size;
 	temp *= ((Path *) joinpath->innerjoinpath)->parent->size;
 
-	temp = temp * product_selec(joinpath->pathclauseinfo);
+	temp = temp * product_selec(joinpath->pathinfo);
 	if (temp >= (MAXINT - 1))
 		temp1 = MAXINT;
 	else
diff --git a/src/backend/optimizer/path/hashutils.c b/src/backend/optimizer/path/hashutils.c
index 59bf4897c0aad92caad91a7c4149c2d467589b7d..e55496809d3a04dfbc6de48a48ac94a456554fe3 100644
--- a/src/backend/optimizer/path/hashutils.c
+++ b/src/backend/optimizer/path/hashutils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.7 1998/09/01 04:29:32 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.8 1999/02/03 20:15:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,29 +24,29 @@ static HInfo *match_hashop_hashinfo(Oid hashop, List *hashinfo_list);
 
 /*
  * group-clauses-by-hashop--
- *	  If a join clause node in 'clauseinfo-list' is hashjoinable, store
+ *	  If a join clause node in 'restrictinfo-list' is hashjoinable, store
  *	  it within a hashinfo node containing other clause nodes with the same
  *	  hash operator.
  *
- * 'clauseinfo-list' is the list of clauseinfo nodes
+ * 'restrictinfo-list' is the list of restrictinfo nodes
  * 'inner-relid' is the relid of the inner join relation
  *
  * Returns the new list of hashinfo nodes.
  *
  */
 List *
-group_clauses_by_hashop(List *clauseinfo_list,
+group_clauses_by_hashop(List *restrictinfo_list,
 						int inner_relid)
 {
 	List	   *hashinfo_list = NIL;
-	ClauseInfo *clauseinfo = (ClauseInfo *) NULL;
+	RestrictInfo *restrictinfo = (RestrictInfo *) NULL;
 	List	   *i = NIL;
 	Oid			hashjoinop = 0;
 
-	foreach(i, clauseinfo_list)
+	foreach(i, restrictinfo_list)
 	{
-		clauseinfo = (ClauseInfo *) lfirst(i);
-		hashjoinop = clauseinfo->hashjoinoperator;
+		restrictinfo = (RestrictInfo *) lfirst(i);
+		hashjoinop = restrictinfo->hashjoinoperator;
 
 		/*
 		 * Create a new hashinfo node and add it to 'hashinfo-list' if one
@@ -55,7 +55,7 @@ group_clauses_by_hashop(List *clauseinfo_list,
 		if (hashjoinop)
 		{
 			HInfo	   *xhashinfo = (HInfo *) NULL;
-			Expr	   *clause = clauseinfo->clause;
+			Expr	   *clause = restrictinfo->clause;
 			Var		   *leftop = get_leftop(clause);
 			Var		   *rightop = get_rightop(clause);
 			JoinKey    *keys = (JoinKey *) NULL;
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 3d505c87c008ca5f900a7a7be48cf1761dd3442c..d46876ec0c9cfcfb11614c1722a8c243b7ee483c 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.35 1998/09/21 15:41:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.36 1999/02/03 20:15:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,7 @@
 #include "nodes/pg_list.h"
 #include "nodes/relation.h"
 #include "optimizer/clauses.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/cost.h"
 #include "optimizer/internal.h"
 #include "optimizer/keys.h"
@@ -46,25 +46,25 @@
 
 
 static void match_index_orclauses(RelOptInfo * rel, RelOptInfo * index, int indexkey,
-					  int xclass, List *clauseinfo_list);
+					  int xclass, List *restrictinfo_list);
 static bool match_index_to_operand(int indexkey, Expr *operand,
 					   RelOptInfo * rel, RelOptInfo * index);
 static List *match_index_orclause(RelOptInfo * rel, RelOptInfo * index, int indexkey,
 			 int xclass, List *or_clauses, List *other_matching_indices);
 static List *group_clauses_by_indexkey(RelOptInfo * rel, RelOptInfo * index,
-					int *indexkeys, Oid *classes, List *clauseinfo_list);
+					int *indexkeys, Oid *classes, List *restrictinfo_list);
 static List *group_clauses_by_ikey_for_joins(RelOptInfo * rel, RelOptInfo * index,
 								int *indexkeys, Oid *classes, List *join_cinfo_list, List *restr_cinfo_list);
-static ClauseInfo *match_clause_to_indexkey(RelOptInfo * rel, RelOptInfo * index, int indexkey,
-						 int xclass, ClauseInfo * clauseInfo, bool join);
-static bool pred_test(List *predicate_list, List *clauseinfo_list,
+static RestrictInfo *match_clause_to_indexkey(RelOptInfo * rel, RelOptInfo * index, int indexkey,
+						 int xclass, RestrictInfo * clauseInfo, bool join);
+static bool pred_test(List *predicate_list, List *restrictinfo_list,
 		  List *joininfo_list);
-static bool one_pred_test(Expr *predicate, List *clauseinfo_list);
+static bool one_pred_test(Expr *predicate, List *restrictinfo_list);
 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(RelOptInfo * rel, RelOptInfo * index,
-					  List *joininfo_list, List *clauseinfo_list);
+					  List *joininfo_list, List *restrictinfo_list);
 static List *index_innerjoin(Query *root, RelOptInfo * rel,
 				List *clausegroup_list, RelOptInfo * index);
 static List *create_index_paths(Query *root, RelOptInfo * rel, RelOptInfo * index,
@@ -90,7 +90,7 @@ static bool function_index_operand(Expr *funcOpnd, RelOptInfo * rel, RelOptInfo
  *
  * 'rel' is the relation entry to which these index paths correspond
  * 'indices' is a list of possible index paths
- * 'clauseinfo-list' is a list of restriction clauseinfo nodes for 'rel'
+ * 'restrictinfo-list' is a list of restriction restrictinfo nodes for 'rel'
  * 'joininfo-list' is a list of joininfo nodes for 'rel'
  * 'sortkeys' is a node describing the result sort order (from
  *		(find_sortkeys))
@@ -102,7 +102,7 @@ List *
 find_index_paths(Query *root,
 				 RelOptInfo * rel,
 				 List *indices,
-				 List *clauseinfo_list,
+				 List *restrictinfo_list,
 				 List *joininfo_list)
 {
 	List	   *scanclausegroups = NIL;
@@ -122,12 +122,12 @@ find_index_paths(Query *root,
 		 * test
 		 */
 		if (index->indpred != NIL)
-			if (!pred_test(index->indpred, clauseinfo_list, joininfo_list))
+			if (!pred_test(index->indpred, restrictinfo_list, joininfo_list))
 				continue;
 
 		/*
 		 * 1. Try matching the index against subclauses of an 'or' clause.
-		 * The fields of the clauseinfo nodes are marked with lists of the
+		 * The fields of the restrictinfo nodes are marked with lists of the
 		 * matching indices.  No path are actually created.  We currently
 		 * only look to match the first key.  We don't find multi-key
 		 * index cases where an AND matches the first key, and the OR
@@ -137,7 +137,7 @@ find_index_paths(Query *root,
 							  index,
 							  index->indexkeys[0],
 							  index->classlist[0],
-							  clauseinfo_list);
+							  restrictinfo_list);
 
 		/*
 		 * 2. If the keys of this index match any of the available
@@ -148,7 +148,7 @@ find_index_paths(Query *root,
 													 index,
 													 index->indexkeys,
 													 index->classlist,
-													 clauseinfo_list);
+													 restrictinfo_list);
 
 		scanpaths = NIL;
 		if (scanclausegroups != NIL)
@@ -165,7 +165,7 @@ find_index_paths(Query *root,
 		 * mergejoin, or if the index can possibly be used for scanning
 		 * the inner relation of a nestloop join.
 		 */
-		joinclausegroups = indexable_joinclauses(rel, index, joininfo_list, clauseinfo_list);
+		joinclausegroups = indexable_joinclauses(rel, index, joininfo_list, restrictinfo_list);
 		joinpaths = NIL;
 
 		if (joinclausegroups != NIL)
@@ -206,13 +206,13 @@ find_index_paths(Query *root,
  *	  about the index.
  *
  *	  Essentially, this adds 'index' to the list of indices in the
- *	  ClauseInfo field of each of the clauses which it matches.
+ *	  RestrictInfo field of each of the clauses which it matches.
  *
  * 'rel' is the node of the relation on which the index is defined.
  * 'index' is the index node.
  * 'indexkey' is the (single) key of the index
  * 'class' is the class of the operator corresponding to 'indexkey'.
- * 'clauseinfo-list' is the list of available restriction clauses.
+ * 'restrictinfo-list' is the list of available restriction clauses.
  *
  * Returns nothing.
  *
@@ -222,15 +222,15 @@ match_index_orclauses(RelOptInfo * rel,
 					  RelOptInfo * index,
 					  int indexkey,
 					  int xclass,
-					  List *clauseinfo_list)
+					  List *restrictinfo_list)
 {
-	ClauseInfo *clauseinfo = (ClauseInfo *) NULL;
+	RestrictInfo *restrictinfo = (RestrictInfo *) NULL;
 	List	   *i = NIL;
 
-	foreach(i, clauseinfo_list)
+	foreach(i, restrictinfo_list)
 	{
-		clauseinfo = (ClauseInfo *) lfirst(i);
-		if (valid_or_clause(clauseinfo))
+		restrictinfo = (RestrictInfo *) lfirst(i);
+		if (valid_or_clause(restrictinfo))
 		{
 
 			/*
@@ -238,11 +238,11 @@ match_index_orclauses(RelOptInfo * rel,
 			 * each of its subclauses.	The list is generated by adding
 			 * 'index' to the existing list where appropriate.
 			 */
-			clauseinfo->indexids =
+			restrictinfo->indexids =
 				match_index_orclause(rel, index, indexkey,
 									 xclass,
-									 clauseinfo->clause->args,
-									 clauseinfo->indexids);
+									 restrictinfo->clause->args,
+									 restrictinfo->indexids);
 		}
 	}
 }
@@ -392,15 +392,15 @@ group_clauses_by_indexkey(RelOptInfo * rel,
 						  RelOptInfo * index,
 						  int *indexkeys,
 						  Oid *classes,
-						  List *clauseinfo_list)
+						  List *restrictinfo_list)
 {
 	List	   *curCinfo = NIL;
-	ClauseInfo *matched_clause = (ClauseInfo *) NULL;
+	RestrictInfo *matched_clause = (RestrictInfo *) NULL;
 	List	   *clausegroup = NIL;
 	int			curIndxKey;
 	Oid			curClass;
 
-	if (clauseinfo_list == NIL || indexkeys[0] == 0)
+	if (restrictinfo_list == NIL || indexkeys[0] == 0)
 		return NIL;
 
 	do
@@ -410,9 +410,9 @@ group_clauses_by_indexkey(RelOptInfo * rel,
 		curIndxKey = indexkeys[0];
 		curClass = classes[0];
 
-		foreach(curCinfo, clauseinfo_list)
+		foreach(curCinfo, restrictinfo_list)
 		{
-			ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo);
+			RestrictInfo *temp = (RestrictInfo *) lfirst(curCinfo);
 
 			matched_clause = match_clause_to_indexkey(rel,
 													  index,
@@ -458,7 +458,7 @@ group_clauses_by_ikey_for_joins(RelOptInfo * rel,
 								List *restr_cinfo_list)
 {
 	List	   *curCinfo = NIL;
-	ClauseInfo *matched_clause = (ClauseInfo *) NULL;
+	RestrictInfo *matched_clause = (RestrictInfo *) NULL;
 	List	   *clausegroup = NIL;
 	int			curIndxKey;
 	Oid			curClass;
@@ -476,7 +476,7 @@ group_clauses_by_ikey_for_joins(RelOptInfo * rel,
 
 		foreach(curCinfo, join_cinfo_list)
 		{
-			ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo);
+			RestrictInfo *temp = (RestrictInfo *) lfirst(curCinfo);
 
 			matched_clause = match_clause_to_indexkey(rel,
 													  index,
@@ -492,7 +492,7 @@ group_clauses_by_ikey_for_joins(RelOptInfo * rel,
 		}
 		foreach(curCinfo, restr_cinfo_list)
 		{
-			ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo);
+			RestrictInfo *temp = (RestrictInfo *) lfirst(curCinfo);
 
 			matched_clause = match_clause_to_indexkey(rel,
 													  index,
@@ -565,18 +565,18 @@ group_clauses_by_ikey_for_joins(RelOptInfo * rel,
  *
  *	  If the clause being matched is a join clause, then 'join' is t.
  *
- * Returns a single clauseinfo node corresponding to the matching
+ * Returns a single restrictinfo node corresponding to the matching
  * clause.
  *
  * NOTE:  returns nil if clause is an or_clause.
  *
  */
-static ClauseInfo *
+static RestrictInfo *
 match_clause_to_indexkey(RelOptInfo * rel,
 						 RelOptInfo * index,
 						 int indexkey,
 						 int xclass,
-						 ClauseInfo * clauseInfo,
+						 RestrictInfo * clauseInfo,
 						 bool join)
 {
 	Expr	   *clause = clauseInfo->clause;
@@ -588,7 +588,7 @@ match_clause_to_indexkey(RelOptInfo * rel,
 
 	if (or_clause((Node *) clause) ||
 		not_clause((Node *) clause) || single_node((Node *) clause))
-		return (ClauseInfo *) NULL;
+		return (RestrictInfo *) NULL;
 
 	leftop = get_leftop(clause);
 	rightop = get_rightop(clause);
@@ -778,7 +778,7 @@ match_clause_to_indexkey(RelOptInfo * rel,
  * pred_test--
  *	  Does the "predicate inclusion test" for partial indexes.
  *
- *	  Recursively checks whether the clauses in clauseinfo_list imply
+ *	  Recursively checks whether the clauses in restrictinfo_list imply
  *	  that the given predicate is true.
  *
  *	  This routine (together with the routines it calls) iterates over
@@ -789,7 +789,7 @@ match_clause_to_indexkey(RelOptInfo * rel,
  *	  successfully cnfify()-ed). --Nels, Jan '93
  */
 static bool
-pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list)
+pred_test(List *predicate_list, List *restrictinfo_list, List *joininfo_list)
 {
 	List	   *pred,
 			   *items,
@@ -802,12 +802,12 @@ pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list)
 	 * an index on c.d), then we could use that equivalence class info
 	 * here with joininfo_list to do more complete tests for the usability
 	 * of a partial index.	For now, the test only uses restriction
-	 * clauses (those in clauseinfo_list). --Nels, Dec '92
+	 * clauses (those in restrictinfo_list). --Nels, Dec '92
 	 */
 
 	if (predicate_list == NULL)
 		return true;			/* no predicate: the index is usable */
-	if (clauseinfo_list == NULL)
+	if (restrictinfo_list == NULL)
 		return false;			/* no restriction clauses: the test must
 								 * fail */
 
@@ -823,11 +823,11 @@ pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list)
 			items = ((Expr *) lfirst(pred))->args;
 			foreach(item, items)
 			{
-				if (!one_pred_test(lfirst(item), clauseinfo_list))
+				if (!one_pred_test(lfirst(item), restrictinfo_list))
 					return false;
 			}
 		}
-		else if (!one_pred_test(lfirst(pred), clauseinfo_list))
+		else if (!one_pred_test(lfirst(pred), restrictinfo_list))
 			return false;
 	}
 	return true;
@@ -840,17 +840,17 @@ pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list)
  *	  expression.
  */
 static bool
-one_pred_test(Expr *predicate, List *clauseinfo_list)
+one_pred_test(Expr *predicate, List *restrictinfo_list)
 {
-	ClauseInfo *clauseinfo;
+	RestrictInfo *restrictinfo;
 	List	   *item;
 
 	Assert(predicate != NULL);
-	foreach(item, clauseinfo_list)
+	foreach(item, restrictinfo_list)
 	{
-		clauseinfo = (ClauseInfo *) lfirst(item);
+		restrictinfo = (RestrictInfo *) lfirst(item);
 		/* if any clause implies the predicate, return true */
-		if (one_pred_clause_expr_test(predicate, (Node *) clauseinfo->clause))
+		if (one_pred_clause_expr_test(predicate, (Node *) restrictinfo->clause))
 			return true;
 	}
 	return false;
@@ -1181,14 +1181,14 @@ clause_pred_clause_test(Expr *predicate, Node *clause)
  *
  * Returns a list of these clause groups.
  *
- *	  Added: clauseinfo_list - list of restriction ClauseInfos. It's to
+ *	  Added: restrictinfo_list - list of restriction RestrictInfos. It's to
  *		support multi-column indices in joins and for cases
  *		when a key is in both join & restriction clauses. - vadim 03/18/97
  *
  */
 static List *
 indexable_joinclauses(RelOptInfo * rel, RelOptInfo * index,
-					  List *joininfo_list, List *clauseinfo_list)
+					  List *joininfo_list, List *restrictinfo_list)
 {
 	JoinInfo   *joininfo = (JoinInfo *) NULL;
 	List	   *cg_list = NIL;
@@ -1199,21 +1199,21 @@ indexable_joinclauses(RelOptInfo * rel, RelOptInfo * index,
 	{
 		joininfo = (JoinInfo *) lfirst(i);
 
-		if (joininfo->jinfoclauseinfo == NIL)
+		if (joininfo->jinfo_restrictinfo == NIL)
 			continue;
 		clausegroups =
 			group_clauses_by_ikey_for_joins(rel,
 											index,
 											index->indexkeys,
 											index->classlist,
-											joininfo->jinfoclauseinfo,
-											clauseinfo_list);
+											joininfo->jinfo_restrictinfo,
+											restrictinfo_list);
 
 		if (clausegroups != NIL)
 		{
 			List	   *clauses = lfirst(clausegroups);
 
-			((ClauseInfo *) lfirst(clauses))->cinfojoinid =
+			((RestrictInfo *) lfirst(clauses))->cinfojoinid =
 				joininfo->otherrels;
 		}
 		cg_list = nconc(cg_list, clausegroups);
@@ -1239,7 +1239,7 @@ extract_restrict_clauses(List *clausegroup)
 
 	foreach(l, clausegroup)
 	{
-		ClauseInfo *cinfo = lfirst(l);
+		RestrictInfo *cinfo = lfirst(l);
 
 		if (!is_joinable((Node *) cinfo->clause))
 			restrict_cls = lappend(restrict_cls, cinfo);
@@ -1254,7 +1254,7 @@ extract_restrict_clauses(List *clausegroup)
  *	  Creates index path nodes corresponding to paths to be used as inner
  *	  relations in nestloop joins.
  *
- * 'clausegroup-list' is a list of list of clauseinfo nodes which can use
+ * 'clausegroup-list' is a list of list of restrictinfo nodes which can use
  * 'index' on their inner relation.
  *
  * Returns a list of index pathnodes.
@@ -1304,7 +1304,7 @@ index_innerjoin(Query *root, RelOptInfo * rel, List *clausegroup_list,
 		pathnode->indexkeys = index->indexkeys;
 		pathnode->indexqual = clausegroup;
 
-		pathnode->path.joinid = ((ClauseInfo *) lfirst(clausegroup))->cinfojoinid;
+		pathnode->path.joinid = ((RestrictInfo *) lfirst(clausegroup))->cinfojoinid;
 
 		pathnode->path.path_cost =
 			cost_index((Oid) lfirsti(index->relids),
@@ -1317,11 +1317,11 @@ index_innerjoin(Query *root, RelOptInfo * rel, List *clausegroup_list,
 					   true);
 
 		/*
-		 * copy clauseinfo list into path for expensive function
+		 * copy restrictinfo list into path for expensive function
 		 * processing -- JMH, 7/7/92
 		 */
-		pathnode->path.locclauseinfo =
-			set_difference(copyObject((Node *) rel->clauseinfo),
+		pathnode->path.loc_restrictinfo =
+			set_difference(copyObject((Node *) rel->restrictinfo),
 						   clausegroup);
 
 #if 0							/* fix xfunc */
@@ -1343,7 +1343,7 @@ index_innerjoin(Query *root, RelOptInfo * rel, List *clausegroup_list,
  *	  (restriction or join) that can be used in conjunction with an index.
  *
  * 'rel' is the relation for which 'index' is defined
- * 'clausegroup-list' is the list of clause groups (lists of clauseinfo
+ * 'clausegroup-list' is the list of clause groups (lists of restrictinfo
  *				nodes) grouped by mergejoinorder
  * 'join' is a flag indicating whether or not the clauses are join
  *				clauses
@@ -1366,7 +1366,7 @@ create_index_paths(Query *root,
 
 	foreach(i, clausegroup_list)
 	{
-		ClauseInfo *clauseinfo;
+		RestrictInfo *restrictinfo;
 		List	   *temp_node = NIL;
 		bool		temp = true;
 
@@ -1374,10 +1374,10 @@ create_index_paths(Query *root,
 
 		foreach(j, clausegroup)
 		{
-			clauseinfo = (ClauseInfo *) lfirst(j);
-			if (!(is_joinable((Node *) clauseinfo->clause) &&
+			restrictinfo = (RestrictInfo *) lfirst(j);
+			if (!(is_joinable((Node *) restrictinfo->clause) &&
 				  equal_path_merge_ordering(index->ordering,
-											clauseinfo->mergejoinorder)))
+											restrictinfo->mergejoinorder)))
 				temp = false;
 		}
 
diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c
index f8291f7e9644ce70ffafe5b2d27352e9073752ed..3199abedf9bdbf693a21dfd1df842313ed5019db 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.10 1998/09/01 04:29:35 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.11 1999/02/03 20:15:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -97,14 +97,14 @@ find_all_join_paths(Query *root, List *joinrels)
 		if (_enable_mergejoin_)
 		{
 			mergeinfo_list =
-				group_clauses_by_order(joinrel->clauseinfo,
+				group_clauses_by_order(joinrel->restrictinfo,
 									   lfirsti(innerrel->relids));
 		}
 
 		if (_enable_hashjoin_)
 		{
 			hashinfo_list =
-				group_clauses_by_hashop(joinrel->clauseinfo,
+				group_clauses_by_hashop(joinrel->restrictinfo,
 										lfirsti(innerrel->relids));
 		}
 
diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c
index 636207c9410d11810af24510e4800ae74a5f0b3d..34eec9fe5a9204d58fd37b542e3eade644d2ba7a 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.15 1998/09/01 04:29:37 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.16 1999/02/03 20:15:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -224,7 +224,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
 	joinrel->classlist = NULL;
 	joinrel->relam = InvalidOid;
 	joinrel->ordering = NULL;
-	joinrel->clauseinfo = NIL;
+	joinrel->restrictinfo = NIL;
 	joinrel->joininfo = NULL;
 	joinrel->innerjoin = NIL;
 	joinrel->superrels = NIL;
@@ -238,7 +238,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
 
 	if (joininfo)
 	{
-		joinrel->clauseinfo = joininfo->jinfoclauseinfo;
+		joinrel->restrictinfo = joininfo->jinfo_restrictinfo;
 		if (BushyPlanFlag)
 			joininfo->inactive = true;
 	}
@@ -346,22 +346,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids)
 											 current_joininfo_list);
 			if (other_joininfo)
 			{
-				other_joininfo->jinfoclauseinfo =
-					(List *) LispUnion(joininfo->jinfoclauseinfo,
-									   other_joininfo->jinfoclauseinfo);
+				other_joininfo->jinfo_restrictinfo =
+					(List *) LispUnion(joininfo->jinfo_restrictinfo,
+									   other_joininfo->jinfo_restrictinfo);
 			}
 			else
 			{
 				other_joininfo = makeNode(JoinInfo);
 
-				other_joininfo->otherrels =
-					joininfo->otherrels;
-				other_joininfo->jinfoclauseinfo =
-					joininfo->jinfoclauseinfo;
-				other_joininfo->mergejoinable =
-					joininfo->mergejoinable;
-				other_joininfo->hashjoinable =
-					joininfo->hashjoinable;
+				other_joininfo->otherrels = joininfo->otherrels;
+				other_joininfo->jinfo_restrictinfo = joininfo->jinfo_restrictinfo;
+				other_joininfo->mergejoinable = joininfo->mergejoinable;
+				other_joininfo->hashjoinable = joininfo->hashjoinable;
 				other_joininfo->inactive = false;
 
 				current_joininfo_list = lcons(other_joininfo,
@@ -412,7 +408,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 		{
 			JoinInfo   *joininfo = (JoinInfo *) lfirst(xjoininfo);
 			List	   *other_rels = joininfo->otherrels;
-			List	   *clause_info = joininfo->jinfoclauseinfo;
+			List	   *restrict_info = joininfo->jinfo_restrictinfo;
 			bool		mergejoinable = joininfo->mergejoinable;
 			bool		hashjoinable = joininfo->hashjoinable;
 
@@ -425,7 +421,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 				JoinInfo   *new_joininfo = makeNode(JoinInfo);
 
 				new_joininfo->otherrels = joinrel->relids;
-				new_joininfo->jinfoclauseinfo = clause_info;
+				new_joininfo->jinfo_restrictinfo = restrict_info;
 				new_joininfo->mergejoinable = mergejoinable;
 				new_joininfo->hashjoinable = hashjoinable;
 				new_joininfo->inactive = false;
@@ -445,16 +441,16 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
 
 						if (other_joininfo)
 						{
-							other_joininfo->jinfoclauseinfo =
-								(List *) LispUnion(clause_info,
-										other_joininfo->jinfoclauseinfo);
+							other_joininfo->jinfo_restrictinfo =
+								(List *) LispUnion(restrict_info,
+										other_joininfo->jinfo_restrictinfo);
 						}
 						else
 						{
 							JoinInfo   *new_joininfo = makeNode(JoinInfo);
 
 							new_joininfo->otherrels = new_relids;
-							new_joininfo->jinfoclauseinfo = clause_info;
+							new_joininfo->jinfo_restrictinfo = restrict_info;
 							new_joininfo->mergejoinable = mergejoinable;
 							new_joininfo->hashjoinable = hashjoinable;
 							new_joininfo->inactive = false;
@@ -583,7 +579,7 @@ set_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inne
 	}
 	else
 	{
-		selec = product_selec(jinfo->jinfoclauseinfo);
+		selec = product_selec(jinfo->jinfo_restrictinfo);
 /*		ntuples = Min(outer_rel->tuples,inner_rel->tuples) * selec; */
 		ntuples = outer_rel->tuples * inner_rel->tuples * selec;
 	}
diff --git a/src/backend/optimizer/path/mergeutils.c b/src/backend/optimizer/path/mergeutils.c
index 2d1d0215112f4f303253051098ca7e48304c911d..5e465f1e39cc47b38883466871dd91ae051a4258 100644
--- a/src/backend/optimizer/path/mergeutils.c
+++ b/src/backend/optimizer/path/mergeutils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.9 1998/09/01 04:29:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.10 1999/02/03 20:15:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,27 +23,27 @@
 
 /*
  * group-clauses-by-order--
- *	  If a join clause node in 'clauseinfo-list' is mergejoinable, store
+ *	  If a join clause node in 'restrictinfo-list' is mergejoinable, store
  *	  it within a mergeinfo node containing other clause nodes with the same
  *	  mergejoin ordering.
  *
- * 'clauseinfo-list' is the list of clauseinfo nodes
+ * 'restrictinfo-list' is the list of restrictinfo nodes
  * 'inner-relid' is the relid of the inner join relation
  *
  * Returns the new list of mergeinfo nodes.
  *
  */
 List *
-group_clauses_by_order(List *clauseinfo_list,
+group_clauses_by_order(List *restrictinfo_list,
 					   int inner_relid)
 {
 	List	   *mergeinfo_list = NIL;
-	List	   *xclauseinfo = NIL;
+	List	   *xrestrictinfo = NIL;
 
-	foreach(xclauseinfo, clauseinfo_list)
+	foreach(xrestrictinfo, restrictinfo_list)
 	{
-		ClauseInfo *clauseinfo = (ClauseInfo *) lfirst(xclauseinfo);
-		MergeOrder *merge_ordering = clauseinfo->mergejoinorder;
+		RestrictInfo *restrictinfo = (RestrictInfo *) lfirst(xrestrictinfo);
+		MergeOrder *merge_ordering = restrictinfo->mergejoinorder;
 
 		if (merge_ordering)
 		{
@@ -54,7 +54,7 @@ group_clauses_by_order(List *clauseinfo_list,
 			 */
 			PathOrder	p_ordering;
 			MInfo	   *xmergeinfo;
-			Expr	   *clause = clauseinfo->clause;
+			Expr	   *clause = restrictinfo->clause;
 			Var		   *leftop = get_leftop(clause);
 			Var		   *rightop = get_rightop(clause);
 			JoinKey    *keys;
diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c
index 31bd977de162da51ff1986b06c2c692a2fab8a08..6537ac1338a5334939e0370af65abf35bc80613e 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.12 1998/09/21 15:41:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.13 1999/02/03 20:15:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,7 +22,7 @@
 
 #include "optimizer/internal.h"
 #include "optimizer/clauses.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/paths.h"
 #include "optimizer/cost.h"
 #include "optimizer/plancat.h"
@@ -58,7 +58,7 @@ create_or_index_paths(Query *root,
 
 	foreach(clist, clauses)
 	{
-		ClauseInfo *clausenode = (ClauseInfo *) (lfirst(clist));
+		RestrictInfo *clausenode = (RestrictInfo *) (lfirst(clist));
 
 		/*
 		 * Check to see if this clause is an 'or' clause, and, if so,
@@ -118,11 +118,11 @@ create_or_index_paths(Query *root,
 				pathnode->path.path_cost = cost;
 
 				/*
-				 * copy clauseinfo list into path for expensive function
+				 * copy restrictinfo list into path for expensive function
 				 * processing	 -- JMH, 7/7/92
 				 */
-				pathnode->path.locclauseinfo =
-					set_difference(copyObject((Node *) rel->clauseinfo),
+				pathnode->path.loc_restrictinfo =
+					set_difference(copyObject((Node *) rel->restrictinfo),
 								   lcons(clausenode, NIL));
 
 #if 0							/* fix xfunc */
diff --git a/src/backend/optimizer/path/predmig.c b/src/backend/optimizer/path/predmig.c
index b1ff33cee630bb2313ac2e1fb313a54508dac1ca..fcd77f85d74e0a31123a8655ff494055e5954a9e 100644
--- a/src/backend/optimizer/path/predmig.c
+++ b/src/backend/optimizer/path/predmig.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/predmig.c,v 1.13 1998/09/01 04:29:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/predmig.c,v 1.14 1999/02/03 20:15:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -64,7 +64,7 @@ static void xfunc_form_groups(Stream root, Stream bottom);
 static void xfunc_free_stream(Stream root);
 static Stream xfunc_add_clauses(Stream current);
 static void xfunc_setup_group(Stream node, Stream bottom);
-static Stream xfunc_streaminsert(ClauseInfo clauseinfo, Stream current,
+static Stream xfunc_streaminsert(RestrictInfo restrictinfo, Stream current,
 				   int clausetype);
 static int	xfunc_num_relids(Stream node);
 static StreamPtr xfunc_get_downjoin(Stream node);
@@ -142,7 +142,7 @@ xfunc_predmig(JoinPath pathnode,/* root of the join tree */
 		set_downstream(laststream, (StreamPtr) newstream);
 	set_downstream(newstream, (StreamPtr) NULL);
 	set_pathptr(newstream, (pathPtr) pathnode);
-	set_cinfo(newstream, (ClauseInfo) NULL);
+	set_cinfo(newstream, (RestrictInfo) NULL);
 	set_clausetype(newstream, XFUNC_UNKNOWN);
 
 	/* base case: we're at a leaf, call xfunc_series_llel */
@@ -315,7 +315,7 @@ xfunc_complete_stream(Stream stream)
 static bool
 xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
 {
-	ClauseInfo	clauseinfo = get_cinfo(pullme);
+	RestrictInfo	restrictinfo = get_cinfo(pullme);
 	bool		progress = false;
 	Stream		upjoin,
 				orignode,
@@ -325,7 +325,7 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
 	/* find node in origstream that contains clause */
 	for (orignode = origstream;
 		 orignode != (Stream) NULL
-		 && get_cinfo(orignode) != clauseinfo;
+		 && get_cinfo(orignode) != restrictinfo;
 		 orignode = (Stream) get_downstream(orignode))
 		 /* empty body in for loop */ ;
 	if (!orignode)
@@ -348,13 +348,13 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
 			whichchild = OUTER;
 		else
 			whichchild = INNER;
-		clauseinfo = xfunc_pullup((Path) get_pathptr((Stream) get_downstream(upjoin)),
+		restrictinfo = xfunc_pullup((Path) get_pathptr((Stream) get_downstream(upjoin)),
 								  (JoinPath) get_pathptr(upjoin),
-								  clauseinfo,
+								  restrictinfo,
 								  whichchild,
 								  get_clausetype(orignode));
 		set_pathptr(pullme, get_pathptr(upjoin));
-		/* pullme has been moved into locclauseinfo */
+		/* pullme has been moved into locrestrictinfo */
 		set_clausetype(pullme, XFUNC_LOCPRD);
 
 		/*
@@ -524,10 +524,10 @@ xfunc_add_clauses(Stream current)
 	LispValue	primjoin;
 
 	/* first add in the local clauses */
-	foreach(temp, get_locclauseinfo((Path) get_pathptr(current)))
+	foreach(temp, get_loc_restrictinfo((Path) get_pathptr(current)))
 	{
 		topnode =
-			xfunc_streaminsert((ClauseInfo) lfirst(temp), topnode,
+			xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode,
 							   XFUNC_LOCPRD);
 	}
 
@@ -535,11 +535,11 @@ xfunc_add_clauses(Stream current)
 	if (IsA(get_pathptr(current), JoinPath))
 	{
 		primjoin = xfunc_primary_join((JoinPath) get_pathptr(current));
-		foreach(temp, get_pathclauseinfo((JoinPath) get_pathptr(current)))
+		foreach(temp, get_pathrestrictinfo((JoinPath) get_pathptr(current)))
 		{
-			if (!equal(get_clause((ClauseInfo) lfirst(temp)), primjoin))
+			if (!equal(get_clause((RestrictInfo) lfirst(temp)), primjoin))
 				topnode =
-					xfunc_streaminsert((ClauseInfo) lfirst(temp), topnode,
+					xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode,
 									   XFUNC_JOINPRD);
 		}
 	}
@@ -593,7 +593,7 @@ xfunc_setup_group(Stream node, Stream bottom)
  ** Return new node.
  */
 static Stream
-xfunc_streaminsert(ClauseInfo clauseinfo,
+xfunc_streaminsert(RestrictInfo restrictinfo,
 				   Stream current,
 				   int clausetype)		/* XFUNC_LOCPRD or XFUNC_JOINPRD */
 {
@@ -605,7 +605,7 @@ xfunc_streaminsert(ClauseInfo clauseinfo,
 	set_upstream(current, (StreamPtr) newstream);
 	set_downstream(newstream, (StreamPtr) current);
 	set_pathptr(newstream, get_pathptr(current));
-	set_cinfo(newstream, clauseinfo);
+	set_cinfo(newstream, restrictinfo);
 	set_clausetype(newstream, clausetype);
 	return newstream;
 }
diff --git a/src/backend/optimizer/path/xfunc.c b/src/backend/optimizer/path/xfunc.c
index f32b77cdc2a26f9360416aeaef12a6b6d55e5f97..d9d22f37f970c0ed2c05a4ba24d68cb5ba8c1f60 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.22 1998/09/01 04:29:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.23 1999/02/03 20:15:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,7 +59,7 @@ void
 xfunc_trypullup(RelOptInfo rel)
 {
 	LispValue	y;				/* list ptr */
-	ClauseInfo	maxcinfo;		/* The ClauseInfo to pull up, as
+	RestrictInfo	maxcinfo;		/* The RestrictInfo to pull up, as
 								 * calculated by xfunc_shouldpull() */
 	JoinPath	curpath;		/* current path in list */
 	int			progress;		/* has progress been made this time
@@ -132,7 +132,7 @@ xfunc_trypullup(RelOptInfo rel)
  ** xfunc_shouldpull --
  **    find clause with highest rank, and decide whether to pull it up
  ** from child to parent.  Currently we only pullup secondary join clauses
- ** that are in the pathclauseinfo.  Secondary hash and sort clauses are
+ ** that are in the pathrestrictinfo.  Secondary hash and sort clauses are
  ** left where they are.
  **    If we find an expensive function but decide *not* to pull it up,
  ** we'd better set the unpruneable flag.  -- JMH, 11/11/92
@@ -146,12 +146,12 @@ xfunc_shouldpull(Query *queryInfo,
 				 Path childpath,
 				 JoinPath parentpath,
 				 int whichchild,
-				 ClauseInfo * maxcinfopt)		/* Out: pointer to clause
+				 RestrictInfo * maxcinfopt)		/* Out: pointer to clause
 												 * to pullup */
 {
 	LispValue	clauselist,
 				tmplist;		/* lists of clauses */
-	ClauseInfo	maxcinfo;		/* clause to pullup */
+	RestrictInfo	maxcinfo;		/* clause to pullup */
 	LispValue	primjoinclause	/* primary join clause */
 	= xfunc_primary_join(parentpath);
 	Cost		tmprank,
@@ -160,22 +160,22 @@ xfunc_shouldpull(Query *queryInfo,
 	Cost		joincost = 0;	/* join cost + primjoinclause cost */
 	int			retval = XFUNC_LOCPRD;
 
-	clauselist = get_locclauseinfo(childpath);
+	clauselist = get_loc_restrictinfo(childpath);
 
 	if (clauselist != LispNil)
 	{
 		/* find local predicate with maximum rank */
 		for (tmplist = clauselist,
-			 maxcinfo = (ClauseInfo) lfirst(tmplist),
+			 maxcinfo = (RestrictInfo) lfirst(tmplist),
 			 maxrank = xfunc_rank(get_clause(maxcinfo));
 			 tmplist != LispNil;
 			 tmplist = lnext(tmplist))
 		{
 
-			if ((tmprank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist))))
+			if ((tmprank = xfunc_rank(get_clause((RestrictInfo) lfirst(tmplist))))
 				> maxrank)
 			{
-				maxcinfo = (ClauseInfo) lfirst(tmplist);
+				maxcinfo = (RestrictInfo) lfirst(tmplist);
 				maxrank = tmprank;
 			}
 		}
@@ -187,16 +187,16 @@ xfunc_shouldpull(Query *queryInfo,
 	 * local predicate
 	 */
 	if (is_join(childpath) && xfunc_num_join_clauses((JoinPath) childpath) > 1)
-		for (tmplist = get_pathclauseinfo((JoinPath) childpath);
+		for (tmplist = get_pathrestrictinfo((JoinPath) childpath);
 			 tmplist != LispNil;
 			 tmplist = lnext(tmplist))
 		{
 
 			if (tmplist != LispNil &&
-				(tmprank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist))))
+				(tmprank = xfunc_rank(get_clause((RestrictInfo) lfirst(tmplist))))
 				> maxrank)
 			{
-				maxcinfo = (ClauseInfo) lfirst(tmplist);
+				maxcinfo = (RestrictInfo) lfirst(tmplist);
 				maxrank = tmprank;
 				retval = XFUNC_JOINPRD;
 			}
@@ -260,13 +260,13 @@ xfunc_shouldpull(Query *queryInfo,
  ** 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.
  **
- ** Now returns a pointer to the new pulled-up ClauseInfo. -- JMH, 11/18/92
+ ** Now returns a pointer to the new pulled-up RestrictInfo. -- JMH, 11/18/92
  */
-ClauseInfo
+RestrictInfo
 xfunc_pullup(Query *queryInfo,
 			 Path childpath,
 			 JoinPath parentpath,
-			 ClauseInfo cinfo,	/* clause to pull up */
+			 RestrictInfo cinfo,	/* clause to pull up */
 			 int whichchild,	/* whether child is INNER or OUTER of join */
 			 int clausetype)	/* whether clause to pull is join or local */
 {
@@ -274,22 +274,22 @@ xfunc_pullup(Query *queryInfo,
 	RelOptInfo	newrel;
 	Cost		pulled_selec;
 	Cost		cost;
-	ClauseInfo	newinfo;
+	RestrictInfo	newinfo;
 
 	/* remove clause from childpath */
 	newkid = (Path) copyObject((Node) childpath);
 	if (clausetype == XFUNC_LOCPRD)
 	{
-		set_locclauseinfo(newkid,
+		set_locrestrictinfo(newkid,
 						  xfunc_LispRemove((LispValue) cinfo,
-									  (List) get_locclauseinfo(newkid)));
+									  (List) get_loc_restrictinfo(newkid)));
 	}
 	else
 	{
-		set_pathclauseinfo
+		set_pathrestrictinfo
 			((JoinPath) newkid,
 			 xfunc_LispRemove((LispValue) cinfo,
-						  (List) get_pathclauseinfo((JoinPath) newkid)));
+						  (List) get_pathrestrictinfo((JoinPath) newkid)));
 	}
 
 	/*
@@ -320,7 +320,7 @@ xfunc_pullup(Query *queryInfo,
 	 * * We copy the cinfo, since it may appear in other plans, and we're
 	 * going * to munge it.  -- JMH, 7/22/92
 	 */
-	newinfo = (ClauseInfo) copyObject((Node) cinfo);
+	newinfo = (RestrictInfo) copyObject((Node) cinfo);
 
 	/*
 	 * * Fix all vars in the clause * to point to the right varno and
@@ -329,9 +329,9 @@ xfunc_pullup(Query *queryInfo,
 	xfunc_fixvars(get_clause(newinfo), newrel, whichchild);
 
 	/* add clause to parentpath, and fix up its cost. */
-	set_locclauseinfo(parentpath,
+	set_locrestrictinfo(parentpath,
 					  lispCons((LispValue) newinfo,
-							 (LispValue) get_locclauseinfo(parentpath)));
+							 (LispValue) get_loc_restrictinfo(parentpath)));
 	/* put new childpath into the path tree */
 	if (whichchild == INNER)
 		set_innerjoinpath(parentpath, (pathPtr) newkid);
@@ -771,12 +771,12 @@ xfunc_card_product(Query *queryInfo, Relid relids)
 		if (tuples)
 		{						/* not of cardinality 0 */
 			/* factor in the selectivity of all zero-cost clauses */
-			foreach(cinfonode, get_clauseinfo(currel))
+			foreach(cinfonode, get_restrictinfo(currel))
 			{
-				if (!xfunc_expense(queryInfo, get_clause((ClauseInfo) lfirst(cinfonode))))
+				if (!xfunc_expense(queryInfo, get_clause((RestrictInfo) lfirst(cinfonode))))
 					tuples *=
 						compute_clause_selec(queryInfo,
-							  get_clause((ClauseInfo) lfirst(cinfonode)),
+							  get_clause((RestrictInfo) lfirst(cinfonode)),
 											 LispNil);
 			}
 
@@ -861,8 +861,8 @@ xfunc_find_references(LispValue clause)
 LispValue
 xfunc_primary_join(JoinPath pathnode)
 {
-	LispValue	joinclauselist = get_pathclauseinfo(pathnode);
-	ClauseInfo	mincinfo;
+	LispValue	joinclauselist = get_pathrestrictinfo(pathnode);
+	RestrictInfo	mincinfo;
 	LispValue	tmplist;
 	LispValue	minclause = LispNil;
 	Cost		minrank,
@@ -903,15 +903,15 @@ xfunc_primary_join(JoinPath pathnode)
 	if (joinclauselist == LispNil)
 		return LispNil;
 
-	for (tmplist = joinclauselist, mincinfo = (ClauseInfo) lfirst(joinclauselist),
-		 minrank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist)));
+	for (tmplist = joinclauselist, mincinfo = (RestrictInfo) lfirst(joinclauselist),
+		 minrank = xfunc_rank(get_clause((RestrictInfo) lfirst(tmplist)));
 		 tmplist != LispNil;
 		 tmplist = lnext(tmplist))
-		if ((tmprank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist))))
+		if ((tmprank = xfunc_rank(get_clause((RestrictInfo) lfirst(tmplist))))
 			< minrank)
 		{
 			minrank = tmprank;
-			mincinfo = (ClauseInfo) lfirst(tmplist);
+			mincinfo = (RestrictInfo) lfirst(tmplist);
 		}
 	return (LispValue) get_clause(mincinfo);
 }
@@ -935,16 +935,16 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode)
 	 * functions, we don't sort.
 	 */
 	if (XfuncMode != XFUNC_OFF)
-		set_locclauseinfo(pathnode, lisp_qsort(get_locclauseinfo(pathnode),
+		set_locrestrictinfo(pathnode, lisp_qsort(get_loc_restrictinfo(pathnode),
 											   xfunc_cinfo_compare));
-	for (tmplist = get_locclauseinfo(pathnode), selec = 1.0;
+	for (tmplist = get_loc_restrictinfo(pathnode), selec = 1.0;
 		 tmplist != LispNil;
 		 tmplist = lnext(tmplist))
 	{
-		cost += (Cost) (xfunc_local_expense(get_clause((ClauseInfo) lfirst(tmplist)))
+		cost += (Cost) (xfunc_local_expense(get_clause((RestrictInfo) lfirst(tmplist)))
 					  * (Cost) get_tuples(get_parent(pathnode)) * selec);
 		selec *= compute_clause_selec(queryInfo,
-								get_clause((ClauseInfo) lfirst(tmplist)),
+								get_clause((RestrictInfo) lfirst(tmplist)),
 									  LispNil);
 	}
 
@@ -955,17 +955,17 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode)
 	if (IsA(pathnode, JoinPath))
 	{
 		if (XfuncMode != XFUNC_OFF)
-			set_pathclauseinfo((JoinPath) pathnode, lisp_qsort
-							   (get_pathclauseinfo((JoinPath) pathnode),
+			set_pathrestrictinfo((JoinPath) pathnode, lisp_qsort
+							   (get_pathrestrictinfo((JoinPath) pathnode),
 								xfunc_cinfo_compare));
-		for (tmplist = get_pathclauseinfo((JoinPath) pathnode), selec = 1.0;
+		for (tmplist = get_pathrestrictinfo((JoinPath) pathnode), selec = 1.0;
 			 tmplist != LispNil;
 			 tmplist = lnext(tmplist))
 		{
-			cost += (Cost) (xfunc_local_expense(get_clause((ClauseInfo) lfirst(tmplist)))
+			cost += (Cost) (xfunc_local_expense(get_clause((RestrictInfo) lfirst(tmplist)))
 					  * (Cost) get_tuples(get_parent(pathnode)) * selec);
 			selec *= compute_clause_selec(queryInfo,
-								get_clause((ClauseInfo) lfirst(tmplist)),
+								get_clause((RestrictInfo) lfirst(tmplist)),
 										  LispNil);
 		}
 	}
@@ -1188,14 +1188,14 @@ xfunc_fixvars(LispValue clause, /* clause being pulled up */
 
 
 /*
- ** Comparison function for lisp_qsort() on a list of ClauseInfo's.
- ** arg1 and arg2 should really be of type (ClauseInfo *).
+ ** Comparison function for lisp_qsort() on a list of RestrictInfo's.
+ ** arg1 and arg2 should really be of type (RestrictInfo *).
  */
 int
 xfunc_cinfo_compare(void *arg1, void *arg2)
 {
-	ClauseInfo	info1 = *(ClauseInfo *) arg1;
-	ClauseInfo	info2 = *(ClauseInfo *) arg2;
+	RestrictInfo	info1 = *(RestrictInfo *) arg1;
+	RestrictInfo	info2 = *(RestrictInfo *) arg2;
 
 	LispValue	clause1 = (LispValue) get_clause(info1),
 				clause2 = (LispValue) get_clause(info2);
@@ -1383,7 +1383,7 @@ xfunc_tuple_width(Relation rd)
 int
 xfunc_num_join_clauses(JoinPath path)
 {
-	int			num = length(get_pathclauseinfo(path));
+	int			num = length(get_pathrestrictinfo(path));
 
 	if (IsA(path, MergePath))
 		return num + length(get_path_mergeclauses((MergePath) path));
@@ -1481,7 +1481,7 @@ xfunc_copyrel(RelOptInfo from, RelOptInfo * to)
 	Node_Copy(from, newnode, alloc, indexkeys);
 	Node_Copy(from, newnode, alloc, ordering);
 #endif
-	Node_Copy(from, newnode, alloc, clauseinfo);
+	Node_Copy(from, newnode, alloc, restrictinfo);
 	Node_Copy(from, newnode, alloc, joininfo);
 	Node_Copy(from, newnode, alloc, innerjoin);
 	Node_Copy(from, newnode, alloc, superrels);
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index af1e1275a04d467be69fa8fa3f80fa105d0786d9..656f8293cb3f4380adaa3cae292340a66dc32ac0 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.34 1998/12/04 15:34:05 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.35 1999/02/03 20:15:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,7 +31,7 @@
 #include "utils/palloc.h"
 #include "utils/builtins.h"
 
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/clauses.h"
 #include "optimizer/planmain.h"
 #include "optimizer/tlist.h"
@@ -170,7 +170,7 @@ create_scan_node(Path *best_path, List *tlist)
 	 * xfunc_trypullup(), we get the relevant clauses from the path
 	 * itself, not its parent relation.   --- JMH, 6/15/92
 	 */
-	scan_clauses = fix_opids(get_actual_clauses(best_path->locclauseinfo));
+	scan_clauses = fix_opids(get_actual_clauses(best_path->loc_restrictinfo));
 
 	switch (best_path->pathtype)
 	{
@@ -219,7 +219,7 @@ create_join_node(JoinPath *best_path, List *tlist)
 	inner_node = create_plan((Path *) best_path->innerjoinpath);
 	inner_tlist = inner_node->targetlist;
 
-	clauses = get_actual_clauses(best_path->pathclauseinfo);
+	clauses = get_actual_clauses(best_path->pathinfo);
 
 	switch (best_path->path.pathtype)
 	{
@@ -263,11 +263,11 @@ create_join_node(JoinPath *best_path, List *tlist)
 	 * into this path node.  Put them in the qpqual of the plan node. * --
 	 * JMH, 6/15/92
 	 */
-	if (get_locclauseinfo(best_path) != NIL)
+	if (get_loc_restrictinfo(best_path) != NIL)
 		set_qpqual((Plan) retval,
 				   nconc(get_qpqual((Plan) retval),
 						 fix_opids(get_actual_clauses
-								   (get_locclauseinfo(best_path)))));
+								   (get_loc_restrictinfo(best_path)))));
 #endif
 
 	return retval;
@@ -730,7 +730,7 @@ fix_indxqual_references(Node *clause, Path *index_path)
 		if (new_subclauses)
 		{
 			return (Node *)
-				make_clause(expr->opType, expr->oper, new_subclauses);
+					make_clause(expr->opType, expr->oper, new_subclauses);
 		}
 		else
 			return clause;
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index 85253b5c58cb11fd0ed7c3e2abe597af45012d35..9098c709577434be0fb1f569aecc23928a8eebcf 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.20 1998/09/01 04:29:50 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.21 1999/02/03 20:15:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -40,7 +40,7 @@
 extern int	Quiet;
 
 static void add_clause_to_rels(Query *root, List *clause);
-static void add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo,
+static void add_join_info_to_rels(Query *root, RestrictInfo * restrictinfo,
 					  List *join_relids);
 static void add_vars_to_targetlist(Query *root, List *vars, List *join_relids);
 
@@ -140,7 +140,7 @@ add_missing_vars_to_tlist(Query *root, List *tlist)
 
 /*
  * init-base-rels-qual--
- *	  Initializes ClauseInfo and JoinInfo fields of relation entries for all
+ *	  Initializes RestrictInfo and JoinInfo fields of relation entries for all
  *	  relations appearing within clauses.  Creates new relation entries if
  *	  necessary, adding them to *query-relation-list*.
  *
@@ -158,9 +158,9 @@ init_base_rels_qual(Query *root, List *clauses)
 
 /*
  * add-clause-to-rels--
- *	  Add clause information to either the 'ClauseInfo' or 'JoinInfo' field
+ *	  Add clause information to either the 'RestrictInfo' or 'JoinInfo' field
  *	  of a relation entry(depending on whether or not the clause is a join)
- *	  by creating a new ClauseInfo node and setting appropriate fields
+ *	  by creating a new RestrictInfo node and setting appropriate fields
  *	  within the nodes.
  *
  *	  Returns nothing of interest.
@@ -170,19 +170,19 @@ add_clause_to_rels(Query *root, List *clause)
 {
 	List	   *relids;
 	List	   *vars;
-	ClauseInfo *clauseinfo = makeNode(ClauseInfo);
+	RestrictInfo *restrictinfo = makeNode(RestrictInfo);
 
 	/*
 	 * Retrieve all relids and vars contained within the clause.
 	 */
 	clause_get_relids_vars((Node *) clause, &relids, &vars);
 
-	clauseinfo->clause = (Expr *) clause;
-	clauseinfo->notclause = contains_not((Node *) clause);
-	clauseinfo->selectivity = 0;
-	clauseinfo->indexids = NIL;
-	clauseinfo->mergejoinorder = (MergeOrder *) NULL;
-	clauseinfo->hashjoinoperator = (Oid) 0;
+	restrictinfo->clause = (Expr *) clause;
+	restrictinfo->notclause = contains_not((Node *) clause);
+	restrictinfo->selectivity = 0;
+	restrictinfo->indexids = NIL;
+	restrictinfo->mergejoinorder = (MergeOrder *) NULL;
+	restrictinfo->hashjoinoperator = (Oid) 0;
 
 	if (length(relids) == 1)
 	{
@@ -204,14 +204,14 @@ add_clause_to_rels(Query *root, List *clause)
 			 * XXX If we have a func clause set selectivity to 1/3, really
 			 * need a true selectivity function.
 			 */
-			clauseinfo->selectivity = (Cost) 0.3333333;
+			restrictinfo->selectivity = (Cost) 0.3333333;
 		}
 		else
 		{
-			clauseinfo->selectivity =
+			restrictinfo->selectivity =
 				compute_clause_selec(root, (Node *) clause, NIL);
 		}
-		rel->clauseinfo = lcons(clauseinfo, rel->clauseinfo);
+		rel->restrictinfo = lcons(restrictinfo, rel->restrictinfo);
 	}
 	else
 	{
@@ -228,14 +228,14 @@ add_clause_to_rels(Query *root, List *clause)
 			 * XXX If we have a func clause set selectivity to 1/3, really
 			 * need a true selectivity function.
 			 */
-			clauseinfo->selectivity = (Cost) 0.3333333;
+			restrictinfo->selectivity = (Cost) 0.3333333;
 		}
 		else
 		{
-			clauseinfo->selectivity =
+			restrictinfo->selectivity =
 				compute_clause_selec(root, (Node *) clause, NIL);
 		}
-		add_join_info_to_rels(root, clauseinfo, relids);
+		add_join_info_to_rels(root, restrictinfo, relids);
 		/* we are going to be doing a join, so add var to targetlist */
 		add_vars_to_targetlist(root, vars, relids);
 	}
@@ -243,18 +243,18 @@ add_clause_to_rels(Query *root, List *clause)
 
 /*
  * add-join-info-to-rels--
- *	  For every relation participating in a join clause, add 'clauseinfo' to
+ *	  For every relation participating in a join clause, add 'restrictinfo' to
  *	  the appropriate joininfo node(creating a new one and adding it to the
  *	  appropriate rel node if necessary).
  *
- * 'clauseinfo' describes the join clause
+ * 'restrictinfo' describes the join clause
  * 'join-relids' is the list of relations participating in the join clause
  *
  * Returns nothing.
  *
  */
 static void
-add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo, List *join_relids)
+add_join_info_to_rels(Query *root, RestrictInfo * restrictinfo, List *join_relids)
 {
 	List	   *join_relid;
 
@@ -272,8 +272,8 @@ add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo, List *join_relids)
 
 		joininfo = find_joininfo_node(get_base_rel(root, lfirsti(join_relid)),
 									  other_rels);
-		joininfo->jinfoclauseinfo =
-			lcons(copyObject((void *) clauseinfo), joininfo->jinfoclauseinfo);
+		joininfo->jinfo_restrictinfo =
+			lcons(copyObject((void *) restrictinfo), joininfo->jinfo_restrictinfo);
 
 	}
 }
@@ -322,7 +322,7 @@ add_vars_to_targetlist(Query *root, List *vars, List *join_relids)
  * init-join-info--
  *	  Set the MergeJoinable or HashJoinable field for every joininfo node
  *	  (within a rel node) and the MergeJoinOrder or HashJoinOp field for
- *	  each clauseinfo node(within a joininfo node) for all relations in a
+ *	  each restrictinfo node(within a joininfo node) for all relations in a
  *	  query.
  *
  *	  Returns nothing.
@@ -335,7 +335,7 @@ init_join_info(List *rel_list)
 			   *z;
 	RelOptInfo *rel;
 	JoinInfo   *joininfo;
-	ClauseInfo *clauseinfo;
+	RestrictInfo *restrictinfo;
 	Expr	   *clause;
 
 	foreach(x, rel_list)
@@ -344,10 +344,10 @@ init_join_info(List *rel_list)
 		foreach(y, rel->joininfo)
 		{
 			joininfo = (JoinInfo *) lfirst(y);
-			foreach(z, joininfo->jinfoclauseinfo)
+			foreach(z, joininfo->jinfo_restrictinfo)
 			{
-				clauseinfo = (ClauseInfo *) lfirst(z);
-				clause = clauseinfo->clause;
+				restrictinfo = (RestrictInfo *) lfirst(z);
+				clause = restrictinfo->clause;
 				if (is_joinable((Node *) clause))
 				{
 					MergeOrder *sortop = (MergeOrder *) NULL;
@@ -360,12 +360,12 @@ init_join_info(List *rel_list)
 
 					if (sortop)
 					{
-						clauseinfo->mergejoinorder = sortop;
+						restrictinfo->mergejoinorder = sortop;
 						joininfo->mergejoinable = true;
 					}
 					if (hashop)
 					{
-						clauseinfo->hashjoinoperator = hashop;
+						restrictinfo->hashjoinoperator = hashop;
 						joininfo->hashjoinable = true;
 					}
 				}
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 0008caddeead6927a72d30c47efd885668919f3c..7bbd2db431b9c4fce59b6a7d38747ac1289403a8 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.40 1999/02/03 19:31:24 wieck Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.41 1999/02/03 20:15:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,7 +39,7 @@
 
 /* DATA STRUCTURE CREATION/MANIPULATION ROUTINES */
 #include "nodes/relation.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/joininfo.h"
 #include "optimizer/keys.h"
 #include "optimizer/ordering.h"
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 555fd7d093455f2c830be750b89dadf3023ea319..3b770fd30c6afc85f9b02852ac6055c36579bff2 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.35 1999/02/02 17:46:15 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.36 1999/02/03 20:15:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@
 
 #include "optimizer/internal.h"
 #include "optimizer/clauses.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/keys.h"
 #include "optimizer/planmain.h"
 #include "optimizer/tlist.h"
diff --git a/src/backend/optimizer/util/clauseinfo.c b/src/backend/optimizer/util/clauseinfo.c
index 207074bb1a024121465e87daedd39ee571ed9b17..915aa5b62ebec4e5c37b23f1e4a9cb149bdf305f 100644
--- a/src/backend/optimizer/util/clauseinfo.c
+++ b/src/backend/optimizer/util/clauseinfo.c
@@ -1,13 +1,13 @@
 /*-------------------------------------------------------------------------
  *
- * clauseinfo.c--
- *	  ClauseInfo node manipulation routines.
+ * restrictinfo.c--
+ *	  RestrictInfo node manipulation routines.
  *
  * Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/clauseinfo.c,v 1.9 1998/09/01 04:30:00 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/clauseinfo.c,v 1.10 1999/02/03 20:15:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,21 +18,21 @@
 
 #include "optimizer/internal.h"
 #include "optimizer/clauses.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 
 /*
  * valid-or-clause--
  *
- * Returns t iff the clauseinfo node contains a 'normal' 'or' clause.
+ * Returns t iff the restrictinfo node contains a 'normal' 'or' clause.
  *
  */
 bool
-valid_or_clause(ClauseInfo * clauseinfo)
+valid_or_clause(RestrictInfo * restrictinfo)
 {
-	if (clauseinfo != NULL &&
-		!single_node((Node *) clauseinfo->clause) &&
-		!clauseinfo->notclause &&
-		or_clause((Node *) clauseinfo->clause))
+	if (restrictinfo != NULL &&
+		!single_node((Node *) restrictinfo->clause) &&
+		!restrictinfo->notclause &&
+		or_clause((Node *) restrictinfo->clause))
 		return true;
 	else
 		return false;
@@ -41,19 +41,19 @@ valid_or_clause(ClauseInfo * clauseinfo)
 /*
  * get-actual-clauses--
  *
- * Returns a list containing the clauses from 'clauseinfo-list'.
+ * Returns a list containing the clauses from 'restrictinfo-list'.
  *
  */
 List *
-get_actual_clauses(List *clauseinfo_list)
+get_actual_clauses(List *restrictinfo_list)
 {
 	List	   *temp = NIL;
 	List	   *result = NIL;
-	ClauseInfo *clause = (ClauseInfo *) NULL;
+	RestrictInfo *clause = (RestrictInfo *) NULL;
 
-	foreach(temp, clauseinfo_list)
+	foreach(temp, restrictinfo_list)
 	{
-		clause = (ClauseInfo *) lfirst(temp);
+		clause = (RestrictInfo *) lfirst(temp);
 		result = lappend(result, clause->clause);
 	}
 	return result;
@@ -69,7 +69,7 @@ get_actual_clauses(List *clauseinfo_list)
 
 /*
  * get_relattvals--
- *	  For each member of  a list of clauseinfo nodes to be used with an
+ *	  For each member of  a list of restrictinfo nodes to be used with an
  *	  index, create a vectori-long specifying:
  *				the attnos,
  *				the values of the clause constants, and
@@ -79,13 +79,13 @@ get_actual_clauses(List *clauseinfo_list)
  *	  flag indicating whether the constant is on the left or right should
  *	  always be *SELEC-CONSTANT-RIGHT*.
  *
- * 'clauseinfo-list' is a list of clauseinfo nodes
+ * 'restrictinfo-list' is a list of restrictinfo nodes
  *
  * Returns a list of vectori-longs.
  *
  */
 void
-get_relattvals(List *clauseinfo_list,
+get_relattvals(List *restrictinfo_list,
 			   List **attnos,
 			   List **values,
 			   List **flags)
@@ -93,17 +93,17 @@ get_relattvals(List *clauseinfo_list,
 	List	   *result1 = NIL;
 	List	   *result2 = NIL;
 	List	   *result3 = NIL;
-	ClauseInfo *temp = (ClauseInfo *) NULL;
+	RestrictInfo *temp = (RestrictInfo *) NULL;
 	List	   *i = NIL;
 
-	foreach(i, clauseinfo_list)
+	foreach(i, restrictinfo_list)
 	{
 		int			dummy;
 		AttrNumber	attno;
 		Datum		constval;
 		int			flag;
 
-		temp = (ClauseInfo *) lfirst(i);
+		temp = (RestrictInfo *) lfirst(i);
 		get_relattval((Node *) temp->clause, &dummy, &attno, &constval, &flag);
 		result1 = lappendi(result1, (int) attno);
 		result2 = lappendi(result2, constval);
@@ -118,7 +118,7 @@ get_relattvals(List *clauseinfo_list,
 
 /*
  * get_joinvars --
- *	  Given a list of join clauseinfo nodes to be used with the index
+ *	  Given a list of join restrictinfo nodes to be used with the index
  *	  of an inner join relation, return three lists consisting of:
  *				the attributes corresponding to the inner join relation
  *				the value of the inner var clause (always "")
@@ -126,13 +126,13 @@ get_relattvals(List *clauseinfo_list,
  *						the operator.
  *
  * 'relid' is the inner join relation
- * 'clauseinfo-list' is a list of qualification clauses to be used with
+ * 'restrictinfo-list' is a list of qualification clauses to be used with
  *		'rel'
  *
  */
 void
 get_joinvars(Oid relid,
-			 List *clauseinfo_list,
+			 List *restrictinfo_list,
 			 List **attnos,
 			 List **values,
 			 List **flags)
@@ -142,10 +142,10 @@ get_joinvars(Oid relid,
 	List	   *result3 = NIL;
 	List	   *temp;
 
-	foreach(temp, clauseinfo_list)
+	foreach(temp, restrictinfo_list)
 	{
-		ClauseInfo *clauseinfo = lfirst(temp);
-		Expr	   *clause = clauseinfo->clause;
+		RestrictInfo *restrictinfo = lfirst(temp);
+		Expr	   *clause = restrictinfo->clause;
 
 		if (IsA(get_leftop(clause), Var) &&
 			(relid == (get_leftop(clause))->varno))
@@ -170,19 +170,19 @@ get_joinvars(Oid relid,
 /*
  * get_opnos--
  *	  Create and return a list containing the clause operators of each member
- *	  of a list of clauseinfo nodes to be used with an index.
+ *	  of a list of restrictinfo nodes to be used with an index.
  *
  */
 List *
-get_opnos(List *clauseinfo_list)
+get_opnos(List *restrictinfo_list)
 {
-	ClauseInfo *temp = (ClauseInfo *) NULL;
+	RestrictInfo *temp = (RestrictInfo *) NULL;
 	List	   *result = NIL;
 	List	   *i = NIL;
 
-	foreach(i, clauseinfo_list)
+	foreach(i, restrictinfo_list)
 	{
-		temp = (ClauseInfo *) lfirst(i);
+		temp = (RestrictInfo *) lfirst(i);
 		result =
 			lappendi(result,
 					 (((Oper *) temp->clause->oper)->opno));
diff --git a/src/backend/optimizer/util/indexnode.c b/src/backend/optimizer/util/indexnode.c
index d83b353cc534f36a2d46c240c46a41d53906fced..2fdb8760d450d3ae49e79b40354f04716ea72792 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.10 1998/09/01 04:30:04 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.11 1999/02/03 20:15:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -81,7 +81,7 @@ find_secondary_index(Query *root, Oid relid)
 		indexnode->unorderedpath = NULL;
 		indexnode->cheapestpath = NULL;
 		indexnode->pruneable = true;
-		indexnode->clauseinfo = NIL;
+		indexnode->restrictinfo = NIL;
 		indexnode->joininfo = NIL;
 		indexnode->innerjoin = NIL;
 
diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c
index 50e3065f8252fa9265ef6b263c55a6ff61daf0ce..592a9e01b3105bbaef27122189ddd43e787cfd89 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.12 1998/09/01 04:30:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.13 1999/02/03 20:15:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -71,7 +71,7 @@ find_joininfo_node(RelOptInfo * this_rel, List *join_relids)
 	{
 		joininfo = makeNode(JoinInfo);
 		joininfo->otherrels = join_relids;
-		joininfo->jinfoclauseinfo = NIL;
+		joininfo->jinfo_restrictinfo = NIL;
 		joininfo->mergejoinable = false;
 		joininfo->hashjoinable = false;
 		joininfo->inactive = false;
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index d8ac6247a1b95404c1d460775537bcf6a7e437a5..1c81550a941e9356b0264906b7364c8c36bbe5c7 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.14 1999/02/02 23:53:25 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.15 1999/02/03 20:15:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,7 +20,7 @@
 
 #include "optimizer/internal.h"
 #include "optimizer/pathnode.h"
-#include "optimizer/clauseinfo.h"
+#include "optimizer/restrictinfo.h"
 #include "optimizer/plancat.h"
 #include "optimizer/cost.h"
 #include "optimizer/keys.h"
@@ -209,11 +209,11 @@ create_seqscan_path(RelOptInfo * rel)
 	pathnode->keys = NIL;
 
 	/*
-	 * copy clauseinfo list into path for expensive function processing --
+	 * copy restrictinfo list into path for expensive function processing --
 	 * JMH, 7/7/92
 	 */
-	pathnode->locclauseinfo =
-		(List *) copyObject((Node *) rel->clauseinfo);
+	pathnode->loc_restrictinfo =
+		(List *) copyObject((Node *) rel->restrictinfo);
 
 	if (rel->relids != NULL)
 		relid = lfirsti(rel->relids);
@@ -263,11 +263,11 @@ create_index_path(Query *root,
 	pathnode->indexqual = NIL;
 
 	/*
-	 * copy clauseinfo list into path for expensive function processing --
+	 * copy restrictinfo list into path for expensive function processing --
 	 * JMH, 7/7/92
 	 */
-	pathnode->path.locclauseinfo =
-		set_difference((List *) copyObject((Node *) rel->clauseinfo),
+	pathnode->path.loc_restrictinfo =
+		set_difference((List *) copyObject((Node *) rel->restrictinfo),
 					   (List *) restriction_clauses);
 
 	/*
@@ -410,11 +410,11 @@ create_nestloop_path(RelOptInfo * joinrel,
 	pathnode->path.parent = joinrel;
 	pathnode->outerjoinpath = outer_path;
 	pathnode->innerjoinpath = inner_path;
-	pathnode->pathclauseinfo = joinrel->clauseinfo;
+	pathnode->pathinfo = joinrel->restrictinfo;
 	pathnode->path.keys = keys;
 	pathnode->path.joinid = NIL;
 	pathnode->path.outerjoincost = (Cost) 0.0;
-	pathnode->path.locclauseinfo = NIL;
+	pathnode->path.loc_restrictinfo = NIL;
 
 	if (keys)
 	{
@@ -492,12 +492,12 @@ create_mergejoin_path(RelOptInfo * joinrel,
 	pathnode->jpath.path.parent = joinrel;
 	pathnode->jpath.outerjoinpath = outer_path;
 	pathnode->jpath.innerjoinpath = inner_path;
-	pathnode->jpath.pathclauseinfo = joinrel->clauseinfo;
+	pathnode->jpath.pathinfo = joinrel->restrictinfo;
 	pathnode->jpath.path.keys = keys;
 	pathnode->jpath.path.p_ordering.ordtype = MERGE_ORDER;
 	pathnode->jpath.path.p_ordering.ord.merge = order;
 	pathnode->path_mergeclauses = mergeclauses;
-	pathnode->jpath.path.locclauseinfo = NIL;
+	pathnode->jpath.path.loc_restrictinfo = NIL;
 	pathnode->outersortkeys = outersortkeys;
 	pathnode->innersortkeys = innersortkeys;
 	pathnode->jpath.path.path_cost =
@@ -558,8 +558,8 @@ create_hashjoin_path(RelOptInfo * joinrel,
 	pathnode->jpath.path.parent = joinrel;
 	pathnode->jpath.outerjoinpath = outer_path;
 	pathnode->jpath.innerjoinpath = inner_path;
-	pathnode->jpath.pathclauseinfo = joinrel->clauseinfo;
-	pathnode->jpath.path.locclauseinfo = NIL;
+	pathnode->jpath.pathinfo = joinrel->restrictinfo;
+	pathnode->jpath.path.loc_restrictinfo = NIL;
 	pathnode->jpath.path.keys = keys;
 	pathnode->jpath.path.p_ordering.ordtype = SORTOP_ORDER;
 	pathnode->jpath.path.p_ordering.ord.sortop = NULL;
diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index 52bcd059dbab9627872db52e978dc34054d94f1b..0f1d36b6382d335a7ad6f5482043b40997ba7c92 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.9 1998/09/01 04:30:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.10 1999/02/03 20:15:43 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -51,7 +51,7 @@ get_base_rel(Query *root, int relid)
 		rel->classlist = NULL;
 		rel->ordering = NULL;
 		rel->relam = InvalidOid;
-		rel->clauseinfo = NIL;
+		rel->restrictinfo = NIL;
 		rel->joininfo = NIL;
 		rel->innerjoin = NIL;
 		rel->superrels = NIL;
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index db7b402da47292afe9eafd0306ec303c1d32fa0d..88eea4c485a378c49222a8dab710c618fd290ea1 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.35 1999/01/24 00:28:33 momjian Exp $
+ * $Id: nodes.h,v 1.36 1999/02/03 20:15:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -79,7 +79,7 @@ typedef enum NodeTag
 	T_OrderKey,
 	T_JoinKey,
 	T_MergeOrder,
-	T_ClauseInfo,
+	T_RestrictInfo,
 	T_JoinMethod,
 	T_HInfo,
 	T_MInfo,
diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h
index 0f350e0f116e3d13eb80fede427a157392d43672..f1a8fdfc3e21f849254a74b901675ac2b6072ab6 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.11 1998/09/01 04:36:51 momjian Exp $
+ * $Id: relation.h,v 1.12 1999/02/03 20:15:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,7 +60,7 @@ typedef List *Relid;
  *	 * The presence of the remaining fields depends on the restrictions
  *		and joins which the relation participates in:
  *
- *		clauseinfo - List of ClauseInfo nodes, containing info about each
+ *		restrictinfo - List of RestrictInfo nodes, containing info about each
  *					 qualification clause in which this relation participates
  *		joininfo  - List of JoinInfo nodes, containing info about each join
  *					clause in which this relation participates
@@ -102,7 +102,7 @@ typedef struct RelOptInfo
 
 	/* used by various scans and joins: */
 	Oid		   *ordering;		/* OID of operators in sort order */
-	List	   *clauseinfo;		/* restriction clauses */
+	List	   *restrictinfo;		/* restriction clauses */
 	List	   *joininfo;		/* join clauses */
 	List	   *innerjoin;
 	List	   *superrels;
@@ -149,7 +149,7 @@ typedef struct Path
 	List	   *keys;
 	Cost		outerjoincost;
 	Relid		joinid;
-	List	   *locclauseinfo;
+	List	   *loc_restrictinfo;
 } Path;
 
 typedef struct IndexPath
@@ -164,7 +164,7 @@ typedef struct IndexPath
 typedef struct JoinPath
 {
 	Path		path;
-	List	   *pathclauseinfo;
+	List	   *pathinfo;
 	Path	   *outerjoinpath;
 	Path	   *innerjoinpath;
 } JoinPath;
@@ -207,7 +207,7 @@ typedef struct JoinKey
  * clause info
  *******/
 
-typedef struct ClauseInfo
+typedef struct RestrictInfo
 {
 	NodeTag		type;
 	Expr	   *clause;			/* should be an OP clause */
@@ -221,7 +221,7 @@ typedef struct ClauseInfo
 	/* hashjoin only */
 	Oid			hashjoinoperator;
 	Relid		cinfojoinid;
-}			ClauseInfo;
+} RestrictInfo;
 
 typedef struct JoinMethod
 {
@@ -246,7 +246,7 @@ typedef struct JoinInfo
 {
 	NodeTag		type;
 	List	   *otherrels;
-	List	   *jinfoclauseinfo;
+	List	   *jinfo_restrictinfo;
 	bool		mergejoinable;
 	bool		hashjoinable;
 	bool		inactive;
@@ -271,7 +271,7 @@ typedef struct Iter
 **	   pathptr -- pointer to the current path node
 **		 cinfo -- if NULL, this stream node referes to the path node.
 **				  Otherwise this is a pointer to the current clause.
-**	clausetype -- whether cinfo is in locclauseinfo or pathclauseinfo in the
+**	clausetype -- whether cinfo is in loc_restrictinfo or pathinfo in the
 **				  path node
 **	  upstream -- linked list pointer upwards
 **	downstream -- ditto, downwards
@@ -285,7 +285,7 @@ typedef struct Stream
 {
 	NodeTag		type;
 	Path	   *pathptr;
-	ClauseInfo *cinfo;
+	RestrictInfo *cinfo;
 	int		   *clausetype;
 	struct Stream *upstream;
 	struct Stream *downstream;
diff --git a/src/include/optimizer/clauseinfo.h b/src/include/optimizer/clauseinfo.h
deleted file mode 100644
index 24a3ec5107012a86e2324d604e39a1e97c2e1aa3..0000000000000000000000000000000000000000
--- a/src/include/optimizer/clauseinfo.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * clauseinfo.h--
- *	  prototypes for clauseinfo.c.
- *
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * $Id: clauseinfo.h,v 1.9 1998/09/01 04:36:52 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#ifndef CLAUSEINFO_H
-#define CLAUSEINFO_H
-
-#include "nodes/pg_list.h"
-#include "nodes/relation.h"
-
-extern bool valid_or_clause(ClauseInfo * clauseinfo);
-extern List *get_actual_clauses(List *clauseinfo_list);
-extern void get_relattvals(List *clauseinfo_list, List **attnos,
-			   List **values, List **flags);
-extern void get_joinvars(Oid relid, List *clauseinfo_list,
-			 List **attnos, List **values, List **flags);
-extern List *get_opnos(List *clauseinfo_list);
-
-#endif	 /* CLAUSEINFO_H */
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index 4342149e9b6100143a93b333d08b1d43b57394b9..7d6035c6d4451ce2aeb9a4bb210b466580d83c5d 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.11 1998/09/01 04:36:54 momjian Exp $
+ * $Id: cost.h,v 1.12 1999/02/03 20:15:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,10 +52,10 @@ extern int	page_size(int tuples, int width);
  * prototypes for fuctions in clausesel.h--
  *	  routines to compute clause selectivities
  */
-extern void set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity);
-extern Cost product_selec(List *clauseinfo_list);
+extern void set_clause_selectivities(List *restrictinfo_list, Cost new_selectivity);
+extern Cost product_selec(List *restrictinfo_list);
 extern void set_rest_relselec(Query *root, List *rel_list);
-extern void set_rest_selec(Query *root, List *clauseinfo_list);
+extern void set_rest_selec(Query *root, List *restrictinfo_list);
 extern Cost compute_clause_selec(Query *root,
 					 Node *clause, List *or_selectivities);
 
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index a570d17db57cf6d13d99881a966ae56158797940..99f2edc488dc57b75dfbf052ab578da92137f315 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.10 1998/09/01 04:37:14 momjian Exp $
+ * $Id: paths.h,v 1.11 1999/02/03 20:15:53 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, RelOptInfo * rel, List *indices,
-				 List *clauseinfo_list,
+				 List *restrictinfo_list,
 				 List *joininfo_list);
 
 /*
@@ -47,7 +47,7 @@ extern List *create_or_index_paths(Query *root, RelOptInfo * rel, List *clauses)
  * hashutils.h
  *	  routines to deal with hash keys and clauses
  */
-extern List *group_clauses_by_hashop(List *clauseinfo_list,
+extern List *group_clauses_by_hashop(List *restrictinfo_list,
 						int inner_relid);
 
 /*
@@ -68,7 +68,7 @@ extern List *new_join_pathkeys(List *outer_pathkeys,
  * mergeutils.h
  *	  routines to deal with merge keys and clauses
  */
-extern List *group_clauses_by_order(List *clauseinfo_list,
+extern List *group_clauses_by_order(List *restrictinfo_list,
 					   int inner_relid);
 extern MInfo *match_order_mergeinfo(PathOrder *ordering,
 					  List *mergeinfo_list);
diff --git a/src/include/optimizer/restrictinfo.h b/src/include/optimizer/restrictinfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd30b8163e2d4dbd9abe71a618906d4f7e9924ae
--- /dev/null
+++ b/src/include/optimizer/restrictinfo.h
@@ -0,0 +1,27 @@
+/*-------------------------------------------------------------------------
+ *
+ * restrictinfo.h--
+ *	  prototypes for restrictinfo.c.
+ *
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: restrictinfo.h,v 1.1 1999/02/03 20:15:53 momjian Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef RESTRICTINFO_H
+#define RESTRICTINFO_H
+
+#include "nodes/pg_list.h"
+#include "nodes/relation.h"
+
+extern bool valid_or_clause(RestrictInfo * restrictinfo);
+extern List *get_actual_clauses(List *restrictinfo_list);
+extern void get_relattvals(List *restrictinfo_list, List **attnos,
+			   List **values, List **flags);
+extern void get_joinvars(Oid relid, List *restrictinfo_list,
+			 List **attnos, List **values, List **flags);
+extern List *get_opnos(List *restrictinfo_list);
+
+#endif	 /* RESTRICTINFO_H */
diff --git a/src/include/optimizer/xfunc.h b/src/include/optimizer/xfunc.h
index 8a10ab80a54ae5d77613dcff08937bb191c53ee5..75bb58caecf4c6ff183fcf107760f95688d549d0 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.10 1998/09/01 04:37:24 momjian Exp $
+ * $Id: xfunc.h,v 1.11 1999/02/03 20:15:53 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -51,8 +51,8 @@ extern int	XfuncMode;			/* defined in tcop/postgres.c */
 /* function prototypes from planner/path/xfunc.c */
 extern void xfunc_trypullup(RelOptInfo * rel);
 extern int xfunc_shouldpull(Path *childpath, JoinPath *parentpath,
-				 int whichchild, ClauseInfo * maxcinfopt);
-extern ClauseInfo *xfunc_pullup(Path *childpath, JoinPath *parentpath, ClauseInfo * cinfo,
+				 int whichchild, RestrictInfo * maxcinfopt);
+extern RestrictInfo *xfunc_pullup(Path *childpath, JoinPath *parentpath, RestrictInfo * cinfo,
 			 int whichchild, int clausetype);
 extern Cost xfunc_rank(Expr *clause);
 extern Cost xfunc_expense(Query *queryInfo, Expr *clause);