aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/nodes')
-rw-r--r--src/backend/nodes/copyfuncs.c49
-rw-r--r--src/backend/nodes/equalfuncs.c42
-rw-r--r--src/backend/nodes/freefuncs.c17
-rw-r--r--src/backend/nodes/makefuncs.c7
-rw-r--r--src/backend/nodes/outfuncs.c23
-rw-r--r--src/backend/nodes/readfuncs.c40
6 files changed, 81 insertions, 97 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 99b1c39c7e6..4895be72379 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.91 1999/08/16 02:17:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.92 1999/08/21 03:48:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -456,12 +456,6 @@ _copyAgg(Agg *from)
CopyPlanFields((Plan *) from, (Plan *) newnode);
- /*
- * Cannot copy agg list; it must be rebuilt to point to subnodes of
- * new node.
- */
- set_agg_tlist_references(newnode);
-
return newnode;
}
@@ -474,8 +468,8 @@ _copyGroupClause(GroupClause *from)
{
GroupClause *newnode = makeNode(GroupClause);
- newnode->grpOpoid = from->grpOpoid;
- newnode->tleGroupref = from->tleGroupref;
+ newnode->tleSortGroupRef = from->tleSortGroupRef;
+ newnode->sortop = from->sortop;
return newnode;
}
@@ -567,12 +561,11 @@ _copyResdom(Resdom *from)
newnode->resno = from->resno;
newnode->restype = from->restype;
newnode->restypmod = from->restypmod;
-
if (from->resname != NULL)
newnode->resname = pstrdup(from->resname);
+ newnode->ressortgroupref = from->ressortgroupref;
newnode->reskey = from->reskey;
newnode->reskeyop = from->reskeyop;
- newnode->resgroupref = from->resgroupref;
newnode->resjunk = from->resjunk;
return newnode;
@@ -862,8 +855,8 @@ _copyAggref(Aggref *from)
newnode->basetype = from->basetype;
newnode->aggtype = from->aggtype;
Node_Copy(from, newnode, target);
- newnode->aggno = from->aggno;
newnode->usenulls = from->usenulls;
+ newnode->aggno = from->aggno; /* probably not needed */
return newnode;
}
@@ -1345,8 +1338,8 @@ _copySortClause(SortClause *from)
{
SortClause *newnode = makeNode(SortClause);
- Node_Copy(from, newnode, resdom);
- newnode->opoid = from->opoid;
+ newnode->tleSortGroupRef = from->tleSortGroupRef;
+ newnode->sortop = from->sortop;
return newnode;
}
@@ -1398,33 +1391,29 @@ _copyQuery(Query *from)
newnode->isBinary = from->isBinary;
newnode->isTemp = from->isTemp;
newnode->unionall = from->unionall;
- if (from->uniqueFlag)
- newnode->uniqueFlag = pstrdup(from->uniqueFlag);
- Node_Copy(from, newnode, sortClause);
+ newnode->hasAggs = from->hasAggs;
+ newnode->hasSubLinks = from->hasSubLinks;
+
Node_Copy(from, newnode, rtable);
Node_Copy(from, newnode, targetList);
Node_Copy(from, newnode, qual);
+ Node_Copy(from, newnode, rowMark);
+ if (from->uniqueFlag)
+ newnode->uniqueFlag = pstrdup(from->uniqueFlag);
+ Node_Copy(from, newnode, sortClause);
Node_Copy(from, newnode, groupClause);
Node_Copy(from, newnode, havingQual);
- newnode->hasAggs = from->hasAggs;
- newnode->hasSubLinks = from->hasSubLinks;
-
- if (from->unionClause)
- {
- List *ulist,
- *temp_list = NIL;
-
- foreach(ulist, from->unionClause)
- temp_list = lappend(temp_list, copyObject(lfirst(ulist)));
- newnode->unionClause = temp_list;
- }
+ /* why is intersectClause missing? */
+ Node_Copy(from, newnode, unionClause);
Node_Copy(from, newnode, limitOffset);
Node_Copy(from, newnode, limitCount);
- Node_Copy(from, newnode, rowMark);
+ /* we do not copy the planner internal fields: base_rel_list,
+ * join_rel_list, query_pathkeys. Not entirely clear if this is right?
+ */
return newnode;
}
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 1c53fe6aede..d8538a45066 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.47 1999/08/16 02:17:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.48 1999/08/21 03:48:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,14 +34,23 @@ _equalResdom(Resdom *a, Resdom *b)
return false;
if (a->restypmod != b->restypmod)
return false;
- if (strcmp(a->resname, b->resname) != 0)
+ if (a->resname && b->resname)
+ {
+ if (strcmp(a->resname, b->resname) != 0)
+ return false;
+ }
+ else
+ {
+ /* must both be null to be equal */
+ if (a->resname != b->resname)
+ return false;
+ }
+ if (a->ressortgroupref != b->ressortgroupref)
return false;
if (a->reskey != b->reskey)
return false;
if (a->reskeyop != b->reskeyop)
return false;
- if (a->resgroupref != b->resgroupref)
- return false;
/* we ignore resjunk flag ... is this correct? */
return true;
@@ -208,10 +217,9 @@ _equalAggref(Aggref *a, Aggref *b)
return false;
if (!equal(a->target, b->target))
return false;
- if (a->aggno != b->aggno)
- return false;
if (a->usenulls != b->usenulls)
return false;
+ /* ignore aggno, which is only a private field for the executor */
return true;
}
@@ -503,6 +511,14 @@ _equalQuery(Query *a, Query *b)
return false;
if (a->hasSubLinks != b->hasSubLinks)
return false;
+ if (!equal(a->rtable, b->rtable))
+ return false;
+ if (!equal(a->targetList, b->targetList))
+ return false;
+ if (!equal(a->qual, b->qual))
+ return false;
+ if (!equal(a->rowMark, b->rowMark))
+ return false;
if (a->uniqueFlag && b->uniqueFlag)
{
if (strcmp(a->uniqueFlag, b->uniqueFlag) != 0)
@@ -515,14 +531,6 @@ _equalQuery(Query *a, Query *b)
}
if (!equal(a->sortClause, b->sortClause))
return false;
- if (!equal(a->rtable, b->rtable))
- return false;
- if (!equal(a->targetList, b->targetList))
- return false;
- if (!equal(a->qual, b->qual))
- return false;
- if (!equal(a->rowMark, b->rowMark))
- return false;
if (!equal(a->groupClause, b->groupClause))
return false;
if (!equal(a->havingQual, b->havingQual))
@@ -537,9 +545,9 @@ _equalQuery(Query *a, Query *b)
return false;
/*
- * We do not check the internal-to-the-planner fields base_rel_list
- * and join_rel_list. They might not be set yet, and in any case they
- * should be derivable from the other fields.
+ * We do not check the internal-to-the-planner fields: base_rel_list,
+ * join_rel_list, query_pathkeys. They might not be set yet, and
+ * in any case they should be derivable from the other fields.
*/
return true;
}
diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c
index 11f92b28d05..cad49be76bd 100644
--- a/src/backend/nodes/freefuncs.c
+++ b/src/backend/nodes/freefuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.25 1999/08/16 02:17:42 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.26 1999/08/21 03:48:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -371,8 +371,6 @@ _freeAgg(Agg *node)
{
FreePlanFields((Plan *) node);
- freeList(node->aggs);
-
pfree(node);
}
@@ -964,8 +962,6 @@ _freeRowMark(RowMark *node)
static void
_freeSortClause(SortClause *node)
{
- freeObject(node->resdom);
-
pfree(node);
}
@@ -1000,19 +996,22 @@ _freeQuery(Query *node)
}
if (node->into)
pfree(node->into);
+ freeObject(node->rtable);
+ freeObject(node->targetList);
+ freeObject(node->qual);
+ freeObject(node->rowMark);
if (node->uniqueFlag)
pfree(node->uniqueFlag);
freeObject(node->sortClause);
- freeObject(node->rtable);
- freeObject(node->targetList);
- freeObject(node->qual);
freeObject(node->groupClause);
freeObject(node->havingQual);
+ /* why not intersectClause? */
freeObject(node->unionClause);
freeObject(node->limitOffset);
freeObject(node->limitCount);
- freeObject(node->rowMark);
+
+ /* XXX should we be freeing the planner internal fields? */
pfree(node);
}
diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c
index d64fdd8c462..26ebed1d458 100644
--- a/src/backend/nodes/makefuncs.c
+++ b/src/backend/nodes/makefuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.16 1999/07/15 22:39:17 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.17 1999/08/21 03:48:58 tgl Exp $
*
* NOTES
* Creator functions in POSTGRES 4.2 are generated automatically. Most of
@@ -102,9 +102,12 @@ makeResdom(AttrNumber resno,
resdom->restype = restype;
resdom->restypmod = restypmod;
resdom->resname = resname;
+ /* For historical reasons, ressortgroupref defaults to 0 while
+ * reskey/reskeyop are passed in explicitly. This is pretty silly.
+ */
+ resdom->ressortgroupref = 0;
resdom->reskey = reskey;
resdom->reskeyop = reskeyop;
- resdom->resgroupref = 0;
resdom->resjunk = resjunk;
return resdom;
}
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 39b0625d933..226dbb1cef0 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: outfuncs.c,v 1.93 1999/08/16 02:17:42 tgl Exp $
+ * $Id: outfuncs.c,v 1.94 1999/08/21 03:48:58 tgl Exp $
*
* NOTES
* Every (plan) node in POSTGRES has an associated "out" routine which
@@ -237,18 +237,15 @@ _outQuery(StringInfo str, Query *node)
static void
_outSortClause(StringInfo str, SortClause *node)
{
- appendStringInfo(str, " SORTCLAUSE :resdom ");
- _outNode(str, node->resdom);
-
- appendStringInfo(str, " :opoid %u ", node->opoid);
+ appendStringInfo(str, " SORTCLAUSE :tleSortGroupRef %d :sortop %u ",
+ node->tleSortGroupRef, node->sortop);
}
static void
_outGroupClause(StringInfo str, GroupClause *node)
{
- appendStringInfo(str, " GROUPCLAUSE :grpOpoid %u :tleGroupref %d",
- node->grpOpoid,
- node->tleGroupref);
+ appendStringInfo(str, " GROUPCLAUSE :tleSortGroupRef %d :sortop %u ",
+ node->tleSortGroupRef, node->sortop);
}
/*
@@ -482,9 +479,6 @@ _outAgg(StringInfo str, Agg *node)
appendStringInfo(str, " AGG ");
_outPlanInfo(str, (Plan *) node);
-
- appendStringInfo(str, " :aggs ");
- _outNode(str, node->aggs);
}
static void
@@ -549,8 +543,8 @@ _outResdom(StringInfo str, Resdom *node)
node->reskey,
node->reskeyop);
- appendStringInfo(str, " :resgroupref %d :resjunk %s ",
- node->resgroupref,
+ appendStringInfo(str, " :ressortgroupref %d :resjunk %s ",
+ node->ressortgroupref,
node->resjunk ? "true" : "false");
}
@@ -665,8 +659,7 @@ _outAggref(StringInfo str, Aggref *node)
node->aggtype);
_outNode(str, node->target);
- appendStringInfo(str, ":aggno %d :usenulls %s",
- node->aggno,
+ appendStringInfo(str, " :usenulls %s ",
node->usenulls ? "true" : "false");
}
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 98385dd96f6..588528daa1d 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.72 1999/08/16 02:17:43 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.73 1999/08/21 03:48:58 tgl Exp $
*
* NOTES
* Most of the read functions for plan nodes are tested. (In fact, they
@@ -184,12 +184,13 @@ _readSortClause()
local_node = makeNode(SortClause);
- token = lsptok(NULL, &length); /* skip the :resdom */
- local_node->resdom = nodeRead(true);
+ token = lsptok(NULL, &length); /* skip :tleSortGroupRef */
+ token = lsptok(NULL, &length); /* get tleSortGroupRef */
+ local_node->tleSortGroupRef = strtoul(token, NULL, 10);
- token = lsptok(NULL, &length); /* skip :opoid */
- token = lsptok(NULL, &length); /* get opoid */
- local_node->opoid = strtoul(token, NULL, 10);
+ token = lsptok(NULL, &length); /* skip :sortop */
+ token = lsptok(NULL, &length); /* get sortop */
+ local_node->sortop = strtoul(token, NULL, 10);
return local_node;
}
@@ -207,13 +208,13 @@ _readGroupClause()
local_node = makeNode(GroupClause);
- token = lsptok(NULL, &length); /* skip :grpOpoid */
- token = lsptok(NULL, &length); /* get grpOpoid */
- local_node->grpOpoid = strtoul(token, NULL, 10);
+ token = lsptok(NULL, &length); /* skip :tleSortGroupRef */
+ token = lsptok(NULL, &length); /* get tleSortGroupRef */
+ local_node->tleSortGroupRef = strtoul(token, NULL, 10);
- token = lsptok(NULL, &length); /* skip :tleGroupref */
- token = lsptok(NULL, &length); /* get tleGroupref */
- local_node->tleGroupref = strtoul(token, NULL, 10);
+ token = lsptok(NULL, &length); /* skip :sortop */
+ token = lsptok(NULL, &length); /* get sortop */
+ local_node->sortop = strtoul(token, NULL, 10);
return local_node;
}
@@ -600,15 +601,10 @@ static Agg *
_readAgg()
{
Agg *local_node;
- char *token;
- int length;
local_node = makeNode(Agg);
_getPlan((Plan *) local_node);
- token = lsptok(NULL, &length); /* eat :agg */
- local_node->aggs = nodeRead(true); /* now read it */
-
return local_node;
}
@@ -712,9 +708,9 @@ _readResdom()
token = lsptok(NULL, &length); /* get reskeyop */
local_node->reskeyop = (Oid) atol(token);
- token = lsptok(NULL, &length); /* eat :resgroupref */
- token = lsptok(NULL, &length); /* get resgroupref */
- local_node->resgroupref = strtoul(token, NULL, 10);
+ token = lsptok(NULL, &length); /* eat :ressortgroupref */
+ token = lsptok(NULL, &length); /* get ressortgroupref */
+ local_node->ressortgroupref = strtoul(token, NULL, 10);
token = lsptok(NULL, &length); /* eat :resjunk */
token = lsptok(NULL, &length); /* get resjunk */
@@ -1163,10 +1159,6 @@ _readAggref()
token = lsptok(NULL, &length); /* eat :target */
local_node->target = nodeRead(true); /* now read it */
- token = lsptok(NULL, &length); /* eat :aggno */
- token = lsptok(NULL, &length); /* get aggno */
- local_node->aggno = atoi(token);
-
token = lsptok(NULL, &length); /* eat :usenulls */
token = lsptok(NULL, &length); /* get usenulls */
local_node->usenulls = (token[0] == 't') ? true : false;