Commit 8d9237d4 authored by Bruce Momjian's avatar Bruce Momjian

Optimizer rename ClauseInfo -> RestrictInfo. Update optimizer README.

parent f3a6b38e
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -20,6 +20,7 @@
#include <access/heapam.h> #include <access/heapam.h>
#include <utils/builtins.h> #include <utils/builtins.h>
#include <utils/syscache.h> #include <utils/syscache.h>
#include <catalog/heap.h>
#include <catalog/index.h> #include <catalog/index.h>
#include <catalog/pg_index.h> #include <catalog/pg_index.h>
#include <catalog/pg_proc.h> #include <catalog/pg_proc.h>
......
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
* *
* copyfuncs.c-- * copyfuncs.c--
* Copy functions for Postgres tree nodes. * Copy functions for Postgres tree nodes.
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -1064,7 +1064,7 @@ _copyRelOptInfo(RelOptInfo * from)
newnode->ordering[len] = 0; newnode->ordering[len] = 0;
} }
Node_Copy(from, newnode, clauseinfo); Node_Copy(from, newnode, restrictinfo);
Node_Copy(from, newnode, joininfo); Node_Copy(from, newnode, joininfo);
Node_Copy(from, newnode, innerjoin); Node_Copy(from, newnode, innerjoin);
Node_Copy(from, newnode, superrels); Node_Copy(from, newnode, superrels);
...@@ -1119,7 +1119,7 @@ CopyPathFields(Path *from, Path *newnode) ...@@ -1119,7 +1119,7 @@ CopyPathFields(Path *from, Path *newnode)
newnode->outerjoincost = from->outerjoincost; newnode->outerjoincost = from->outerjoincost;
newnode->joinid = listCopy(from->joinid); newnode->joinid = listCopy(from->joinid);
Node_Copy(from, newnode, locclauseinfo); Node_Copy(from, newnode, loc_restrictinfo);
} }
/* ---------------- /* ----------------
...@@ -1184,7 +1184,7 @@ _copyIndexPath(IndexPath *from) ...@@ -1184,7 +1184,7 @@ _copyIndexPath(IndexPath *from)
static void static void
CopyJoinPathFields(JoinPath *from, JoinPath *newnode) CopyJoinPathFields(JoinPath *from, JoinPath *newnode)
{ {
Node_Copy(from, newnode, pathclauseinfo); Node_Copy(from, newnode, pathinfo);
Node_Copy(from, newnode, outerjoinpath); Node_Copy(from, newnode, outerjoinpath);
Node_Copy(from, newnode, innerjoinpath); Node_Copy(from, newnode, innerjoinpath);
} }
...@@ -1324,13 +1324,13 @@ _copyMergeOrder(MergeOrder *from) ...@@ -1324,13 +1324,13 @@ _copyMergeOrder(MergeOrder *from)
} }
/* ---------------- /* ----------------
* _copyClauseInfo * _copyRestrictInfo
* ---------------- * ----------------
*/ */
static ClauseInfo * static RestrictInfo *
_copyClauseInfo(ClauseInfo * from) _copyRestrictInfo(RestrictInfo * from)
{ {
ClauseInfo *newnode = makeNode(ClauseInfo); RestrictInfo *newnode = makeNode(RestrictInfo);
/* ---------------- /* ----------------
* copy remainder of node * copy remainder of node
...@@ -1430,7 +1430,7 @@ _copyJoinInfo(JoinInfo * from) ...@@ -1430,7 +1430,7 @@ _copyJoinInfo(JoinInfo * from)
* ---------------- * ----------------
*/ */
newnode->otherrels = listCopy(from->otherrels); newnode->otherrels = listCopy(from->otherrels);
Node_Copy(from, newnode, jinfoclauseinfo); Node_Copy(from, newnode, jinfo_restrictinfo);
newnode->mergejoinable = from->mergejoinable; newnode->mergejoinable = from->mergejoinable;
newnode->hashjoinable = from->hashjoinable; newnode->hashjoinable = from->hashjoinable;
...@@ -1792,8 +1792,8 @@ copyObject(void *from) ...@@ -1792,8 +1792,8 @@ copyObject(void *from)
case T_MergeOrder: case T_MergeOrder:
retval = _copyMergeOrder(from); retval = _copyMergeOrder(from);
break; break;
case T_ClauseInfo: case T_RestrictInfo:
retval = _copyClauseInfo(from); retval = _copyRestrictInfo(from);
break; break;
case T_JoinMethod: case T_JoinMethod:
retval = _copyJoinMethod(from); retval = _copyJoinMethod(from);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -278,13 +278,13 @@ _equalFunc(Func *a, Func *b)
} }
/* /*
* ClauseInfo is a subclass of Node. * RestrictInfo is a subclass of Node.
*/ */
static bool static bool
_equalClauseInfo(ClauseInfo * a, ClauseInfo * b) _equalRestrictInfo(RestrictInfo * a, RestrictInfo * b)
{ {
Assert(IsA(a, ClauseInfo)); Assert(IsA(a, RestrictInfo));
Assert(IsA(b, ClauseInfo)); Assert(IsA(b, RestrictInfo));
if (!equal(a->clause, b->clause)) if (!equal(a->clause, b->clause))
return false; return false;
...@@ -298,8 +298,7 @@ _equalClauseInfo(ClauseInfo * a, ClauseInfo * b) ...@@ -298,8 +298,7 @@ _equalClauseInfo(ClauseInfo * a, ClauseInfo * b)
#endif #endif
if (a->hashjoinoperator != b->hashjoinoperator) if (a->hashjoinoperator != b->hashjoinoperator)
return false; return false;
return (equal((a->indexids), return equal(a->indexids, b->indexids);
(b->indexids)));
} }
/* /*
...@@ -311,8 +310,7 @@ _equalRelOptInfo(RelOptInfo * a, RelOptInfo * b) ...@@ -311,8 +310,7 @@ _equalRelOptInfo(RelOptInfo * a, RelOptInfo * b)
Assert(IsA(a, RelOptInfo)); Assert(IsA(a, RelOptInfo));
Assert(IsA(b, RelOptInfo)); Assert(IsA(b, RelOptInfo));
return (equal((a->relids), return equal(a->relids, b->relids);
(b->relids)));
} }
static bool static bool
...@@ -321,11 +319,9 @@ _equalJoinMethod(JoinMethod *a, JoinMethod *b) ...@@ -321,11 +319,9 @@ _equalJoinMethod(JoinMethod *a, JoinMethod *b)
Assert(IsA(a, JoinMethod)); Assert(IsA(a, JoinMethod));
Assert(IsA(b, JoinMethod)); Assert(IsA(b, JoinMethod));
if (!equal((a->jmkeys), if (!equal(a->jmkeys, b->jmkeys))
(b->jmkeys)))
return false; return false;
if (!equal((a->clauses), if (!equal(a->clauses, b->clauses))
(b->clauses)))
return false; return false;
return true; return true;
} }
...@@ -368,19 +364,16 @@ _equalPath(Path *a, Path *b) ...@@ -368,19 +364,16 @@ _equalPath(Path *a, Path *b)
} }
else else
{ {
if (!equal((a->p_ordering.ord.merge), if (!equal(a->p_ordering.ord.merge, b->p_ordering.ord.merge))
(b->p_ordering.ord.merge)))
return false; return false;
} }
if (!equal((a->keys), if (!equal(a->keys, b->keys))
(b->keys)))
return false; return false;
/* /*
* if (a->outerjoincost != b->outerjoincost) return(false); * if (a->outerjoincost != b->outerjoincost) return(false);
*/ */
if (!equali((a->joinid), if (!equali(a->joinid, b->joinid))
(b->joinid)))
return false; return false;
return true; return true;
} }
...@@ -390,9 +383,9 @@ _equalIndexPath(IndexPath *a, IndexPath *b) ...@@ -390,9 +383,9 @@ _equalIndexPath(IndexPath *a, IndexPath *b)
{ {
if (!_equalPath((Path *) a, (Path *) b)) if (!_equalPath((Path *) a, (Path *) b))
return false; return false;
if (!equali((a->indexid), (b->indexid))) if (!equali(a->indexid, b->indexid))
return false; return false;
if (!equal((a->indexqual), (b->indexqual))) if (!equal(a->indexqual, b->indexqual))
return false; return false;
return true; return true;
} }
...@@ -405,11 +398,11 @@ _equalJoinPath(JoinPath *a, JoinPath *b) ...@@ -405,11 +398,11 @@ _equalJoinPath(JoinPath *a, JoinPath *b)
if (!_equalPath((Path *) a, (Path *) b)) if (!_equalPath((Path *) a, (Path *) b))
return false; return false;
if (!equal((a->pathclauseinfo), (b->pathclauseinfo))) if (!equal(a->pathinfo, b->pathinfo))
return false; return false;
if (!equal((a->outerjoinpath), (b->outerjoinpath))) if (!equal(a->outerjoinpath, b->outerjoinpath))
return false; return false;
if (!equal((a->innerjoinpath), (b->innerjoinpath))) if (!equal(a->innerjoinpath, b->innerjoinpath))
return false; return false;
return true; return true;
} }
...@@ -454,9 +447,9 @@ _equalJoinKey(JoinKey *a, JoinKey *b) ...@@ -454,9 +447,9 @@ _equalJoinKey(JoinKey *a, JoinKey *b)
Assert(IsA(a, JoinKey)); Assert(IsA(a, JoinKey));
Assert(IsA(b, JoinKey)); Assert(IsA(b, JoinKey));
if (!equal((a->outer), (b->outer))) if (!equal(a->outer, b->outer))
return false; return false;
if (!equal((a->inner), (b->inner))) if (!equal(a->inner, b->inner))
return false; return false;
return true; return true;
} }
...@@ -506,13 +499,13 @@ _equalIndexScan(IndexScan *a, IndexScan *b) ...@@ -506,13 +499,13 @@ _equalIndexScan(IndexScan *a, IndexScan *b)
* if(a->scan.plan.cost != b->scan.plan.cost) return(false); * 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; return false;
if (a->scan.scanrelid != b->scan.scanrelid) if (a->scan.scanrelid != b->scan.scanrelid)
return false; return false;
if (!equali((a->indxid), (b->indxid))) if (!equali(a->indxid, b->indxid))
return false; return false;
return true; return true;
} }
...@@ -523,7 +516,7 @@ _equalSubPlan(SubPlan *a, SubPlan *b) ...@@ -523,7 +516,7 @@ _equalSubPlan(SubPlan *a, SubPlan *b)
if (a->plan_id != b->plan_id) if (a->plan_id != b->plan_id)
return false; return false;
if (!equal((a->sublink->oper), (b->sublink->oper))) if (!equal(a->sublink->oper, b->sublink->oper))
return false; return false;
return true; return true;
...@@ -534,9 +527,9 @@ _equalJoinInfo(JoinInfo * a, JoinInfo * b) ...@@ -534,9 +527,9 @@ _equalJoinInfo(JoinInfo * a, JoinInfo * b)
{ {
Assert(IsA(a, JoinInfo)); Assert(IsA(a, JoinInfo));
Assert(IsA(b, JoinInfo)); Assert(IsA(b, JoinInfo));
if (!equal((a->otherrels), (b->otherrels))) if (!equal(a->otherrels, b->otherrels))
return false; return false;
if (!equal((a->jinfoclauseinfo), (b->jinfoclauseinfo))) if (!equal(a->jinfo_restrictinfo, b->jinfo_restrictinfo))
return false; return false;
if (a->mergejoinable != b->mergejoinable) if (a->mergejoinable != b->mergejoinable)
return false; return false;
...@@ -673,8 +666,8 @@ equal(void *a, void *b) ...@@ -673,8 +666,8 @@ equal(void *a, void *b)
case T_Func: case T_Func:
retval = _equalFunc(a, b); retval = _equalFunc(a, b);
break; break;
case T_ClauseInfo: case T_RestrictInfo:
retval = _equalClauseInfo(a, b); retval = _equalRestrictInfo(a, b);
break; break;
case T_RelOptInfo: case T_RelOptInfo:
retval = _equalRelOptInfo(a, b); retval = _equalRelOptInfo(a, b);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* Every (plan) node in POSTGRES has an associated "out" routine which * Every (plan) node in POSTGRES has an associated "out" routine which
...@@ -879,11 +879,11 @@ _outRelOptInfo(StringInfo str, RelOptInfo * node) ...@@ -879,11 +879,11 @@ _outRelOptInfo(StringInfo str, RelOptInfo * node)
*/ */
appendStringInfo(str, 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->unorderedpath,
(int) node->cheapestpath, (int) node->cheapestpath,
node->pruneable ? "true" : "false"); node->pruneable ? "true" : "false");
_outNode(str, node->clauseinfo); _outNode(str, node->restrictinfo);
appendStringInfo(str, " :joininfo "); appendStringInfo(str, " :joininfo ");
_outNode(str, node->joininfo); _outNode(str, node->joininfo);
...@@ -967,8 +967,8 @@ _outJoinPath(StringInfo str, JoinPath *node) ...@@ -967,8 +967,8 @@ _outJoinPath(StringInfo str, JoinPath *node)
node->path.path_cost); node->path.path_cost);
_outNode(str, node->path.keys); _outNode(str, node->path.keys);
appendStringInfo(str, " :pathclauseinfo "); appendStringInfo(str, " :pathinfo ");
_outNode(str, node->pathclauseinfo); _outNode(str, node->pathinfo);
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -995,8 +995,8 @@ _outMergePath(StringInfo str, MergePath *node) ...@@ -995,8 +995,8 @@ _outMergePath(StringInfo str, MergePath *node)
node->jpath.path.path_cost); node->jpath.path.path_cost);
_outNode(str, node->jpath.path.keys); _outNode(str, node->jpath.path.keys);
appendStringInfo(str, " :pathclauseinfo "); appendStringInfo(str, " :pathinfo ");
_outNode(str, node->jpath.pathclauseinfo); _outNode(str, node->jpath.pathinfo);
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -1032,8 +1032,8 @@ _outHashPath(StringInfo str, HashPath *node) ...@@ -1032,8 +1032,8 @@ _outHashPath(StringInfo str, HashPath *node)
node->jpath.path.path_cost); node->jpath.path.path_cost);
_outNode(str, node->jpath.path.keys); _outNode(str, node->jpath.path.keys);
appendStringInfo(str, " :pathclauseinfo "); appendStringInfo(str, " :pathinfo ");
_outNode(str, node->jpath.pathclauseinfo); _outNode(str, node->jpath.pathinfo);
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -1102,10 +1102,10 @@ _outMergeOrder(StringInfo str, MergeOrder *node) ...@@ -1102,10 +1102,10 @@ _outMergeOrder(StringInfo str, MergeOrder *node)
} }
/* /*
* ClauseInfo is a subclass of Node. * RestrictInfo is a subclass of Node.
*/ */
static void static void
_outClauseInfo(StringInfo str, ClauseInfo * node) _outRestrictInfo(StringInfo str, RestrictInfo * node)
{ {
appendStringInfo(str, " CINFO :clause "); appendStringInfo(str, " CINFO :clause ");
_outNode(str, node->clause); _outNode(str, node->clause);
...@@ -1158,8 +1158,8 @@ _outJoinInfo(StringInfo str, JoinInfo * node) ...@@ -1158,8 +1158,8 @@ _outJoinInfo(StringInfo str, JoinInfo * node)
appendStringInfo(str, " JINFO :otherrels "); appendStringInfo(str, " JINFO :otherrels ");
_outIntList(str, node->otherrels); _outIntList(str, node->otherrels);
appendStringInfo(str, " :jinfoclauseinfo "); appendStringInfo(str, " :jinfo_restrictinfo ");
_outNode(str, node->jinfoclauseinfo); _outNode(str, node->jinfo_restrictinfo);
appendStringInfo(str, " :mergejoinable %s :hashjoinable %s ", appendStringInfo(str, " :mergejoinable %s :hashjoinable %s ",
node->mergejoinable ? "true" : "false", node->mergejoinable ? "true" : "false",
...@@ -1572,8 +1572,8 @@ _outNode(StringInfo str, void *obj) ...@@ -1572,8 +1572,8 @@ _outNode(StringInfo str, void *obj)
case T_MergeOrder: case T_MergeOrder:
_outMergeOrder(str, obj); _outMergeOrder(str, obj);
break; break;
case T_ClauseInfo: case T_RestrictInfo:
_outClauseInfo(str, obj); _outRestrictInfo(str, obj);
break; break;
case T_JoinMethod: case T_JoinMethod:
_outJoinMethod(str, obj); _outJoinMethod(str, obj);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* Most of the read functions for plan nodes are tested. (In fact, they * Most of the read functions for plan nodes are tested. (In fact, they
...@@ -1348,8 +1348,8 @@ _readRelOptInfo() ...@@ -1348,8 +1348,8 @@ _readRelOptInfo()
sscanf(token, "%x", (unsigned int *) &local_node->cheapestpath); sscanf(token, "%x", (unsigned int *) &local_node->cheapestpath);
token = lsptok(NULL, &length); /* get :clauseinfo */ token = lsptok(NULL, &length); /* get :restrictinfo */
local_node->clauseinfo = nodeRead(true); /* now read it */ local_node->restrictinfo = nodeRead(true); /* now read it */
token = lsptok(NULL, &length); /* get :joininfo */ token = lsptok(NULL, &length); /* get :joininfo */
local_node->joininfo = nodeRead(true); /* now read it */ local_node->joininfo = nodeRead(true); /* now read it */
...@@ -1560,8 +1560,8 @@ _readJoinPath() ...@@ -1560,8 +1560,8 @@ _readJoinPath()
token = lsptok(NULL, &length); /* get :keys */ token = lsptok(NULL, &length); /* get :keys */
local_node->path.keys = nodeRead(true); /* now read it */ local_node->path.keys = nodeRead(true); /* now read it */
token = lsptok(NULL, &length); /* get :pathclauseinfo */ token = lsptok(NULL, &length); /* get :pathinfo */
local_node->pathclauseinfo = nodeRead(true); /* now read it */ local_node->pathinfo = nodeRead(true); /* now read it */
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -1628,8 +1628,8 @@ _readMergePath() ...@@ -1628,8 +1628,8 @@ _readMergePath()
token = lsptok(NULL, &length); /* get :keys */ token = lsptok(NULL, &length); /* get :keys */
local_node->jpath.path.keys = nodeRead(true); /* now read it */ local_node->jpath.path.keys = nodeRead(true); /* now read it */
token = lsptok(NULL, &length); /* get :pathclauseinfo */ token = lsptok(NULL, &length); /* get :pathinfo */
local_node->jpath.pathclauseinfo = nodeRead(true); /* now read it */ local_node->jpath.pathinfo = nodeRead(true); /* now read it */
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -1705,8 +1705,8 @@ _readHashPath() ...@@ -1705,8 +1705,8 @@ _readHashPath()
token = lsptok(NULL, &length); /* get :keys */ token = lsptok(NULL, &length); /* get :keys */
local_node->jpath.path.keys = nodeRead(true); /* now read it */ local_node->jpath.path.keys = nodeRead(true); /* now read it */
token = lsptok(NULL, &length); /* get :pathclauseinfo */ token = lsptok(NULL, &length); /* get :pathinfo */
local_node->jpath.pathclauseinfo = nodeRead(true); /* now read it */ local_node->jpath.pathinfo = nodeRead(true); /* now read it */
/* /*
* Not sure if these are nodes; they're declared as "struct path *". * Not sure if these are nodes; they're declared as "struct path *".
...@@ -1844,19 +1844,19 @@ _readMergeOrder() ...@@ -1844,19 +1844,19 @@ _readMergeOrder()
} }
/* ---------------- /* ----------------
* _readClauseInfo * _readRestrictInfo
* *
* ClauseInfo is a subclass of Node. * RestrictInfo is a subclass of Node.
* ---------------- * ----------------
*/ */
static ClauseInfo * static RestrictInfo *
_readClauseInfo() _readRestrictInfo()
{ {
ClauseInfo *local_node; RestrictInfo *local_node;
char *token; char *token;
int length; int length;
local_node = makeNode(ClauseInfo); local_node = makeNode(RestrictInfo);
token = lsptok(NULL, &length); /* get :clause */ token = lsptok(NULL, &length); /* get :clause */
local_node->clause = nodeRead(true); /* now read it */ local_node->clause = nodeRead(true); /* now read it */
...@@ -1960,8 +1960,8 @@ _readJoinInfo() ...@@ -1960,8 +1960,8 @@ _readJoinInfo()
local_node->otherrels = local_node->otherrels =
toIntList(nodeRead(true)); /* now read it */ toIntList(nodeRead(true)); /* now read it */
token = lsptok(NULL, &length); /* get :jinfoclauseinfo */ token = lsptok(NULL, &length); /* get :jinfo_restrictinfo */
local_node->jinfoclauseinfo = nodeRead(true); /* now read it */ local_node->jinfo_restrictinfo = nodeRead(true); /* now read it */
token = lsptok(NULL, &length); /* get :mergejoinable */ token = lsptok(NULL, &length); /* get :mergejoinable */
...@@ -2096,7 +2096,7 @@ parsePlanString(void) ...@@ -2096,7 +2096,7 @@ parsePlanString(void)
else if (!strncmp(token, "MERGEORDER", length)) else if (!strncmp(token, "MERGEORDER", length))
return_value = _readMergeOrder(); return_value = _readMergeOrder();
else if (!strncmp(token, "CLAUSEINFO", length)) else if (!strncmp(token, "CLAUSEINFO", length))
return_value = _readClauseInfo(); return_value = _readRestrictInfo();
else if (!strncmp(token, "JOINMETHOD", length)) else if (!strncmp(token, "JOINMETHOD", length))
return_value = _readJoinMethod(); return_value = _readJoinMethod();
else if (!strncmp(token, "JOININFO", length)) else if (!strncmp(token, "JOININFO", length))
......
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 generate a plan used by the executor. The /plan directory generates the
plan, the /path generates all possible ways to join the tables, and plan, the /path generates all possible ways to join the tables, and
/prep handles special cases like inheritance. /utils is utility stuff. /prep handles special cases like inheritance. /utils is utility stuff.
...@@ -81,10 +81,20 @@ planner() ...@@ -81,10 +81,20 @@ planner()
remove from the join list the relation we just added to each join remove from the join list the relation we just added to each join
prune_rel_paths() prune_rel_paths()
set cheapest and perhaps remove unordered path, recompute table sizes 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 group(GROUP)
do aggregate do aggregate
put back constants put back constants
re-flatten target list re-flatten target list
make unique(DISTINCT) make unique(DISTINCT)
make sort(ORDER BY) 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
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 ...@@ -290,7 +290,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
joinrel->classlist = NULL; joinrel->classlist = NULL;
joinrel->relam = InvalidOid; joinrel->relam = InvalidOid;
joinrel->ordering = NULL; joinrel->ordering = NULL;
joinrel->clauseinfo = NIL; joinrel->restrictinfo = NIL;
joinrel->joininfo = NULL; joinrel->joininfo = NULL;
joinrel->innerjoin = NIL; joinrel->innerjoin = NIL;
joinrel->superrels = NIL; joinrel->superrels = NIL;
...@@ -302,7 +302,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf ...@@ -302,7 +302,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
if (joininfo) if (joininfo)
{ {
joinrel->clauseinfo = joininfo->jinfoclauseinfo; joinrel->restrictinfo = joininfo->jinfo_restrictinfo;
if (BushyPlanFlag) if (BushyPlanFlag)
joininfo->inactive = true; joininfo->inactive = true;
} }
...@@ -410,22 +410,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids) ...@@ -410,22 +410,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids)
current_joininfo_list); current_joininfo_list);
if (other_joininfo) if (other_joininfo)
{ {
other_joininfo->jinfoclauseinfo = other_joininfo->jinfo_restrictinfo =
(List *) LispUnion(joininfo->jinfoclauseinfo, (List *) LispUnion(joininfo->jinfo_restrictinfo,
other_joininfo->jinfoclauseinfo); other_joininfo->jinfo_restrictinfo);
} }
else else
{ {
other_joininfo = makeNode(JoinInfo); other_joininfo = makeNode(JoinInfo);
other_joininfo->otherrels = other_joininfo->otherrels = joininfo->otherrels;
joininfo->otherrels; other_joininfo->jinfo_restrictinfo = joininfo->jinfo_restrictinfo;
other_joininfo->jinfoclauseinfo = other_joininfo->mergejoinable = joininfo->mergejoinable;
joininfo->jinfoclauseinfo; other_joininfo->hashjoinable = joininfo->hashjoinable;
other_joininfo->mergejoinable =
joininfo->mergejoinable;
other_joininfo->hashjoinable =
joininfo->hashjoinable;
other_joininfo->inactive = false; other_joininfo->inactive = false;
current_joininfo_list = lcons(other_joininfo, current_joininfo_list = lcons(other_joininfo,
...@@ -508,7 +504,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -508,7 +504,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
{ {
JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo);
List *other_rels = joininfo->otherrels; List *other_rels = joininfo->otherrels;
List *clause_info = joininfo->jinfoclauseinfo; List *restrict_info = joininfo->jinfo_restrictinfo;
bool mergejoinable = joininfo->mergejoinable; bool mergejoinable = joininfo->mergejoinable;
bool hashjoinable = joininfo->hashjoinable; bool hashjoinable = joininfo->hashjoinable;
...@@ -540,7 +536,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -540,7 +536,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
new_joininfo = makeNode(JoinInfo); new_joininfo = makeNode(JoinInfo);
new_joininfo->otherrels = joinrel->relids; new_joininfo->otherrels = joinrel->relids;
new_joininfo->jinfoclauseinfo = clause_info; new_joininfo->jinfo_restrictinfo = restrict_info;
new_joininfo->mergejoinable = mergejoinable; new_joininfo->mergejoinable = mergejoinable;
new_joininfo->hashjoinable = hashjoinable; new_joininfo->hashjoinable = hashjoinable;
new_joininfo->inactive = false; new_joininfo->inactive = false;
...@@ -560,16 +556,16 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -560,16 +556,16 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels)
if (other_joininfo) if (other_joininfo)
{ {
other_joininfo->jinfoclauseinfo = other_joininfo->jinfo_restrictinfo =
(List *) LispUnion(clause_info, (List *) LispUnion(restrict_info,
other_joininfo->jinfoclauseinfo); other_joininfo->jinfo_restrictinfo);
} }
else else
{ {
JoinInfo *new_joininfo = makeNode(JoinInfo); JoinInfo *new_joininfo = makeNode(JoinInfo);
new_joininfo->otherrels = new_relids; new_joininfo->otherrels = new_relids;
new_joininfo->jinfoclauseinfo = clause_info; new_joininfo->jinfo_restrictinfo = restrict_info;
new_joininfo->mergejoinable = mergejoinable; new_joininfo->mergejoinable = mergejoinable;
new_joininfo->hashjoinable = hashjoinable; new_joininfo->hashjoinable = hashjoinable;
new_joininfo->inactive = false; new_joininfo->inactive = false;
...@@ -695,8 +691,8 @@ geqo_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inn ...@@ -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 */ temp = (Cost) inner_rel->tuples * (Cost) outer_rel->tuples; /* cartesian product */
if (joinrel->clauseinfo) if (joinrel->restrictinfo)
temp = temp * product_selec(joinrel->clauseinfo); temp = temp * product_selec(joinrel->restrictinfo);
if (temp >= (MAXINT - 1)) if (temp >= (MAXINT - 1))
ntuples = ceil(geqo_log((double) temp, (double) GEQO_LOG_BASE)); ntuples = ceil(geqo_log((double) temp, (double) GEQO_LOG_BASE));
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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) ...@@ -146,7 +146,7 @@ geqo_print_joinclauses(Query *root, List *clauses)
foreach(l, clauses) foreach(l, clauses)
{ {
ClauseInfo *c = lfirst(l); RestrictInfo *c = lfirst(l);
print_expr((Node *) c->clause, root->rtable); print_expr((Node *) c->clause, root->rtable);
if (lnext(l)) if (lnext(l))
...@@ -204,7 +204,7 @@ geqo_print_path(Query *root, Path *path, int indent) ...@@ -204,7 +204,7 @@ geqo_print_path(Query *root, Path *path, int indent)
printf("\t"); printf("\t");
printf(" clauses=("); printf(" clauses=(");
geqo_print_joinclauses(root, geqo_print_joinclauses(root,
((JoinPath *) path)->pathclauseinfo); ((JoinPath *) path)->pathinfo);
printf(")\n"); printf(")\n");
if (nodeTag(path) == T_MergePath) if (nodeTag(path) == T_MergePath)
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -122,10 +122,10 @@ find_rel_paths(Query *root, List *rels)
rel_index_scan_list = find_index_paths(root, rel_index_scan_list = find_index_paths(root,
rel, rel,
find_relation_indices(root, rel), find_relation_indices(root, rel),
rel->clauseinfo, rel->restrictinfo,
rel->joininfo); 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, rel->pathlist = add_pathlist(rel,
sequential_scan_list, sequential_scan_list,
...@@ -145,7 +145,7 @@ find_rel_paths(Query *root, List *rels) ...@@ -145,7 +145,7 @@ find_rel_paths(Query *root, List *rels)
* if there is a qualification of sequential scan the selec. value * if there is a qualification of sequential scan the selec. value
* is not set -- so set it explicitly -- Sunita * 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->size = compute_rel_size(rel);
rel->width = compute_rel_width(rel); rel->width = compute_rel_width(rel);
} }
...@@ -290,7 +290,7 @@ print_joinclauses(Query *root, List *clauses) ...@@ -290,7 +290,7 @@ print_joinclauses(Query *root, List *clauses)
foreach(l, clauses) foreach(l, clauses)
{ {
ClauseInfo *c = lfirst(l); RestrictInfo *c = lfirst(l);
print_expr((Node *) c->clause, root->rtable); print_expr((Node *) c->clause, root->rtable);
if (lnext(l)) if (lnext(l))
...@@ -347,8 +347,7 @@ print_path(Query *root, Path *path, int indent) ...@@ -347,8 +347,7 @@ print_path(Query *root, Path *path, int indent)
for (i = 0; i < indent + 1; i++) for (i = 0; i < indent + 1; i++)
printf("\t"); printf("\t");
printf(" clauses=("); printf(" clauses=(");
print_joinclauses(root, print_joinclauses(root, ((JoinPath *) path)->pathinfo);
((JoinPath *) path)->pathclauseinfo);
printf(")\n"); printf(")\n");
if (nodeTag(path) == T_MergePath) if (nodeTag(path) == T_MergePath)
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -19,7 +19,7 @@
#include "nodes/primnodes.h" #include "nodes/primnodes.h"
#include "nodes/relation.h" #include "nodes/relation.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/cost.h" #include "optimizer/cost.h"
#include "optimizer/internal.h" #include "optimizer/internal.h"
#include "optimizer/plancat.h" #include "optimizer/plancat.h"
...@@ -35,7 +35,7 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities); ...@@ -35,7 +35,7 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities);
/* /*
* set_clause_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 * to 'new-selectivity'. If the selectivity has already been set, reset
* it only if the new one is better. * it only if the new one is better.
* *
...@@ -43,15 +43,15 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities); ...@@ -43,15 +43,15 @@ static Cost compute_selec(Query *root, List *clauses, List *or_selectivities);
* *
*/ */
void void
set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity) set_clause_selectivities(List *restrictinfo_list, Cost new_selectivity)
{ {
List *temp; List *temp;
ClauseInfo *clausenode; RestrictInfo *clausenode;
Cost cost_clause; Cost cost_clause;
foreach(temp, clauseinfo_list) foreach(temp, restrictinfo_list)
{ {
clausenode = (ClauseInfo *) lfirst(temp); clausenode = (RestrictInfo *) lfirst(temp);
cost_clause = clausenode->selectivity; cost_clause = clausenode->selectivity;
if (FLOAT_IS_ZERO(cost_clause) || new_selectivity < cost_clause) if (FLOAT_IS_ZERO(cost_clause) || new_selectivity < cost_clause)
clausenode->selectivity = new_selectivity; clausenode->selectivity = new_selectivity;
...@@ -60,23 +60,23 @@ set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity) ...@@ -60,23 +60,23 @@ set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity)
/* /*
* product_selec - * 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 Cost
product_selec(List *clauseinfo_list) product_selec(List *restrictinfo_list)
{ {
Cost result = 1.0; Cost result = 1.0;
if (clauseinfo_list != NIL) if (restrictinfo_list != NIL)
{ {
List *xclausenode = NIL; List *xclausenode = NIL;
Cost temp; Cost temp;
foreach(xclausenode, clauseinfo_list) foreach(xclausenode, restrictinfo_list)
{ {
temp = ((ClauseInfo *) lfirst(xclausenode))->selectivity; temp = ((RestrictInfo *) lfirst(xclausenode))->selectivity;
result = result * temp; result = result * temp;
} }
} }
...@@ -89,7 +89,7 @@ product_selec(List *clauseinfo_list) ...@@ -89,7 +89,7 @@ product_selec(List *clauseinfo_list)
* those clauses that haven't been assigned a selectivity by an index. * those clauses that haven't been assigned a selectivity by an index.
* *
* Returns nothing of interest. * Returns nothing of interest.
* MODIFIES: selectivities of the various rel's clauseinfo * MODIFIES: selectivities of the various rel's restrictinfo
* slots. * slots.
*/ */
void void
...@@ -101,28 +101,28 @@ set_rest_relselec(Query *root, List *rel_list) ...@@ -101,28 +101,28 @@ set_rest_relselec(Query *root, List *rel_list)
foreach(x, rel_list) foreach(x, rel_list)
{ {
rel = (RelOptInfo *) lfirst(x); rel = (RelOptInfo *) lfirst(x);
set_rest_selec(root, rel->clauseinfo); set_rest_selec(root, rel->restrictinfo);
} }
} }
/* /*
* set_rest_selec - * set_rest_selec -
* Sets the selectivity fields for those clauses within a single * 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. * Returns nothing of interest.
* *
*/ */
void void
set_rest_selec(Query *root, List *clauseinfo_list) set_rest_selec(Query *root, List *restrictinfo_list)
{ {
List *temp = NIL; List *temp = NIL;
ClauseInfo *clausenode = (ClauseInfo *) NULL; RestrictInfo *clausenode = (RestrictInfo *) NULL;
Cost cost_clause; Cost cost_clause;
foreach(temp, clauseinfo_list) foreach(temp, restrictinfo_list)
{ {
clausenode = (ClauseInfo *) lfirst(temp); clausenode = (RestrictInfo *) lfirst(temp);
cost_clause = clausenode->selectivity; cost_clause = clausenode->selectivity;
/* /*
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -365,7 +365,7 @@ compute_rel_size(RelOptInfo * rel)
Cost temp; Cost temp;
int temp1; int temp1;
temp = rel->tuples * product_selec(rel->clauseinfo); temp = rel->tuples * product_selec(rel->restrictinfo);
Assert(temp >= 0); Assert(temp >= 0);
if (temp >= (MAXINT - 1)) if (temp >= (MAXINT - 1))
temp1 = MAXINT; temp1 = MAXINT;
...@@ -443,7 +443,7 @@ compute_joinrel_size(JoinPath *joinpath) ...@@ -443,7 +443,7 @@ compute_joinrel_size(JoinPath *joinpath)
temp *= ((Path *) joinpath->outerjoinpath)->parent->size; temp *= ((Path *) joinpath->outerjoinpath)->parent->size;
temp *= ((Path *) joinpath->innerjoinpath)->parent->size; temp *= ((Path *) joinpath->innerjoinpath)->parent->size;
temp = temp * product_selec(joinpath->pathclauseinfo); temp = temp * product_selec(joinpath->pathinfo);
if (temp >= (MAXINT - 1)) if (temp >= (MAXINT - 1))
temp1 = MAXINT; temp1 = MAXINT;
else else
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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); ...@@ -24,29 +24,29 @@ static HInfo *match_hashop_hashinfo(Oid hashop, List *hashinfo_list);
/* /*
* group-clauses-by-hashop-- * 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 * it within a hashinfo node containing other clause nodes with the same
* hash operator. * 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 * 'inner-relid' is the relid of the inner join relation
* *
* Returns the new list of hashinfo nodes. * Returns the new list of hashinfo nodes.
* *
*/ */
List * List *
group_clauses_by_hashop(List *clauseinfo_list, group_clauses_by_hashop(List *restrictinfo_list,
int inner_relid) int inner_relid)
{ {
List *hashinfo_list = NIL; List *hashinfo_list = NIL;
ClauseInfo *clauseinfo = (ClauseInfo *) NULL; RestrictInfo *restrictinfo = (RestrictInfo *) NULL;
List *i = NIL; List *i = NIL;
Oid hashjoinop = 0; Oid hashjoinop = 0;
foreach(i, clauseinfo_list) foreach(i, restrictinfo_list)
{ {
clauseinfo = (ClauseInfo *) lfirst(i); restrictinfo = (RestrictInfo *) lfirst(i);
hashjoinop = clauseinfo->hashjoinoperator; hashjoinop = restrictinfo->hashjoinoperator;
/* /*
* Create a new hashinfo node and add it to 'hashinfo-list' if one * Create a new hashinfo node and add it to 'hashinfo-list' if one
...@@ -55,7 +55,7 @@ group_clauses_by_hashop(List *clauseinfo_list, ...@@ -55,7 +55,7 @@ group_clauses_by_hashop(List *clauseinfo_list,
if (hashjoinop) if (hashjoinop)
{ {
HInfo *xhashinfo = (HInfo *) NULL; HInfo *xhashinfo = (HInfo *) NULL;
Expr *clause = clauseinfo->clause; Expr *clause = restrictinfo->clause;
Var *leftop = get_leftop(clause); Var *leftop = get_leftop(clause);
Var *rightop = get_rightop(clause); Var *rightop = get_rightop(clause);
JoinKey *keys = (JoinKey *) NULL; JoinKey *keys = (JoinKey *) NULL;
......
This diff is collapsed.
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -97,14 +97,14 @@ find_all_join_paths(Query *root, List *joinrels)
if (_enable_mergejoin_) if (_enable_mergejoin_)
{ {
mergeinfo_list = mergeinfo_list =
group_clauses_by_order(joinrel->clauseinfo, group_clauses_by_order(joinrel->restrictinfo,
lfirsti(innerrel->relids)); lfirsti(innerrel->relids));
} }
if (_enable_hashjoin_) if (_enable_hashjoin_)
{ {
hashinfo_list = hashinfo_list =
group_clauses_by_hashop(joinrel->clauseinfo, group_clauses_by_hashop(joinrel->restrictinfo,
lfirsti(innerrel->relids)); lfirsti(innerrel->relids));
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 ...@@ -224,7 +224,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
joinrel->classlist = NULL; joinrel->classlist = NULL;
joinrel->relam = InvalidOid; joinrel->relam = InvalidOid;
joinrel->ordering = NULL; joinrel->ordering = NULL;
joinrel->clauseinfo = NIL; joinrel->restrictinfo = NIL;
joinrel->joininfo = NULL; joinrel->joininfo = NULL;
joinrel->innerjoin = NIL; joinrel->innerjoin = NIL;
joinrel->superrels = NIL; joinrel->superrels = NIL;
...@@ -238,7 +238,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf ...@@ -238,7 +238,7 @@ init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininf
if (joininfo) if (joininfo)
{ {
joinrel->clauseinfo = joininfo->jinfoclauseinfo; joinrel->restrictinfo = joininfo->jinfo_restrictinfo;
if (BushyPlanFlag) if (BushyPlanFlag)
joininfo->inactive = true; joininfo->inactive = true;
} }
...@@ -346,22 +346,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids) ...@@ -346,22 +346,18 @@ new_joininfo_list(List *joininfo_list, List *join_relids)
current_joininfo_list); current_joininfo_list);
if (other_joininfo) if (other_joininfo)
{ {
other_joininfo->jinfoclauseinfo = other_joininfo->jinfo_restrictinfo =
(List *) LispUnion(joininfo->jinfoclauseinfo, (List *) LispUnion(joininfo->jinfo_restrictinfo,
other_joininfo->jinfoclauseinfo); other_joininfo->jinfo_restrictinfo);
} }
else else
{ {
other_joininfo = makeNode(JoinInfo); other_joininfo = makeNode(JoinInfo);
other_joininfo->otherrels = other_joininfo->otherrels = joininfo->otherrels;
joininfo->otherrels; other_joininfo->jinfo_restrictinfo = joininfo->jinfo_restrictinfo;
other_joininfo->jinfoclauseinfo = other_joininfo->mergejoinable = joininfo->mergejoinable;
joininfo->jinfoclauseinfo; other_joininfo->hashjoinable = joininfo->hashjoinable;
other_joininfo->mergejoinable =
joininfo->mergejoinable;
other_joininfo->hashjoinable =
joininfo->hashjoinable;
other_joininfo->inactive = false; other_joininfo->inactive = false;
current_joininfo_list = lcons(other_joininfo, current_joininfo_list = lcons(other_joininfo,
...@@ -412,7 +408,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -412,7 +408,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
{ {
JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo);
List *other_rels = joininfo->otherrels; List *other_rels = joininfo->otherrels;
List *clause_info = joininfo->jinfoclauseinfo; List *restrict_info = joininfo->jinfo_restrictinfo;
bool mergejoinable = joininfo->mergejoinable; bool mergejoinable = joininfo->mergejoinable;
bool hashjoinable = joininfo->hashjoinable; bool hashjoinable = joininfo->hashjoinable;
...@@ -425,7 +421,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -425,7 +421,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
JoinInfo *new_joininfo = makeNode(JoinInfo); JoinInfo *new_joininfo = makeNode(JoinInfo);
new_joininfo->otherrels = joinrel->relids; new_joininfo->otherrels = joinrel->relids;
new_joininfo->jinfoclauseinfo = clause_info; new_joininfo->jinfo_restrictinfo = restrict_info;
new_joininfo->mergejoinable = mergejoinable; new_joininfo->mergejoinable = mergejoinable;
new_joininfo->hashjoinable = hashjoinable; new_joininfo->hashjoinable = hashjoinable;
new_joininfo->inactive = false; new_joininfo->inactive = false;
...@@ -445,16 +441,16 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) ...@@ -445,16 +441,16 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels)
if (other_joininfo) if (other_joininfo)
{ {
other_joininfo->jinfoclauseinfo = other_joininfo->jinfo_restrictinfo =
(List *) LispUnion(clause_info, (List *) LispUnion(restrict_info,
other_joininfo->jinfoclauseinfo); other_joininfo->jinfo_restrictinfo);
} }
else else
{ {
JoinInfo *new_joininfo = makeNode(JoinInfo); JoinInfo *new_joininfo = makeNode(JoinInfo);
new_joininfo->otherrels = new_relids; new_joininfo->otherrels = new_relids;
new_joininfo->jinfoclauseinfo = clause_info; new_joininfo->jinfo_restrictinfo = restrict_info;
new_joininfo->mergejoinable = mergejoinable; new_joininfo->mergejoinable = mergejoinable;
new_joininfo->hashjoinable = hashjoinable; new_joininfo->hashjoinable = hashjoinable;
new_joininfo->inactive = false; new_joininfo->inactive = false;
...@@ -583,7 +579,7 @@ set_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inne ...@@ -583,7 +579,7 @@ set_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inne
} }
else else
{ {
selec = product_selec(jinfo->jinfoclauseinfo); selec = product_selec(jinfo->jinfo_restrictinfo);
/* ntuples = Min(outer_rel->tuples,inner_rel->tuples) * selec; */ /* ntuples = Min(outer_rel->tuples,inner_rel->tuples) * selec; */
ntuples = outer_rel->tuples * inner_rel->tuples * selec; ntuples = outer_rel->tuples * inner_rel->tuples * selec;
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -23,27 +23,27 @@
/* /*
* group-clauses-by-order-- * 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 * it within a mergeinfo node containing other clause nodes with the same
* mergejoin ordering. * 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 * 'inner-relid' is the relid of the inner join relation
* *
* Returns the new list of mergeinfo nodes. * Returns the new list of mergeinfo nodes.
* *
*/ */
List * List *
group_clauses_by_order(List *clauseinfo_list, group_clauses_by_order(List *restrictinfo_list,
int inner_relid) int inner_relid)
{ {
List *mergeinfo_list = NIL; List *mergeinfo_list = NIL;
List *xclauseinfo = NIL; List *xrestrictinfo = NIL;
foreach(xclauseinfo, clauseinfo_list) foreach(xrestrictinfo, restrictinfo_list)
{ {
ClauseInfo *clauseinfo = (ClauseInfo *) lfirst(xclauseinfo); RestrictInfo *restrictinfo = (RestrictInfo *) lfirst(xrestrictinfo);
MergeOrder *merge_ordering = clauseinfo->mergejoinorder; MergeOrder *merge_ordering = restrictinfo->mergejoinorder;
if (merge_ordering) if (merge_ordering)
{ {
...@@ -54,7 +54,7 @@ group_clauses_by_order(List *clauseinfo_list, ...@@ -54,7 +54,7 @@ group_clauses_by_order(List *clauseinfo_list,
*/ */
PathOrder p_ordering; PathOrder p_ordering;
MInfo *xmergeinfo; MInfo *xmergeinfo;
Expr *clause = clauseinfo->clause; Expr *clause = restrictinfo->clause;
Var *leftop = get_leftop(clause); Var *leftop = get_leftop(clause);
Var *rightop = get_rightop(clause); Var *rightop = get_rightop(clause);
JoinKey *keys; JoinKey *keys;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -22,7 +22,7 @@
#include "optimizer/internal.h" #include "optimizer/internal.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/paths.h" #include "optimizer/paths.h"
#include "optimizer/cost.h" #include "optimizer/cost.h"
#include "optimizer/plancat.h" #include "optimizer/plancat.h"
...@@ -58,7 +58,7 @@ create_or_index_paths(Query *root, ...@@ -58,7 +58,7 @@ create_or_index_paths(Query *root,
foreach(clist, clauses) 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, * Check to see if this clause is an 'or' clause, and, if so,
...@@ -118,11 +118,11 @@ create_or_index_paths(Query *root, ...@@ -118,11 +118,11 @@ create_or_index_paths(Query *root,
pathnode->path.path_cost = cost; 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 * processing -- JMH, 7/7/92
*/ */
pathnode->path.locclauseinfo = pathnode->path.loc_restrictinfo =
set_difference(copyObject((Node *) rel->clauseinfo), set_difference(copyObject((Node *) rel->restrictinfo),
lcons(clausenode, NIL)); lcons(clausenode, NIL));
#if 0 /* fix xfunc */ #if 0 /* fix xfunc */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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); ...@@ -64,7 +64,7 @@ static void xfunc_form_groups(Stream root, Stream bottom);
static void xfunc_free_stream(Stream root); static void xfunc_free_stream(Stream root);
static Stream xfunc_add_clauses(Stream current); static Stream xfunc_add_clauses(Stream current);
static void xfunc_setup_group(Stream node, Stream bottom); 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); int clausetype);
static int xfunc_num_relids(Stream node); static int xfunc_num_relids(Stream node);
static StreamPtr xfunc_get_downjoin(Stream node); static StreamPtr xfunc_get_downjoin(Stream node);
...@@ -142,7 +142,7 @@ xfunc_predmig(JoinPath pathnode,/* root of the join tree */ ...@@ -142,7 +142,7 @@ xfunc_predmig(JoinPath pathnode,/* root of the join tree */
set_downstream(laststream, (StreamPtr) newstream); set_downstream(laststream, (StreamPtr) newstream);
set_downstream(newstream, (StreamPtr) NULL); set_downstream(newstream, (StreamPtr) NULL);
set_pathptr(newstream, (pathPtr) pathnode); set_pathptr(newstream, (pathPtr) pathnode);
set_cinfo(newstream, (ClauseInfo) NULL); set_cinfo(newstream, (RestrictInfo) NULL);
set_clausetype(newstream, XFUNC_UNKNOWN); set_clausetype(newstream, XFUNC_UNKNOWN);
/* base case: we're at a leaf, call xfunc_series_llel */ /* base case: we're at a leaf, call xfunc_series_llel */
...@@ -315,7 +315,7 @@ xfunc_complete_stream(Stream stream) ...@@ -315,7 +315,7 @@ xfunc_complete_stream(Stream stream)
static bool static bool
xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
{ {
ClauseInfo clauseinfo = get_cinfo(pullme); RestrictInfo restrictinfo = get_cinfo(pullme);
bool progress = false; bool progress = false;
Stream upjoin, Stream upjoin,
orignode, orignode,
...@@ -325,7 +325,7 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) ...@@ -325,7 +325,7 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
/* find node in origstream that contains clause */ /* find node in origstream that contains clause */
for (orignode = origstream; for (orignode = origstream;
orignode != (Stream) NULL orignode != (Stream) NULL
&& get_cinfo(orignode) != clauseinfo; && get_cinfo(orignode) != restrictinfo;
orignode = (Stream) get_downstream(orignode)) orignode = (Stream) get_downstream(orignode))
/* empty body in for loop */ ; /* empty body in for loop */ ;
if (!orignode) if (!orignode)
...@@ -348,13 +348,13 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) ...@@ -348,13 +348,13 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath)
whichchild = OUTER; whichchild = OUTER;
else else
whichchild = INNER; 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), (JoinPath) get_pathptr(upjoin),
clauseinfo, restrictinfo,
whichchild, whichchild,
get_clausetype(orignode)); get_clausetype(orignode));
set_pathptr(pullme, get_pathptr(upjoin)); set_pathptr(pullme, get_pathptr(upjoin));
/* pullme has been moved into locclauseinfo */ /* pullme has been moved into locrestrictinfo */
set_clausetype(pullme, XFUNC_LOCPRD); set_clausetype(pullme, XFUNC_LOCPRD);
/* /*
...@@ -524,10 +524,10 @@ xfunc_add_clauses(Stream current) ...@@ -524,10 +524,10 @@ xfunc_add_clauses(Stream current)
LispValue primjoin; LispValue primjoin;
/* first add in the local clauses */ /* first add in the local clauses */
foreach(temp, get_locclauseinfo((Path) get_pathptr(current))) foreach(temp, get_loc_restrictinfo((Path) get_pathptr(current)))
{ {
topnode = topnode =
xfunc_streaminsert((ClauseInfo) lfirst(temp), topnode, xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode,
XFUNC_LOCPRD); XFUNC_LOCPRD);
} }
...@@ -535,11 +535,11 @@ xfunc_add_clauses(Stream current) ...@@ -535,11 +535,11 @@ xfunc_add_clauses(Stream current)
if (IsA(get_pathptr(current), JoinPath)) if (IsA(get_pathptr(current), JoinPath))
{ {
primjoin = xfunc_primary_join((JoinPath) get_pathptr(current)); 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 = topnode =
xfunc_streaminsert((ClauseInfo) lfirst(temp), topnode, xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode,
XFUNC_JOINPRD); XFUNC_JOINPRD);
} }
} }
...@@ -593,7 +593,7 @@ xfunc_setup_group(Stream node, Stream bottom) ...@@ -593,7 +593,7 @@ xfunc_setup_group(Stream node, Stream bottom)
** Return new node. ** Return new node.
*/ */
static Stream static Stream
xfunc_streaminsert(ClauseInfo clauseinfo, xfunc_streaminsert(RestrictInfo restrictinfo,
Stream current, Stream current,
int clausetype) /* XFUNC_LOCPRD or XFUNC_JOINPRD */ int clausetype) /* XFUNC_LOCPRD or XFUNC_JOINPRD */
{ {
...@@ -605,7 +605,7 @@ xfunc_streaminsert(ClauseInfo clauseinfo, ...@@ -605,7 +605,7 @@ xfunc_streaminsert(ClauseInfo clauseinfo,
set_upstream(current, (StreamPtr) newstream); set_upstream(current, (StreamPtr) newstream);
set_downstream(newstream, (StreamPtr) current); set_downstream(newstream, (StreamPtr) current);
set_pathptr(newstream, get_pathptr(current)); set_pathptr(newstream, get_pathptr(current));
set_cinfo(newstream, clauseinfo); set_cinfo(newstream, restrictinfo);
set_clausetype(newstream, clausetype); set_clausetype(newstream, clausetype);
return newstream; return newstream;
} }
......
This diff is collapsed.
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -31,7 +31,7 @@
#include "utils/palloc.h" #include "utils/palloc.h"
#include "utils/builtins.h" #include "utils/builtins.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/planmain.h" #include "optimizer/planmain.h"
#include "optimizer/tlist.h" #include "optimizer/tlist.h"
...@@ -170,7 +170,7 @@ create_scan_node(Path *best_path, List *tlist) ...@@ -170,7 +170,7 @@ create_scan_node(Path *best_path, List *tlist)
* xfunc_trypullup(), we get the relevant clauses from the path * xfunc_trypullup(), we get the relevant clauses from the path
* itself, not its parent relation. --- JMH, 6/15/92 * 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) switch (best_path->pathtype)
{ {
...@@ -219,7 +219,7 @@ create_join_node(JoinPath *best_path, List *tlist) ...@@ -219,7 +219,7 @@ create_join_node(JoinPath *best_path, List *tlist)
inner_node = create_plan((Path *) best_path->innerjoinpath); inner_node = create_plan((Path *) best_path->innerjoinpath);
inner_tlist = inner_node->targetlist; inner_tlist = inner_node->targetlist;
clauses = get_actual_clauses(best_path->pathclauseinfo); clauses = get_actual_clauses(best_path->pathinfo);
switch (best_path->path.pathtype) switch (best_path->path.pathtype)
{ {
...@@ -263,11 +263,11 @@ create_join_node(JoinPath *best_path, List *tlist) ...@@ -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. * -- * into this path node. Put them in the qpqual of the plan node. * --
* JMH, 6/15/92 * JMH, 6/15/92
*/ */
if (get_locclauseinfo(best_path) != NIL) if (get_loc_restrictinfo(best_path) != NIL)
set_qpqual((Plan) retval, set_qpqual((Plan) retval,
nconc(get_qpqual((Plan) retval), nconc(get_qpqual((Plan) retval),
fix_opids(get_actual_clauses fix_opids(get_actual_clauses
(get_locclauseinfo(best_path))))); (get_loc_restrictinfo(best_path)))));
#endif #endif
return retval; return retval;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -40,7 +40,7 @@
extern int Quiet; extern int Quiet;
static void add_clause_to_rels(Query *root, List *clause); 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); List *join_relids);
static void add_vars_to_targetlist(Query *root, List *vars, 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) ...@@ -140,7 +140,7 @@ add_missing_vars_to_tlist(Query *root, List *tlist)
/* /*
* init-base-rels-qual-- * 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 * relations appearing within clauses. Creates new relation entries if
* necessary, adding them to *query-relation-list*. * necessary, adding them to *query-relation-list*.
* *
...@@ -158,9 +158,9 @@ init_base_rels_qual(Query *root, List *clauses) ...@@ -158,9 +158,9 @@ init_base_rels_qual(Query *root, List *clauses)
/* /*
* add-clause-to-rels-- * 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) * 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. * within the nodes.
* *
* Returns nothing of interest. * Returns nothing of interest.
...@@ -170,19 +170,19 @@ add_clause_to_rels(Query *root, List *clause) ...@@ -170,19 +170,19 @@ add_clause_to_rels(Query *root, List *clause)
{ {
List *relids; List *relids;
List *vars; List *vars;
ClauseInfo *clauseinfo = makeNode(ClauseInfo); RestrictInfo *restrictinfo = makeNode(RestrictInfo);
/* /*
* Retrieve all relids and vars contained within the clause. * Retrieve all relids and vars contained within the clause.
*/ */
clause_get_relids_vars((Node *) clause, &relids, &vars); clause_get_relids_vars((Node *) clause, &relids, &vars);
clauseinfo->clause = (Expr *) clause; restrictinfo->clause = (Expr *) clause;
clauseinfo->notclause = contains_not((Node *) clause); restrictinfo->notclause = contains_not((Node *) clause);
clauseinfo->selectivity = 0; restrictinfo->selectivity = 0;
clauseinfo->indexids = NIL; restrictinfo->indexids = NIL;
clauseinfo->mergejoinorder = (MergeOrder *) NULL; restrictinfo->mergejoinorder = (MergeOrder *) NULL;
clauseinfo->hashjoinoperator = (Oid) 0; restrictinfo->hashjoinoperator = (Oid) 0;
if (length(relids) == 1) if (length(relids) == 1)
{ {
...@@ -204,14 +204,14 @@ add_clause_to_rels(Query *root, List *clause) ...@@ -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 * XXX If we have a func clause set selectivity to 1/3, really
* need a true selectivity function. * need a true selectivity function.
*/ */
clauseinfo->selectivity = (Cost) 0.3333333; restrictinfo->selectivity = (Cost) 0.3333333;
} }
else else
{ {
clauseinfo->selectivity = restrictinfo->selectivity =
compute_clause_selec(root, (Node *) clause, NIL); compute_clause_selec(root, (Node *) clause, NIL);
} }
rel->clauseinfo = lcons(clauseinfo, rel->clauseinfo); rel->restrictinfo = lcons(restrictinfo, rel->restrictinfo);
} }
else else
{ {
...@@ -228,14 +228,14 @@ add_clause_to_rels(Query *root, List *clause) ...@@ -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 * XXX If we have a func clause set selectivity to 1/3, really
* need a true selectivity function. * need a true selectivity function.
*/ */
clauseinfo->selectivity = (Cost) 0.3333333; restrictinfo->selectivity = (Cost) 0.3333333;
} }
else else
{ {
clauseinfo->selectivity = restrictinfo->selectivity =
compute_clause_selec(root, (Node *) clause, NIL); 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 */ /* we are going to be doing a join, so add var to targetlist */
add_vars_to_targetlist(root, vars, relids); add_vars_to_targetlist(root, vars, relids);
} }
...@@ -243,18 +243,18 @@ add_clause_to_rels(Query *root, List *clause) ...@@ -243,18 +243,18 @@ add_clause_to_rels(Query *root, List *clause)
/* /*
* add-join-info-to-rels-- * 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 * the appropriate joininfo node(creating a new one and adding it to the
* appropriate rel node if necessary). * 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 * 'join-relids' is the list of relations participating in the join clause
* *
* Returns nothing. * Returns nothing.
* *
*/ */
static void 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; List *join_relid;
...@@ -272,8 +272,8 @@ add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo, List *join_relids) ...@@ -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)), joininfo = find_joininfo_node(get_base_rel(root, lfirsti(join_relid)),
other_rels); other_rels);
joininfo->jinfoclauseinfo = joininfo->jinfo_restrictinfo =
lcons(copyObject((void *) clauseinfo), joininfo->jinfoclauseinfo); lcons(copyObject((void *) restrictinfo), joininfo->jinfo_restrictinfo);
} }
} }
...@@ -322,7 +322,7 @@ add_vars_to_targetlist(Query *root, List *vars, List *join_relids) ...@@ -322,7 +322,7 @@ add_vars_to_targetlist(Query *root, List *vars, List *join_relids)
* init-join-info-- * init-join-info--
* Set the MergeJoinable or HashJoinable field for every joininfo node * Set the MergeJoinable or HashJoinable field for every joininfo node
* (within a rel node) and the MergeJoinOrder or HashJoinOp field for * (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. * query.
* *
* Returns nothing. * Returns nothing.
...@@ -335,7 +335,7 @@ init_join_info(List *rel_list) ...@@ -335,7 +335,7 @@ init_join_info(List *rel_list)
*z; *z;
RelOptInfo *rel; RelOptInfo *rel;
JoinInfo *joininfo; JoinInfo *joininfo;
ClauseInfo *clauseinfo; RestrictInfo *restrictinfo;
Expr *clause; Expr *clause;
foreach(x, rel_list) foreach(x, rel_list)
...@@ -344,10 +344,10 @@ init_join_info(List *rel_list) ...@@ -344,10 +344,10 @@ init_join_info(List *rel_list)
foreach(y, rel->joininfo) foreach(y, rel->joininfo)
{ {
joininfo = (JoinInfo *) lfirst(y); joininfo = (JoinInfo *) lfirst(y);
foreach(z, joininfo->jinfoclauseinfo) foreach(z, joininfo->jinfo_restrictinfo)
{ {
clauseinfo = (ClauseInfo *) lfirst(z); restrictinfo = (RestrictInfo *) lfirst(z);
clause = clauseinfo->clause; clause = restrictinfo->clause;
if (is_joinable((Node *) clause)) if (is_joinable((Node *) clause))
{ {
MergeOrder *sortop = (MergeOrder *) NULL; MergeOrder *sortop = (MergeOrder *) NULL;
...@@ -360,12 +360,12 @@ init_join_info(List *rel_list) ...@@ -360,12 +360,12 @@ init_join_info(List *rel_list)
if (sortop) if (sortop)
{ {
clauseinfo->mergejoinorder = sortop; restrictinfo->mergejoinorder = sortop;
joininfo->mergejoinable = true; joininfo->mergejoinable = true;
} }
if (hashop) if (hashop)
{ {
clauseinfo->hashjoinoperator = hashop; restrictinfo->hashjoinoperator = hashop;
joininfo->hashjoinable = true; joininfo->hashjoinable = true;
} }
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -39,7 +39,7 @@
/* DATA STRUCTURE CREATION/MANIPULATION ROUTINES */ /* DATA STRUCTURE CREATION/MANIPULATION ROUTINES */
#include "nodes/relation.h" #include "nodes/relation.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/joininfo.h" #include "optimizer/joininfo.h"
#include "optimizer/keys.h" #include "optimizer/keys.h"
#include "optimizer/ordering.h" #include "optimizer/ordering.h"
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -26,7 +26,7 @@
#include "optimizer/internal.h" #include "optimizer/internal.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/keys.h" #include "optimizer/keys.h"
#include "optimizer/planmain.h" #include "optimizer/planmain.h"
#include "optimizer/tlist.h" #include "optimizer/tlist.h"
......
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
* *
* clauseinfo.c-- * restrictinfo.c--
* ClauseInfo node manipulation routines. * RestrictInfo node manipulation routines.
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -18,21 +18,21 @@
#include "optimizer/internal.h" #include "optimizer/internal.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
/* /*
* valid-or-clause-- * 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 bool
valid_or_clause(ClauseInfo * clauseinfo) valid_or_clause(RestrictInfo * restrictinfo)
{ {
if (clauseinfo != NULL && if (restrictinfo != NULL &&
!single_node((Node *) clauseinfo->clause) && !single_node((Node *) restrictinfo->clause) &&
!clauseinfo->notclause && !restrictinfo->notclause &&
or_clause((Node *) clauseinfo->clause)) or_clause((Node *) restrictinfo->clause))
return true; return true;
else else
return false; return false;
...@@ -41,19 +41,19 @@ valid_or_clause(ClauseInfo * clauseinfo) ...@@ -41,19 +41,19 @@ valid_or_clause(ClauseInfo * clauseinfo)
/* /*
* get-actual-clauses-- * get-actual-clauses--
* *
* Returns a list containing the clauses from 'clauseinfo-list'. * Returns a list containing the clauses from 'restrictinfo-list'.
* *
*/ */
List * List *
get_actual_clauses(List *clauseinfo_list) get_actual_clauses(List *restrictinfo_list)
{ {
List *temp = NIL; List *temp = NIL;
List *result = 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); result = lappend(result, clause->clause);
} }
return result; return result;
...@@ -69,7 +69,7 @@ get_actual_clauses(List *clauseinfo_list) ...@@ -69,7 +69,7 @@ get_actual_clauses(List *clauseinfo_list)
/* /*
* get_relattvals-- * 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: * index, create a vectori-long specifying:
* the attnos, * the attnos,
* the values of the clause constants, and * the values of the clause constants, and
...@@ -79,13 +79,13 @@ get_actual_clauses(List *clauseinfo_list) ...@@ -79,13 +79,13 @@ get_actual_clauses(List *clauseinfo_list)
* flag indicating whether the constant is on the left or right should * flag indicating whether the constant is on the left or right should
* always be *SELEC-CONSTANT-RIGHT*. * 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. * Returns a list of vectori-longs.
* *
*/ */
void void
get_relattvals(List *clauseinfo_list, get_relattvals(List *restrictinfo_list,
List **attnos, List **attnos,
List **values, List **values,
List **flags) List **flags)
...@@ -93,17 +93,17 @@ get_relattvals(List *clauseinfo_list, ...@@ -93,17 +93,17 @@ get_relattvals(List *clauseinfo_list,
List *result1 = NIL; List *result1 = NIL;
List *result2 = NIL; List *result2 = NIL;
List *result3 = NIL; List *result3 = NIL;
ClauseInfo *temp = (ClauseInfo *) NULL; RestrictInfo *temp = (RestrictInfo *) NULL;
List *i = NIL; List *i = NIL;
foreach(i, clauseinfo_list) foreach(i, restrictinfo_list)
{ {
int dummy; int dummy;
AttrNumber attno; AttrNumber attno;
Datum constval; Datum constval;
int flag; int flag;
temp = (ClauseInfo *) lfirst(i); temp = (RestrictInfo *) lfirst(i);
get_relattval((Node *) temp->clause, &dummy, &attno, &constval, &flag); get_relattval((Node *) temp->clause, &dummy, &attno, &constval, &flag);
result1 = lappendi(result1, (int) attno); result1 = lappendi(result1, (int) attno);
result2 = lappendi(result2, constval); result2 = lappendi(result2, constval);
...@@ -118,7 +118,7 @@ get_relattvals(List *clauseinfo_list, ...@@ -118,7 +118,7 @@ get_relattvals(List *clauseinfo_list,
/* /*
* get_joinvars -- * 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: * of an inner join relation, return three lists consisting of:
* the attributes corresponding to the inner join relation * the attributes corresponding to the inner join relation
* the value of the inner var clause (always "") * the value of the inner var clause (always "")
...@@ -126,13 +126,13 @@ get_relattvals(List *clauseinfo_list, ...@@ -126,13 +126,13 @@ get_relattvals(List *clauseinfo_list,
* the operator. * the operator.
* *
* 'relid' is the inner join relation * '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' * 'rel'
* *
*/ */
void void
get_joinvars(Oid relid, get_joinvars(Oid relid,
List *clauseinfo_list, List *restrictinfo_list,
List **attnos, List **attnos,
List **values, List **values,
List **flags) List **flags)
...@@ -142,10 +142,10 @@ get_joinvars(Oid relid, ...@@ -142,10 +142,10 @@ get_joinvars(Oid relid,
List *result3 = NIL; List *result3 = NIL;
List *temp; List *temp;
foreach(temp, clauseinfo_list) foreach(temp, restrictinfo_list)
{ {
ClauseInfo *clauseinfo = lfirst(temp); RestrictInfo *restrictinfo = lfirst(temp);
Expr *clause = clauseinfo->clause; Expr *clause = restrictinfo->clause;
if (IsA(get_leftop(clause), Var) && if (IsA(get_leftop(clause), Var) &&
(relid == (get_leftop(clause))->varno)) (relid == (get_leftop(clause))->varno))
...@@ -170,19 +170,19 @@ get_joinvars(Oid relid, ...@@ -170,19 +170,19 @@ get_joinvars(Oid relid,
/* /*
* get_opnos-- * get_opnos--
* Create and return a list containing the clause operators of each member * 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 * List *
get_opnos(List *clauseinfo_list) get_opnos(List *restrictinfo_list)
{ {
ClauseInfo *temp = (ClauseInfo *) NULL; RestrictInfo *temp = (RestrictInfo *) NULL;
List *result = NIL; List *result = NIL;
List *i = NIL; List *i = NIL;
foreach(i, clauseinfo_list) foreach(i, restrictinfo_list)
{ {
temp = (ClauseInfo *) lfirst(i); temp = (RestrictInfo *) lfirst(i);
result = result =
lappendi(result, lappendi(result,
(((Oper *) temp->clause->oper)->opno)); (((Oper *) temp->clause->oper)->opno));
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -81,7 +81,7 @@ find_secondary_index(Query *root, Oid relid)
indexnode->unorderedpath = NULL; indexnode->unorderedpath = NULL;
indexnode->cheapestpath = NULL; indexnode->cheapestpath = NULL;
indexnode->pruneable = true; indexnode->pruneable = true;
indexnode->clauseinfo = NIL; indexnode->restrictinfo = NIL;
indexnode->joininfo = NIL; indexnode->joininfo = NIL;
indexnode->innerjoin = NIL; indexnode->innerjoin = NIL;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -71,7 +71,7 @@ find_joininfo_node(RelOptInfo * this_rel, List *join_relids)
{ {
joininfo = makeNode(JoinInfo); joininfo = makeNode(JoinInfo);
joininfo->otherrels = join_relids; joininfo->otherrels = join_relids;
joininfo->jinfoclauseinfo = NIL; joininfo->jinfo_restrictinfo = NIL;
joininfo->mergejoinable = false; joininfo->mergejoinable = false;
joininfo->hashjoinable = false; joininfo->hashjoinable = false;
joininfo->inactive = false; joininfo->inactive = false;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -20,7 +20,7 @@
#include "optimizer/internal.h" #include "optimizer/internal.h"
#include "optimizer/pathnode.h" #include "optimizer/pathnode.h"
#include "optimizer/clauseinfo.h" #include "optimizer/restrictinfo.h"
#include "optimizer/plancat.h" #include "optimizer/plancat.h"
#include "optimizer/cost.h" #include "optimizer/cost.h"
#include "optimizer/keys.h" #include "optimizer/keys.h"
...@@ -209,11 +209,11 @@ create_seqscan_path(RelOptInfo * rel) ...@@ -209,11 +209,11 @@ create_seqscan_path(RelOptInfo * rel)
pathnode->keys = NIL; 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 * JMH, 7/7/92
*/ */
pathnode->locclauseinfo = pathnode->loc_restrictinfo =
(List *) copyObject((Node *) rel->clauseinfo); (List *) copyObject((Node *) rel->restrictinfo);
if (rel->relids != NULL) if (rel->relids != NULL)
relid = lfirsti(rel->relids); relid = lfirsti(rel->relids);
...@@ -263,11 +263,11 @@ create_index_path(Query *root, ...@@ -263,11 +263,11 @@ create_index_path(Query *root,
pathnode->indexqual = NIL; 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 * JMH, 7/7/92
*/ */
pathnode->path.locclauseinfo = pathnode->path.loc_restrictinfo =
set_difference((List *) copyObject((Node *) rel->clauseinfo), set_difference((List *) copyObject((Node *) rel->restrictinfo),
(List *) restriction_clauses); (List *) restriction_clauses);
/* /*
...@@ -410,11 +410,11 @@ create_nestloop_path(RelOptInfo * joinrel, ...@@ -410,11 +410,11 @@ create_nestloop_path(RelOptInfo * joinrel,
pathnode->path.parent = joinrel; pathnode->path.parent = joinrel;
pathnode->outerjoinpath = outer_path; pathnode->outerjoinpath = outer_path;
pathnode->innerjoinpath = inner_path; pathnode->innerjoinpath = inner_path;
pathnode->pathclauseinfo = joinrel->clauseinfo; pathnode->pathinfo = joinrel->restrictinfo;
pathnode->path.keys = keys; pathnode->path.keys = keys;
pathnode->path.joinid = NIL; pathnode->path.joinid = NIL;
pathnode->path.outerjoincost = (Cost) 0.0; pathnode->path.outerjoincost = (Cost) 0.0;
pathnode->path.locclauseinfo = NIL; pathnode->path.loc_restrictinfo = NIL;
if (keys) if (keys)
{ {
...@@ -492,12 +492,12 @@ create_mergejoin_path(RelOptInfo * joinrel, ...@@ -492,12 +492,12 @@ create_mergejoin_path(RelOptInfo * joinrel,
pathnode->jpath.path.parent = joinrel; pathnode->jpath.path.parent = joinrel;
pathnode->jpath.outerjoinpath = outer_path; pathnode->jpath.outerjoinpath = outer_path;
pathnode->jpath.innerjoinpath = inner_path; pathnode->jpath.innerjoinpath = inner_path;
pathnode->jpath.pathclauseinfo = joinrel->clauseinfo; pathnode->jpath.pathinfo = joinrel->restrictinfo;
pathnode->jpath.path.keys = keys; pathnode->jpath.path.keys = keys;
pathnode->jpath.path.p_ordering.ordtype = MERGE_ORDER; pathnode->jpath.path.p_ordering.ordtype = MERGE_ORDER;
pathnode->jpath.path.p_ordering.ord.merge = order; pathnode->jpath.path.p_ordering.ord.merge = order;
pathnode->path_mergeclauses = mergeclauses; pathnode->path_mergeclauses = mergeclauses;
pathnode->jpath.path.locclauseinfo = NIL; pathnode->jpath.path.loc_restrictinfo = NIL;
pathnode->outersortkeys = outersortkeys; pathnode->outersortkeys = outersortkeys;
pathnode->innersortkeys = innersortkeys; pathnode->innersortkeys = innersortkeys;
pathnode->jpath.path.path_cost = pathnode->jpath.path.path_cost =
...@@ -558,8 +558,8 @@ create_hashjoin_path(RelOptInfo * joinrel, ...@@ -558,8 +558,8 @@ create_hashjoin_path(RelOptInfo * joinrel,
pathnode->jpath.path.parent = joinrel; pathnode->jpath.path.parent = joinrel;
pathnode->jpath.outerjoinpath = outer_path; pathnode->jpath.outerjoinpath = outer_path;
pathnode->jpath.innerjoinpath = inner_path; pathnode->jpath.innerjoinpath = inner_path;
pathnode->jpath.pathclauseinfo = joinrel->clauseinfo; pathnode->jpath.pathinfo = joinrel->restrictinfo;
pathnode->jpath.path.locclauseinfo = NIL; pathnode->jpath.path.loc_restrictinfo = NIL;
pathnode->jpath.path.keys = keys; pathnode->jpath.path.keys = keys;
pathnode->jpath.path.p_ordering.ordtype = SORTOP_ORDER; pathnode->jpath.path.p_ordering.ordtype = SORTOP_ORDER;
pathnode->jpath.path.p_ordering.ord.sortop = NULL; pathnode->jpath.path.p_ordering.ord.sortop = NULL;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -51,7 +51,7 @@ get_base_rel(Query *root, int relid)
rel->classlist = NULL; rel->classlist = NULL;
rel->ordering = NULL; rel->ordering = NULL;
rel->relam = InvalidOid; rel->relam = InvalidOid;
rel->clauseinfo = NIL; rel->restrictinfo = NIL;
rel->joininfo = NIL; rel->joininfo = NIL;
rel->innerjoin = NIL; rel->innerjoin = NIL;
rel->superrels = NIL; rel->superrels = NIL;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 ...@@ -79,7 +79,7 @@ typedef enum NodeTag
T_OrderKey, T_OrderKey,
T_JoinKey, T_JoinKey,
T_MergeOrder, T_MergeOrder,
T_ClauseInfo, T_RestrictInfo,
T_JoinMethod, T_JoinMethod,
T_HInfo, T_HInfo,
T_MInfo, T_MInfo,
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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; ...@@ -60,7 +60,7 @@ typedef List *Relid;
* * The presence of the remaining fields depends on the restrictions * * The presence of the remaining fields depends on the restrictions
* and joins which the relation participates in: * 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 * qualification clause in which this relation participates
* joininfo - List of JoinInfo nodes, containing info about each join * joininfo - List of JoinInfo nodes, containing info about each join
* clause in which this relation participates * clause in which this relation participates
...@@ -102,7 +102,7 @@ typedef struct RelOptInfo ...@@ -102,7 +102,7 @@ typedef struct RelOptInfo
/* used by various scans and joins: */ /* used by various scans and joins: */
Oid *ordering; /* OID of operators in sort order */ Oid *ordering; /* OID of operators in sort order */
List *clauseinfo; /* restriction clauses */ List *restrictinfo; /* restriction clauses */
List *joininfo; /* join clauses */ List *joininfo; /* join clauses */
List *innerjoin; List *innerjoin;
List *superrels; List *superrels;
...@@ -149,7 +149,7 @@ typedef struct Path ...@@ -149,7 +149,7 @@ typedef struct Path
List *keys; List *keys;
Cost outerjoincost; Cost outerjoincost;
Relid joinid; Relid joinid;
List *locclauseinfo; List *loc_restrictinfo;
} Path; } Path;
typedef struct IndexPath typedef struct IndexPath
...@@ -164,7 +164,7 @@ typedef struct IndexPath ...@@ -164,7 +164,7 @@ typedef struct IndexPath
typedef struct JoinPath typedef struct JoinPath
{ {
Path path; Path path;
List *pathclauseinfo; List *pathinfo;
Path *outerjoinpath; Path *outerjoinpath;
Path *innerjoinpath; Path *innerjoinpath;
} JoinPath; } JoinPath;
...@@ -207,7 +207,7 @@ typedef struct JoinKey ...@@ -207,7 +207,7 @@ typedef struct JoinKey
* clause info * clause info
*******/ *******/
typedef struct ClauseInfo typedef struct RestrictInfo
{ {
NodeTag type; NodeTag type;
Expr *clause; /* should be an OP clause */ Expr *clause; /* should be an OP clause */
...@@ -221,7 +221,7 @@ typedef struct ClauseInfo ...@@ -221,7 +221,7 @@ typedef struct ClauseInfo
/* hashjoin only */ /* hashjoin only */
Oid hashjoinoperator; Oid hashjoinoperator;
Relid cinfojoinid; Relid cinfojoinid;
} ClauseInfo; } RestrictInfo;
typedef struct JoinMethod typedef struct JoinMethod
{ {
...@@ -246,7 +246,7 @@ typedef struct JoinInfo ...@@ -246,7 +246,7 @@ typedef struct JoinInfo
{ {
NodeTag type; NodeTag type;
List *otherrels; List *otherrels;
List *jinfoclauseinfo; List *jinfo_restrictinfo;
bool mergejoinable; bool mergejoinable;
bool hashjoinable; bool hashjoinable;
bool inactive; bool inactive;
...@@ -271,7 +271,7 @@ typedef struct Iter ...@@ -271,7 +271,7 @@ typedef struct Iter
** pathptr -- pointer to the current path node ** pathptr -- pointer to the current path node
** cinfo -- if NULL, this stream node referes to the path node. ** cinfo -- if NULL, this stream node referes to the path node.
** Otherwise this is a pointer to the current clause. ** 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 ** path node
** upstream -- linked list pointer upwards ** upstream -- linked list pointer upwards
** downstream -- ditto, downwards ** downstream -- ditto, downwards
...@@ -285,7 +285,7 @@ typedef struct Stream ...@@ -285,7 +285,7 @@ typedef struct Stream
{ {
NodeTag type; NodeTag type;
Path *pathptr; Path *pathptr;
ClauseInfo *cinfo; RestrictInfo *cinfo;
int *clausetype; int *clausetype;
struct Stream *upstream; struct Stream *upstream;
struct Stream *downstream; struct Stream *downstream;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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); ...@@ -52,10 +52,10 @@ extern int page_size(int tuples, int width);
* prototypes for fuctions in clausesel.h-- * prototypes for fuctions in clausesel.h--
* routines to compute clause selectivities * routines to compute clause selectivities
*/ */
extern void set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity); extern void set_clause_selectivities(List *restrictinfo_list, Cost new_selectivity);
extern Cost product_selec(List *clauseinfo_list); extern Cost product_selec(List *restrictinfo_list);
extern void set_rest_relselec(Query *root, List *rel_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, extern Cost compute_clause_selec(Query *root,
Node *clause, List *or_selectivities); Node *clause, List *or_selectivities);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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); ...@@ -28,7 +28,7 @@ extern List *find_paths(Query *root, List *rels);
* routines to generate index paths * routines to generate index paths
*/ */
extern List *find_index_paths(Query *root, RelOptInfo * rel, List *indices, extern List *find_index_paths(Query *root, RelOptInfo * rel, List *indices,
List *clauseinfo_list, List *restrictinfo_list,
List *joininfo_list); List *joininfo_list);
/* /*
...@@ -47,7 +47,7 @@ extern List *create_or_index_paths(Query *root, RelOptInfo * rel, List *clauses) ...@@ -47,7 +47,7 @@ extern List *create_or_index_paths(Query *root, RelOptInfo * rel, List *clauses)
* hashutils.h * hashutils.h
* routines to deal with hash keys and clauses * 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); int inner_relid);
/* /*
...@@ -68,7 +68,7 @@ extern List *new_join_pathkeys(List *outer_pathkeys, ...@@ -68,7 +68,7 @@ extern List *new_join_pathkeys(List *outer_pathkeys,
* mergeutils.h * mergeutils.h
* routines to deal with merge keys and clauses * 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); int inner_relid);
extern MInfo *match_order_mergeinfo(PathOrder *ordering, extern MInfo *match_order_mergeinfo(PathOrder *ordering,
List *mergeinfo_list); List *mergeinfo_list);
......
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
* *
* clauseinfo.h-- * restrictinfo.h--
* prototypes for clauseinfo.c. * prototypes for restrictinfo.c.
* *
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: clauseinfo.h,v 1.9 1998/09/01 04:36:52 momjian Exp $ * $Id: restrictinfo.h,v 1.1 1999/02/03 20:15:53 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
#ifndef CLAUSEINFO_H #ifndef RESTRICTINFO_H
#define CLAUSEINFO_H #define RESTRICTINFO_H
#include "nodes/pg_list.h" #include "nodes/pg_list.h"
#include "nodes/relation.h" #include "nodes/relation.h"
extern bool valid_or_clause(ClauseInfo * clauseinfo); extern bool valid_or_clause(RestrictInfo * restrictinfo);
extern List *get_actual_clauses(List *clauseinfo_list); extern List *get_actual_clauses(List *restrictinfo_list);
extern void get_relattvals(List *clauseinfo_list, List **attnos, extern void get_relattvals(List *restrictinfo_list, List **attnos,
List **values, List **flags); List **values, List **flags);
extern void get_joinvars(Oid relid, List *clauseinfo_list, extern void get_joinvars(Oid relid, List *restrictinfo_list,
List **attnos, List **values, List **flags); List **attnos, List **values, List **flags);
extern List *get_opnos(List *clauseinfo_list); extern List *get_opnos(List *restrictinfo_list);
#endif /* CLAUSEINFO_H */ #endif /* RESTRICTINFO_H */
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 */ ...@@ -51,8 +51,8 @@ extern int XfuncMode; /* defined in tcop/postgres.c */
/* function prototypes from planner/path/xfunc.c */ /* function prototypes from planner/path/xfunc.c */
extern void xfunc_trypullup(RelOptInfo * rel); extern void xfunc_trypullup(RelOptInfo * rel);
extern int xfunc_shouldpull(Path *childpath, JoinPath *parentpath, extern int xfunc_shouldpull(Path *childpath, JoinPath *parentpath,
int whichchild, ClauseInfo * maxcinfopt); int whichchild, RestrictInfo * maxcinfopt);
extern ClauseInfo *xfunc_pullup(Path *childpath, JoinPath *parentpath, ClauseInfo * cinfo, extern RestrictInfo *xfunc_pullup(Path *childpath, JoinPath *parentpath, RestrictInfo * cinfo,
int whichchild, int clausetype); int whichchild, int clausetype);
extern Cost xfunc_rank(Expr *clause); extern Cost xfunc_rank(Expr *clause);
extern Cost xfunc_expense(Query *queryInfo, Expr *clause); extern Cost xfunc_expense(Query *queryInfo, Expr *clause);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment