diff options
Diffstat (limited to 'src/backend/nodes/copyfuncs.c')
-rw-r--r-- | src/backend/nodes/copyfuncs.c | 2634 |
1 files changed, 1346 insertions, 1288 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index e763b9cd7ce..caf9e176ef3 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -1,13 +1,13 @@ /*------------------------------------------------------------------------- * * copyfuncs.c-- - * Copy functions for Postgres tree nodes. + * Copy functions for Postgres tree nodes. * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.6 1997/09/04 13:24:01 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.7 1997/09/07 04:42:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -25,7 +25,7 @@ #include "parser/parse_query.h" #include "utils/syscache.h" -#include "utils/builtins.h" /* for namecpy */ +#include "utils/builtins.h" /* for namecpy */ #include "utils/elog.h" #include "utils/palloc.h" #include "catalog/pg_type.h" @@ -33,1716 +33,1774 @@ /* * listCopy-- - * this copy function only copies the "lcons-cells" of the list but not - * its contents. (good for list of pointers as well as list of integers). + * this copy function only copies the "lcons-cells" of the list but not + * its contents. (good for list of pointers as well as list of integers). */ -List * -listCopy(List *list) +List * +listCopy(List * list) { - List *newlist=NIL; - List *l, *nl=NIL; - - foreach(l, list) { - if (newlist==NIL) { - newlist = nl = lcons(lfirst(l),NIL); - }else { - lnext(nl) = lcons(lfirst(l),NIL); - nl = lnext(nl); + List *newlist = NIL; + List *l, + *nl = NIL; + + foreach(l, list) + { + if (newlist == NIL) + { + newlist = nl = lcons(lfirst(l), NIL); + } + else + { + lnext(nl) = lcons(lfirst(l), NIL); + nl = lnext(nl); + } } - } - return newlist; + return newlist; } - + /* * Node_Copy-- - * a macro to simplify calling of copyObject on the specified field + * a macro to simplify calling of copyObject on the specified field */ #define Node_Copy(from, newnode, field) \ - newnode->field = copyObject(from->field) + newnode->field = copyObject(from->field) /* **************************************************************** - * plannodes.h copy functions + * plannodes.h copy functions * **************************************************************** */ /* ---------------- - * CopyPlanFields + * CopyPlanFields * - * This function copies the fields of the Plan node. It is used by - * all the copy functions for classes which inherit from Plan. + * This function copies the fields of the Plan node. It is used by + * all the copy functions for classes which inherit from Plan. * ---------------- */ static void -CopyPlanFields(Plan *from, Plan *newnode) +CopyPlanFields(Plan * from, Plan * newnode) { - newnode->cost = from->cost; - newnode->plan_size = from->plan_size; - newnode->plan_width = from->plan_width; - newnode->state = from->state; - newnode->targetlist = copyObject(from->targetlist); - newnode->qual = copyObject(from->qual); - newnode->lefttree = copyObject(from->lefttree); - newnode->righttree = copyObject(from->righttree); + newnode->cost = from->cost; + newnode->plan_size = from->plan_size; + newnode->plan_width = from->plan_width; + newnode->state = from->state; + newnode->targetlist = copyObject(from->targetlist); + newnode->qual = copyObject(from->qual); + newnode->lefttree = copyObject(from->lefttree); + newnode->righttree = copyObject(from->righttree); } /* ---------------- - * _copyPlan + * _copyPlan * ---------------- */ -static Plan * -_copyPlan(Plan *from) +static Plan * +_copyPlan(Plan * from) { - Plan *newnode = makeNode(Plan); - - /* ---------------- - * copy the node superclass fields - * ---------------- - */ - CopyPlanFields(from, newnode); - - return newnode; + Plan *newnode = makeNode(Plan); + + /* ---------------- + * copy the node superclass fields + * ---------------- + */ + CopyPlanFields(from, newnode); + + return newnode; } /* ---------------- - * _copyExistential + * _copyExistential * ---------------- */ static Existential * -_copyExistential(Existential *from) +_copyExistential(Existential * from) { - Existential *newnode = makeNode(Existential); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields(from, newnode); - - return newnode; + Existential *newnode = makeNode(Existential); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields(from, newnode); + + return newnode; } /* ---------------- - * _copyResult + * _copyResult * ---------------- */ -static Result * -_copyResult(Result *from) +static Result * +_copyResult(Result * from) { - Result *newnode = makeNode(Result); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, resconstantqual); - Node_Copy(from, newnode, resstate); - - return newnode; + Result *newnode = makeNode(Result); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, resconstantqual); + Node_Copy(from, newnode, resstate); + + return newnode; } /* ---------------- - * _copyAppend + * _copyAppend * ---------------- */ -static Append * -_copyAppend(Append *from) +static Append * +_copyAppend(Append * from) { - Append *newnode = makeNode(Append); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, unionplans); - newnode->unionrelid = from->unionrelid; - Node_Copy(from, newnode, unionrtentries); - Node_Copy(from, newnode, unionstate); - - return newnode; + Append *newnode = makeNode(Append); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, unionplans); + newnode->unionrelid = from->unionrelid; + Node_Copy(from, newnode, unionrtentries); + Node_Copy(from, newnode, unionstate); + + return newnode; } /* ---------------- - * CopyScanFields + * CopyScanFields * - * This function copies the fields of the Scan node. It is used by - * all the copy functions for classes which inherit from Scan. + * This function copies the fields of the Scan node. It is used by + * all the copy functions for classes which inherit from Scan. * ---------------- */ static void -CopyScanFields(Scan *from, Scan *newnode) +CopyScanFields(Scan * from, Scan * newnode) { - newnode->scanrelid = from->scanrelid; - Node_Copy(from, newnode, scanstate); - return; + newnode->scanrelid = from->scanrelid; + Node_Copy(from, newnode, scanstate); + return; } /* ---------------- - * _copyScan + * _copyScan * ---------------- */ -static Scan * -_copyScan(Scan *from) +static Scan * +_copyScan(Scan * from) { - Scan *newnode = makeNode(Scan); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyScanFields(from, newnode); - - return newnode; + Scan *newnode = makeNode(Scan); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyScanFields(from, newnode); + + return newnode; } /* ---------------- - * _copySeqScan + * _copySeqScan * ---------------- */ static SeqScan * -_copySeqScan(SeqScan *from) +_copySeqScan(SeqScan * from) { - SeqScan *newnode = makeNode(SeqScan); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyScanFields((Scan*)from, (Scan*)newnode); - - return newnode; + SeqScan *newnode = makeNode(SeqScan); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyScanFields((Scan *) from, (Scan *) newnode); + + return newnode; } /* ---------------- - * _copyIndexScan + * _copyIndexScan * ---------------- */ static IndexScan * -_copyIndexScan(IndexScan *from) +_copyIndexScan(IndexScan * from) { - IndexScan *newnode = makeNode(IndexScan); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyScanFields((Scan*)from, (Scan*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->indxid = listCopy(from->indxid); - Node_Copy(from, newnode, indxqual); - Node_Copy(from, newnode, indxstate); - - return newnode; + IndexScan *newnode = makeNode(IndexScan); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyScanFields((Scan *) from, (Scan *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->indxid = listCopy(from->indxid); + Node_Copy(from, newnode, indxqual); + Node_Copy(from, newnode, indxstate); + + return newnode; } /* ---------------- - * CopyJoinFields + * CopyJoinFields * - * This function copies the fields of the Join node. It is used by - * all the copy functions for classes which inherit from Join. + * This function copies the fields of the Join node. It is used by + * all the copy functions for classes which inherit from Join. * ---------------- */ static void -CopyJoinFields(Join *from, Join *newnode) +CopyJoinFields(Join * from, Join * newnode) { - /* nothing extra */ - return; + /* nothing extra */ + return; } /* ---------------- - * _copyJoin + * _copyJoin * ---------------- */ -static Join * -_copyJoin(Join *from) +static Join * +_copyJoin(Join * from) { - Join *newnode = makeNode(Join); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyJoinFields(from, newnode); - - return newnode; + Join *newnode = makeNode(Join); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyJoinFields(from, newnode); + + return newnode; } /* ---------------- - * _copyNestLoop + * _copyNestLoop * ---------------- */ static NestLoop * -_copyNestLoop(NestLoop *from) +_copyNestLoop(NestLoop * from) { - NestLoop *newnode = makeNode(NestLoop); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyJoinFields((Join*)from, (Join*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, nlstate); - - return newnode; + NestLoop *newnode = makeNode(NestLoop); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyJoinFields((Join *) from, (Join *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, nlstate); + + return newnode; } /* ---------------- - * _copyMergeJoin + * _copyMergeJoin * ---------------- */ static MergeJoin * -_copyMergeJoin(MergeJoin *from) +_copyMergeJoin(MergeJoin * from) { - MergeJoin *newnode = makeNode(MergeJoin); - List *newlist; - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyJoinFields((Join*)from, (Join*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, mergeclauses); - - newnode->mergesortop = from->mergesortop; - newlist = NIL; - - newnode->mergerightorder = (Oid *)palloc(sizeof(Oid)*2); - newnode->mergerightorder[0] = from->mergerightorder[0]; - newnode->mergerightorder[1] = 0; - - newnode->mergeleftorder = (Oid *)palloc(sizeof(Oid)*2); - newnode->mergeleftorder[0] = from->mergeleftorder[0]; - newnode->mergeleftorder[1] = 0; - - Node_Copy(from, newnode, mergestate); - - return newnode; + MergeJoin *newnode = makeNode(MergeJoin); + List *newlist; + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyJoinFields((Join *) from, (Join *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, mergeclauses); + + newnode->mergesortop = from->mergesortop; + newlist = NIL; + + newnode->mergerightorder = (Oid *) palloc(sizeof(Oid) * 2); + newnode->mergerightorder[0] = from->mergerightorder[0]; + newnode->mergerightorder[1] = 0; + + newnode->mergeleftorder = (Oid *) palloc(sizeof(Oid) * 2); + newnode->mergeleftorder[0] = from->mergeleftorder[0]; + newnode->mergeleftorder[1] = 0; + + Node_Copy(from, newnode, mergestate); + + return newnode; } /* ---------------- - * _copyHashJoin + * _copyHashJoin * ---------------- */ static HashJoin * -_copyHashJoin(HashJoin *from) +_copyHashJoin(HashJoin * from) { - HashJoin *newnode = makeNode(HashJoin); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyJoinFields((Join*)from, (Join*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, hashclauses); - - newnode->hashjoinop = from->hashjoinop; - - Node_Copy(from, newnode, hashjoinstate); - - newnode->hashjointable = from->hashjointable; - newnode->hashjointablekey = from->hashjointablekey; - newnode->hashjointablesize = from->hashjointablesize; - newnode->hashdone = from->hashdone; - - return newnode; + HashJoin *newnode = makeNode(HashJoin); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyJoinFields((Join *) from, (Join *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, hashclauses); + + newnode->hashjoinop = from->hashjoinop; + + Node_Copy(from, newnode, hashjoinstate); + + newnode->hashjointable = from->hashjointable; + newnode->hashjointablekey = from->hashjointablekey; + newnode->hashjointablesize = from->hashjointablesize; + newnode->hashdone = from->hashdone; + + return newnode; } /* ---------------- - * CopyTempFields + * CopyTempFields * - * This function copies the fields of the Temp node. It is used by - * all the copy functions for classes which inherit from Temp. + * This function copies the fields of the Temp node. It is used by + * all the copy functions for classes which inherit from Temp. * ---------------- */ static void -CopyTempFields(Temp *from, Temp *newnode) +CopyTempFields(Temp * from, Temp * newnode) { - newnode->tempid = from->tempid; - newnode->keycount = from->keycount; - return; + newnode->tempid = from->tempid; + newnode->keycount = from->keycount; + return; } /* ---------------- - * _copyTemp + * _copyTemp * ---------------- */ -static Temp * -_copyTemp(Temp *from) +static Temp * +_copyTemp(Temp * from) { - Temp *newnode = makeNode(Temp); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyTempFields(from, newnode); - - return newnode; + Temp *newnode = makeNode(Temp); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyTempFields(from, newnode); + + return newnode; } /* ---------------- - * _copyMaterial + * _copyMaterial * ---------------- */ static Material * -_copyMaterial(Material *from) +_copyMaterial(Material * from) { - Material *newnode = makeNode(Material); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyTempFields((Temp*)from, (Temp*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, matstate); - - return newnode; + Material *newnode = makeNode(Material); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyTempFields((Temp *) from, (Temp *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, matstate); + + return newnode; } /* ---------------- - * _copySort + * _copySort * ---------------- */ -static Sort * -_copySort(Sort *from) +static Sort * +_copySort(Sort * from) { - Sort *newnode = makeNode(Sort); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyTempFields((Temp*)from, (Temp*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, sortstate); - - return newnode; + Sort *newnode = makeNode(Sort); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyTempFields((Temp *) from, (Temp *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, sortstate); + + return newnode; } /* --------------- - * _copyAgg + * _copyAgg * -------------- */ -static Agg * -_copyAgg(Agg *from) +static Agg * +_copyAgg(Agg * from) { - Agg *newnode = makeNode(Agg); - int i; - - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyTempFields((Temp*)from, (Temp*)newnode); - - newnode->numAgg = from->numAgg; - newnode->aggs = malloc(sizeof(Aggreg *)); - for(i=0; i < from->numAgg; i++) { - newnode->aggs[i] = copyObject(from->aggs[i]); - } - - Node_Copy(from, newnode, aggstate); - - return newnode; + Agg *newnode = makeNode(Agg); + int i; + + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyTempFields((Temp *) from, (Temp *) newnode); + + newnode->numAgg = from->numAgg; + newnode->aggs = malloc(sizeof(Aggreg *)); + for (i = 0; i < from->numAgg; i++) + { + newnode->aggs[i] = copyObject(from->aggs[i]); + } + + Node_Copy(from, newnode, aggstate); + + return newnode; } /* ---------------- - * _copyUnique + * _copyUnique * ---------------- */ -static Unique * -_copyUnique(Unique *from) +static Unique * +_copyUnique(Unique * from) { - Unique *newnode = makeNode(Unique); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - CopyTempFields((Temp*)from, (Temp*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, uniquestate); - - return newnode; + Unique *newnode = makeNode(Unique); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + CopyTempFields((Temp *) from, (Temp *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, uniquestate); + + return newnode; } /* ---------------- - * _copyHash + * _copyHash * ---------------- */ -static Hash * -_copyHash(Hash *from) +static Hash * +_copyHash(Hash * from) { - Hash *newnode = makeNode(Hash); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - CopyPlanFields((Plan*)from, (Plan*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, hashkey); - Node_Copy(from, newnode, hashstate); - - newnode->hashtable = from->hashtable; - newnode->hashtablekey = from->hashtablekey; - newnode->hashtablesize = from->hashtablesize; - - return newnode; + Hash *newnode = makeNode(Hash); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + CopyPlanFields((Plan *) from, (Plan *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, hashkey); + Node_Copy(from, newnode, hashstate); + + newnode->hashtable = from->hashtable; + newnode->hashtablekey = from->hashtablekey; + newnode->hashtablesize = from->hashtablesize; + + return newnode; } /* **************************************************************** - * primnodes.h copy functions + * primnodes.h copy functions * **************************************************************** */ /* ---------------- - * _copyResdom + * _copyResdom * ---------------- */ -static Resdom * -_copyResdom(Resdom *from) +static Resdom * +_copyResdom(Resdom * from) { - Resdom *newnode = makeNode(Resdom); - - newnode->resno = from->resno; - newnode->restype = from->restype; - newnode->reslen = from->reslen; - - if (from->resname != NULL) { - newnode->resname = palloc(strlen(from->resname)+1); - strcpy(newnode->resname, from->resname); - } else - newnode->resname = (char*) NULL; - - newnode->reskey = from->reskey; - newnode->reskeyop = from->reskeyop; - newnode->resjunk = from->resjunk; - - return newnode; + Resdom *newnode = makeNode(Resdom); + + newnode->resno = from->resno; + newnode->restype = from->restype; + newnode->reslen = from->reslen; + + if (from->resname != NULL) + { + newnode->resname = palloc(strlen(from->resname) + 1); + strcpy(newnode->resname, from->resname); + } + else + newnode->resname = (char *) NULL; + + newnode->reskey = from->reskey; + newnode->reskeyop = from->reskeyop; + newnode->resjunk = from->resjunk; + + return newnode; } -static Fjoin * -_copyFjoin(Fjoin *from) +static Fjoin * +_copyFjoin(Fjoin * from) { - Fjoin *newnode = makeNode(Fjoin); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - - newnode->fj_initialized = from->fj_initialized; - newnode->fj_nNodes = from->fj_nNodes; - - Node_Copy(from, newnode, fj_innerNode); - - newnode->fj_results = (DatumPtr) - palloc((from->fj_nNodes)*sizeof(Datum)); - - newnode->fj_alwaysDone = (BoolPtr) - palloc((from->fj_nNodes)*sizeof(bool)); - - memmove(from->fj_results, - newnode->fj_results, - (from->fj_nNodes)*sizeof(Datum)); - - memmove(from->fj_alwaysDone, - newnode->fj_alwaysDone, - (from->fj_nNodes)*sizeof(bool)); - - - return newnode; + Fjoin *newnode = makeNode(Fjoin); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + + newnode->fj_initialized = from->fj_initialized; + newnode->fj_nNodes = from->fj_nNodes; + + Node_Copy(from, newnode, fj_innerNode); + + newnode->fj_results = (DatumPtr) + palloc((from->fj_nNodes) * sizeof(Datum)); + + newnode->fj_alwaysDone = (BoolPtr) + palloc((from->fj_nNodes) * sizeof(bool)); + + memmove(from->fj_results, + newnode->fj_results, + (from->fj_nNodes) * sizeof(Datum)); + + memmove(from->fj_alwaysDone, + newnode->fj_alwaysDone, + (from->fj_nNodes) * sizeof(bool)); + + + return newnode; } /* ---------------- - * _copyExpr + * _copyExpr * ---------------- */ -static Expr * -_copyExpr(Expr *from) +static Expr * +_copyExpr(Expr * from) { - Expr *newnode = makeNode(Expr); - - /* ---------------- - * copy node superclass fields - * ---------------- - */ - newnode->typeOid = from->typeOid; - newnode->opType = from->opType; - - Node_Copy(from, newnode, oper); - Node_Copy(from, newnode, args); - - return newnode; + Expr *newnode = makeNode(Expr); + + /* ---------------- + * copy node superclass fields + * ---------------- + */ + newnode->typeOid = from->typeOid; + newnode->opType = from->opType; + + Node_Copy(from, newnode, oper); + Node_Copy(from, newnode, args); + + return newnode; } /* ---------------- - * _copyVar + * _copyVar * ---------------- */ -static Var * -_copyVar(Var *from) +static Var * +_copyVar(Var * from) { - Var *newnode = makeNode(Var); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->varno = from->varno; - newnode->varattno = from->varattno; - newnode->vartype = from->vartype; - - newnode->varnoold = from->varnoold; - newnode->varoattno = from->varoattno; - - return newnode; + Var *newnode = makeNode(Var); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->varno = from->varno; + newnode->varattno = from->varattno; + newnode->vartype = from->vartype; + + newnode->varnoold = from->varnoold; + newnode->varoattno = from->varoattno; + + return newnode; } /* ---------------- - * _copyOper + * _copyOper * ---------------- */ -static Oper * -_copyOper(Oper *from) +static Oper * +_copyOper(Oper * from) { - Oper *newnode = makeNode(Oper); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->opno = from->opno; - newnode->opid = from->opid; - newnode->opresulttype = from->opresulttype; - newnode->opsize = from->opsize; - - /* - * NOTE: shall we copy the cache structure or just the pointer ? - * Alternatively we can set 'op_fcache' to NULL, in which - * case the executor will initialize it when it needs it... - */ - newnode->op_fcache = from->op_fcache; - - return newnode; + Oper *newnode = makeNode(Oper); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->opno = from->opno; + newnode->opid = from->opid; + newnode->opresulttype = from->opresulttype; + newnode->opsize = from->opsize; + + /* + * NOTE: shall we copy the cache structure or just the pointer ? + * Alternatively we can set 'op_fcache' to NULL, in which case the + * executor will initialize it when it needs it... + */ + newnode->op_fcache = from->op_fcache; + + return newnode; } /* ---------------- - * _copyConst + * _copyConst * ---------------- */ -static Const * -_copyConst(Const *from) +static Const * +_copyConst(Const * from) { - static Oid cached_type; - static bool cached_typbyval; - - Const *newnode = makeNode(Const); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->consttype = from->consttype; - newnode->constlen = from->constlen; - - /* ---------------- - * XXX super cheesy hack until parser/planner - * puts in the right values here. - * ---------------- - */ - if (cached_type != from->consttype) { - HeapTuple typeTuple; - TypeTupleForm typeStruct; - - /* ---------------- - * get the type tuple corresponding to the paramList->type, - * If this fails, returnValue has been pre-initialized - * to "null" so we just return it. - * ---------------- - */ - typeTuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(from->consttype), - 0,0,0); - + static Oid cached_type; + static bool cached_typbyval; + + Const *newnode = makeNode(Const); + /* ---------------- - * get the type length and by-value from the type tuple and - * save the information in our one element cache. + * copy remainder of node * ---------------- */ - Assert(PointerIsValid(typeTuple)); - - typeStruct = (TypeTupleForm) GETSTRUCT(typeTuple); - cached_typbyval = (typeStruct)->typbyval ? true : false ; - cached_type = from->consttype; - } - - from->constbyval = cached_typbyval; - - if (!from->constisnull) { + newnode->consttype = from->consttype; + newnode->constlen = from->constlen; + /* ---------------- - * copying the Datum in a const node is a bit trickier - * because it might be a pointer and it might also be of - * variable length... + * XXX super cheesy hack until parser/planner + * puts in the right values here. * ---------------- */ - if (from->constbyval == true) { - /* ---------------- - * passed by value so just copy the datum. - * ---------------- - */ - newnode->constvalue = from->constvalue; - } else { - /* ---------------- - * not passed by value. datum contains a pointer. - * ---------------- - */ - if (from->constlen != -1) { + if (cached_type != from->consttype) + { + HeapTuple typeTuple; + TypeTupleForm typeStruct; + + /* ---------------- + * get the type tuple corresponding to the paramList->type, + * If this fails, returnValue has been pre-initialized + * to "null" so we just return it. + * ---------------- + */ + typeTuple = SearchSysCacheTuple(TYPOID, + ObjectIdGetDatum(from->consttype), + 0, 0, 0); + /* ---------------- - * fixed length structure + * get the type length and by-value from the type tuple and + * save the information in our one element cache. * ---------------- */ - newnode->constvalue = PointerGetDatum(palloc(from->constlen)); - memmove((char*)newnode->constvalue, - (char*)from->constvalue, from->constlen); - } else { + Assert(PointerIsValid(typeTuple)); + + typeStruct = (TypeTupleForm) GETSTRUCT(typeTuple); + cached_typbyval = (typeStruct)->typbyval ? true : false; + cached_type = from->consttype; + } + + from->constbyval = cached_typbyval; + + if (!from->constisnull) + { /* ---------------- - * variable length structure. here the length is stored - * in the first int pointed to by the constval. + * copying the Datum in a const node is a bit trickier + * because it might be a pointer and it might also be of + * variable length... * ---------------- */ - int length; - length = *((int *) from->constvalue); - newnode->constvalue = PointerGetDatum(palloc(length)); - memmove((char*)newnode->constvalue, - (char*)from->constvalue, length); - } + if (from->constbyval == true) + { + /* ---------------- + * passed by value so just copy the datum. + * ---------------- + */ + newnode->constvalue = from->constvalue; + } + else + { + /* ---------------- + * not passed by value. datum contains a pointer. + * ---------------- + */ + if (from->constlen != -1) + { + /* ---------------- + * fixed length structure + * ---------------- + */ + newnode->constvalue = PointerGetDatum(palloc(from->constlen)); + memmove((char *) newnode->constvalue, + (char *) from->constvalue, from->constlen); + } + else + { + /* ---------------- + * variable length structure. here the length is stored + * in the first int pointed to by the constval. + * ---------------- + */ + int length; + + length = *((int *) from->constvalue); + newnode->constvalue = PointerGetDatum(palloc(length)); + memmove((char *) newnode->constvalue, + (char *) from->constvalue, length); + } + } + } + else + { + newnode->constvalue = from->constvalue; } - } - else { - newnode->constvalue = from->constvalue; - } - newnode->constisnull = from->constisnull; - newnode->constbyval = from->constbyval; - - return newnode; + newnode->constisnull = from->constisnull; + newnode->constbyval = from->constbyval; + + return newnode; } /* ---------------- - * _copyParam + * _copyParam * ---------------- */ -static Param * -_copyParam(Param *from) +static Param * +_copyParam(Param * from) { - Param *newnode = makeNode(Param); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->paramkind = from->paramkind; - newnode->paramid = from->paramid; - - if (from->paramname != NULL) { - newnode->paramname = pstrdup(from->paramname); - } else - newnode->paramname = (char*)NULL; - - newnode->paramtype = from->paramtype; - Node_Copy(from, newnode, param_tlist); - - return newnode; + Param *newnode = makeNode(Param); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->paramkind = from->paramkind; + newnode->paramid = from->paramid; + + if (from->paramname != NULL) + { + newnode->paramname = pstrdup(from->paramname); + } + else + newnode->paramname = (char *) NULL; + + newnode->paramtype = from->paramtype; + Node_Copy(from, newnode, param_tlist); + + return newnode; } /* ---------------- - * _copyFunc + * _copyFunc * ---------------- */ -static Func * -_copyFunc(Func *from) +static Func * +_copyFunc(Func * from) { - Func *newnode = makeNode(Func); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->funcid = from->funcid; - newnode->functype = from->functype; - newnode->funcisindex = from->funcisindex; - newnode->funcsize = from->funcsize; - newnode->func_fcache = from->func_fcache; - Node_Copy(from, newnode, func_tlist); - Node_Copy(from, newnode, func_planlist); - - return newnode; + Func *newnode = makeNode(Func); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->funcid = from->funcid; + newnode->functype = from->functype; + newnode->funcisindex = from->funcisindex; + newnode->funcsize = from->funcsize; + newnode->func_fcache = from->func_fcache; + Node_Copy(from, newnode, func_tlist); + Node_Copy(from, newnode, func_planlist); + + return newnode; } /* ---------------- - * _copyAggreg + * _copyAggreg * ---------------- */ -static Aggreg * -_copyAggreg(Aggreg *from) +static Aggreg * +_copyAggreg(Aggreg * from) { - Aggreg *newnode = makeNode(Aggreg); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->aggname = pstrdup(from->aggname); - newnode->basetype = from->basetype; - newnode->aggtype = from->aggtype; - - Node_Copy(from, newnode, target); - - newnode->aggno = from->aggno; - - return newnode; + Aggreg *newnode = makeNode(Aggreg); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->aggname = pstrdup(from->aggname); + newnode->basetype = from->basetype; + newnode->aggtype = from->aggtype; + + Node_Copy(from, newnode, target); + + newnode->aggno = from->aggno; + + return newnode; } -static Array * -_copyArray(Array *from) +static Array * +_copyArray(Array * from) { - Array *newnode = makeNode(Array); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->arrayelemtype = from->arrayelemtype; - newnode->arrayelemlength = from->arrayelemlength; - newnode->arrayelembyval = from->arrayelembyval; - newnode->arrayndim = from->arrayndim; - newnode->arraylow = from->arraylow; - newnode->arrayhigh = from->arrayhigh; - newnode->arraylen = from->arraylen; - - return newnode; + Array *newnode = makeNode(Array); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->arrayelemtype = from->arrayelemtype; + newnode->arrayelemlength = from->arrayelemlength; + newnode->arrayelembyval = from->arrayelembyval; + newnode->arrayndim = from->arrayndim; + newnode->arraylow = from->arraylow; + newnode->arrayhigh = from->arrayhigh; + newnode->arraylen = from->arraylen; + + return newnode; } static ArrayRef * -_copyArrayRef(ArrayRef *from) +_copyArrayRef(ArrayRef * from) { - ArrayRef *newnode = makeNode(ArrayRef); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->refelemtype = from->refelemtype; - newnode->refattrlength = from->refattrlength; - newnode->refelemlength = from->refelemlength; - newnode->refelembyval = from->refelembyval; - - Node_Copy(from,newnode,refupperindexpr); - Node_Copy(from,newnode,reflowerindexpr); - Node_Copy(from,newnode,refexpr); - Node_Copy(from,newnode,refassgnexpr); - - return newnode; + ArrayRef *newnode = makeNode(ArrayRef); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->refelemtype = from->refelemtype; + newnode->refattrlength = from->refattrlength; + newnode->refelemlength = from->refelemlength; + newnode->refelembyval = from->refelembyval; + + Node_Copy(from, newnode, refupperindexpr); + Node_Copy(from, newnode, reflowerindexpr); + Node_Copy(from, newnode, refexpr); + Node_Copy(from, newnode, refassgnexpr); + + return newnode; } /* **************************************************************** - * relation.h copy functions + * relation.h copy functions * **************************************************************** */ /* ---------------- - * _copyRel + * _copyRel * ---------------- */ /* - ** when you change this, also make sure to fix up xfunc_copyRel in + ** when you change this, also make sure to fix up xfunc_copyRel in ** planner/path/xfunc.c accordingly!!! - ** -- JMH, 8/2/93 + ** -- JMH, 8/2/93 */ -static Rel * -_copyRel(Rel *from) +static Rel * +_copyRel(Rel * from) { - Rel *newnode = makeNode(Rel); - int i, len; - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->relids = listCopy(from->relids); - - newnode->indexed = from->indexed; - newnode->pages = from->pages; - newnode->tuples = from->tuples; - newnode->size = from->size; - newnode->width = from->width; - newnode->indproc = from->indproc; - - Node_Copy(from, newnode, targetlist); - Node_Copy(from, newnode, pathlist); - Node_Copy(from, newnode, unorderedpath); - Node_Copy(from, newnode, cheapestpath); - newnode->pruneable = from->pruneable; - newnode->relam = from->relam; - - if (from->classlist) { - for(len=0; from->classlist[len]!=0; len++) - ; - newnode->classlist = (Oid *)palloc(sizeof(Oid) * (len+1)); - for(i=0; i < len; i++) { - newnode->classlist[i] = from->classlist[i]; + Rel *newnode = makeNode(Rel); + int i, + len; + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->relids = listCopy(from->relids); + + newnode->indexed = from->indexed; + newnode->pages = from->pages; + newnode->tuples = from->tuples; + newnode->size = from->size; + newnode->width = from->width; + newnode->indproc = from->indproc; + + Node_Copy(from, newnode, targetlist); + Node_Copy(from, newnode, pathlist); + Node_Copy(from, newnode, unorderedpath); + Node_Copy(from, newnode, cheapestpath); + newnode->pruneable = from->pruneable; + newnode->relam = from->relam; + + if (from->classlist) + { + for (len = 0; from->classlist[len] != 0; len++) + ; + newnode->classlist = (Oid *) palloc(sizeof(Oid) * (len + 1)); + for (i = 0; i < len; i++) + { + newnode->classlist[i] = from->classlist[i]; + } + newnode->classlist[len] = 0; } - newnode->classlist[len] = 0; - } - - if (from->indexkeys) { - for(len=0; from->indexkeys[len]!=0; len++) - ; - newnode->indexkeys = (int *)palloc(sizeof(int) * (len+1)); - for(i=0; i < len; i++) { - newnode->indexkeys[i] = from->indexkeys[i]; + + if (from->indexkeys) + { + for (len = 0; from->indexkeys[len] != 0; len++) + ; + newnode->indexkeys = (int *) palloc(sizeof(int) * (len + 1)); + for (i = 0; i < len; i++) + { + newnode->indexkeys[i] = from->indexkeys[i]; + } + newnode->indexkeys[len] = 0; } - newnode->indexkeys[len] = 0; - } - - if (from->ordering) { - for(len=0; from->ordering[len]!=0; len++) - ; - newnode->ordering = (Oid *)palloc(sizeof(Oid) * (len+1)); - for(i=0; i < len; i++) { - newnode->ordering[i] = from->ordering[i]; + + if (from->ordering) + { + for (len = 0; from->ordering[len] != 0; len++) + ; + newnode->ordering = (Oid *) palloc(sizeof(Oid) * (len + 1)); + for (i = 0; i < len; i++) + { + newnode->ordering[i] = from->ordering[i]; + } + newnode->ordering[len] = 0; } - newnode->ordering[len] = 0; - } - - Node_Copy(from, newnode, clauseinfo); - Node_Copy(from, newnode, joininfo); - Node_Copy(from, newnode, innerjoin); - Node_Copy(from, newnode, superrels); - - return newnode; + + Node_Copy(from, newnode, clauseinfo); + Node_Copy(from, newnode, joininfo); + Node_Copy(from, newnode, innerjoin); + Node_Copy(from, newnode, superrels); + + return newnode; } /* ---------------- - * CopyPathFields + * CopyPathFields * - * This function copies the fields of the Path node. It is used by - * all the copy functions for classes which inherit from Path. + * This function copies the fields of the Path node. It is used by + * all the copy functions for classes which inherit from Path. * ---------------- */ static void -CopyPathFields(Path *from, Path *newnode) +CopyPathFields(Path * from, Path * newnode) { - newnode->pathtype = from->pathtype; - /* Modify the next line, since it causes the copying to cycle - (i.e. the parent points right back here! - -- JMH, 7/7/92. - Old version: - Node_Copy(from, newnode, parent); - */ - newnode->parent = from->parent; - - newnode->path_cost = from->path_cost; - - newnode->p_ordering.ordtype = from->p_ordering.ordtype; - if (from->p_ordering.ordtype == SORTOP_ORDER) { - int len, i; - Oid *ordering = from->p_ordering.ord.sortop; - - if (ordering) { - for(len=0; ordering[len]!=0; len++) - ; - newnode->p_ordering.ord.sortop = - (Oid *)palloc(sizeof(Oid) * (len+1)); - for(i=0; i < len; i++) { - newnode->p_ordering.ord.sortop[i] = ordering[i]; - } - newnode->p_ordering.ord.sortop[len] = 0; - } else { - newnode->p_ordering.ord.sortop = NULL; + newnode->pathtype = from->pathtype; + + /* + * Modify the next line, since it causes the copying to cycle (i.e. + * the parent points right back here! -- JMH, 7/7/92. Old version: + * Node_Copy(from, newnode, parent); + */ + newnode->parent = from->parent; + + newnode->path_cost = from->path_cost; + + newnode->p_ordering.ordtype = from->p_ordering.ordtype; + if (from->p_ordering.ordtype == SORTOP_ORDER) + { + int len, + i; + Oid *ordering = from->p_ordering.ord.sortop; + + if (ordering) + { + for (len = 0; ordering[len] != 0; len++) + ; + newnode->p_ordering.ord.sortop = + (Oid *) palloc(sizeof(Oid) * (len + 1)); + for (i = 0; i < len; i++) + { + newnode->p_ordering.ord.sortop[i] = ordering[i]; + } + newnode->p_ordering.ord.sortop[len] = 0; + } + else + { + newnode->p_ordering.ord.sortop = NULL; + } + } + else + { + Node_Copy(from, newnode, p_ordering.ord.merge); } - } else { - Node_Copy(from, newnode, p_ordering.ord.merge); - } - - Node_Copy(from, newnode, keys); - - newnode->outerjoincost = from->outerjoincost; - - newnode->joinid = listCopy(from->joinid); - Node_Copy(from, newnode, locclauseinfo); + + Node_Copy(from, newnode, keys); + + newnode->outerjoincost = from->outerjoincost; + + newnode->joinid = listCopy(from->joinid); + Node_Copy(from, newnode, locclauseinfo); } /* ---------------- - * _copyPath + * _copyPath * ---------------- */ -static Path * -_copyPath(Path *from) +static Path * +_copyPath(Path * from) { - Path *newnode = makeNode(Path); - - CopyPathFields(from, newnode); - - return newnode; + Path *newnode = makeNode(Path); + + CopyPathFields(from, newnode); + + return newnode; } /* ---------------- - * _copyIndexPath + * _copyIndexPath * ---------------- */ static IndexPath * -_copyIndexPath(IndexPath *from) +_copyIndexPath(IndexPath * from) { - IndexPath *newnode = makeNode(IndexPath); - - /* ---------------- - * copy the node superclass fields - * ---------------- - */ - CopyPathFields((Path*)from, (Path*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->indexid = listCopy(from->indexid); - Node_Copy(from, newnode, indexqual); - - if (from->indexkeys) - { - int i, len; - - for(len=0; from->indexkeys[len]!=0; len++) - ; - newnode->indexkeys = (int *)palloc(sizeof(int) * (len+1)); - for(i=0; i < len; i++) { - newnode->indexkeys[i] = from->indexkeys[i]; + IndexPath *newnode = makeNode(IndexPath); + + /* ---------------- + * copy the node superclass fields + * ---------------- + */ + CopyPathFields((Path *) from, (Path *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->indexid = listCopy(from->indexid); + Node_Copy(from, newnode, indexqual); + + if (from->indexkeys) + { + int i, + len; + + for (len = 0; from->indexkeys[len] != 0; len++) + ; + newnode->indexkeys = (int *) palloc(sizeof(int) * (len + 1)); + for (i = 0; i < len; i++) + { + newnode->indexkeys[i] = from->indexkeys[i]; + } + newnode->indexkeys[len] = 0; } - newnode->indexkeys[len] = 0; - } - - return newnode; + + return newnode; } /* ---------------- - * CopyJoinPathFields + * CopyJoinPathFields * - * This function copies the fields of the JoinPath node. It is used by - * all the copy functions for classes which inherit from JoinPath. + * This function copies the fields of the JoinPath node. It is used by + * all the copy functions for classes which inherit from JoinPath. * ---------------- */ static void -CopyJoinPathFields(JoinPath *from, JoinPath *newnode) +CopyJoinPathFields(JoinPath * from, JoinPath * newnode) { - Node_Copy(from, newnode, pathclauseinfo); - Node_Copy(from, newnode, outerjoinpath); - Node_Copy(from, newnode, innerjoinpath); + Node_Copy(from, newnode, pathclauseinfo); + Node_Copy(from, newnode, outerjoinpath); + Node_Copy(from, newnode, innerjoinpath); } /* ---------------- - * _copyJoinPath + * _copyJoinPath * ---------------- */ static JoinPath * -_copyJoinPath(JoinPath *from) +_copyJoinPath(JoinPath * from) { - JoinPath *newnode = makeNode(JoinPath); - - /* ---------------- - * copy the node superclass fields - * ---------------- - */ - CopyPathFields((Path*)from, (Path*)newnode); - CopyJoinPathFields(from, newnode); - - return newnode; + JoinPath *newnode = makeNode(JoinPath); + + /* ---------------- + * copy the node superclass fields + * ---------------- + */ + CopyPathFields((Path *) from, (Path *) newnode); + CopyJoinPathFields(from, newnode); + + return newnode; } /* ---------------- - * _copyMergePath + * _copyMergePath * ---------------- */ static MergePath * -_copyMergePath(MergePath *from) +_copyMergePath(MergePath * from) { - MergePath *newnode = makeNode(MergePath); - - /* ---------------- - * copy the node superclass fields - * ---------------- - */ - CopyPathFields((Path*)from, (Path*)newnode); - CopyJoinPathFields((JoinPath*)from, (JoinPath*)newnode); - - /* ---------------- - * copy the remainder of the node - * ---------------- - */ - Node_Copy(from, newnode, path_mergeclauses); - Node_Copy(from, newnode, outersortkeys); - Node_Copy(from, newnode, innersortkeys); - - return newnode; + MergePath *newnode = makeNode(MergePath); + + /* ---------------- + * copy the node superclass fields + * ---------------- + */ + CopyPathFields((Path *) from, (Path *) newnode); + CopyJoinPathFields((JoinPath *) from, (JoinPath *) newnode); + + /* ---------------- + * copy the remainder of the node + * ---------------- + */ + Node_Copy(from, newnode, path_mergeclauses); + Node_Copy(from, newnode, outersortkeys); + Node_Copy(from, newnode, innersortkeys); + + return newnode; } /* ---------------- - * _copyHashPath + * _copyHashPath * ---------------- */ static HashPath * -_copyHashPath(HashPath *from) +_copyHashPath(HashPath * from) { - HashPath *newnode = makeNode(HashPath); - - /* ---------------- - * copy the node superclass fields - * ---------------- - */ - CopyPathFields((Path*)from, (Path*)newnode); - CopyJoinPathFields((JoinPath*)from, (JoinPath*)newnode); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, path_hashclauses); - Node_Copy(from, newnode, outerhashkeys); - Node_Copy(from, newnode, innerhashkeys); - - return newnode; + HashPath *newnode = makeNode(HashPath); + + /* ---------------- + * copy the node superclass fields + * ---------------- + */ + CopyPathFields((Path *) from, (Path *) newnode); + CopyJoinPathFields((JoinPath *) from, (JoinPath *) newnode); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, path_hashclauses); + Node_Copy(from, newnode, outerhashkeys); + Node_Copy(from, newnode, innerhashkeys); + + return newnode; } /* ---------------- - * _copyOrderKey + * _copyOrderKey * ---------------- */ static OrderKey * -_copyOrderKey(OrderKey *from) +_copyOrderKey(OrderKey * from) { - OrderKey *newnode = makeNode(OrderKey); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->attribute_number = from->attribute_number; - newnode->array_index = from->array_index; - - return newnode; + OrderKey *newnode = makeNode(OrderKey); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->attribute_number = from->attribute_number; + newnode->array_index = from->array_index; + + return newnode; } /* ---------------- - * _copyJoinKey + * _copyJoinKey * ---------------- */ static JoinKey * -_copyJoinKey(JoinKey *from) +_copyJoinKey(JoinKey * from) { - JoinKey *newnode = makeNode(JoinKey); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, outer); - Node_Copy(from, newnode, inner); - - return newnode; + JoinKey *newnode = makeNode(JoinKey); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, outer); + Node_Copy(from, newnode, inner); + + return newnode; } /* ---------------- - * _copyMergeOrder + * _copyMergeOrder * ---------------- */ static MergeOrder * -_copyMergeOrder(MergeOrder *from) +_copyMergeOrder(MergeOrder * from) { - MergeOrder *newnode = makeNode(MergeOrder); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->join_operator = from->join_operator; - newnode->left_operator = from->left_operator; - newnode->right_operator = from->right_operator; - newnode->left_type = from->left_type; - newnode->right_type = from->right_type; - - return newnode; + MergeOrder *newnode = makeNode(MergeOrder); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->join_operator = from->join_operator; + newnode->left_operator = from->left_operator; + newnode->right_operator = from->right_operator; + newnode->left_type = from->left_type; + newnode->right_type = from->right_type; + + return newnode; } /* ---------------- - * _copyCInfo + * _copyCInfo * ---------------- */ -static CInfo * -_copyCInfo(CInfo *from) +static CInfo * +_copyCInfo(CInfo * from) { - CInfo *newnode = makeNode(CInfo); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, clause); - - newnode->selectivity = from->selectivity; - newnode->notclause = from->notclause; - - Node_Copy(from, newnode, indexids); - Node_Copy(from, newnode, mergesortorder); - newnode->hashjoinoperator = from->hashjoinoperator; - newnode->cinfojoinid = listCopy(from->cinfojoinid); - - return newnode; + CInfo *newnode = makeNode(CInfo); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, clause); + + newnode->selectivity = from->selectivity; + newnode->notclause = from->notclause; + + Node_Copy(from, newnode, indexids); + Node_Copy(from, newnode, mergesortorder); + newnode->hashjoinoperator = from->hashjoinoperator; + newnode->cinfojoinid = listCopy(from->cinfojoinid); + + return newnode; } /* ---------------- - * CopyJoinMethodFields + * CopyJoinMethodFields * - * This function copies the fields of the JoinMethod node. It is used by - * all the copy functions for classes which inherit from JoinMethod. + * This function copies the fields of the JoinMethod node. It is used by + * all the copy functions for classes which inherit from JoinMethod. * ---------------- */ static void -CopyJoinMethodFields(JoinMethod *from, JoinMethod *newnode) +CopyJoinMethodFields(JoinMethod * from, JoinMethod * newnode) { - Node_Copy(from, newnode, jmkeys); - Node_Copy(from, newnode, clauses); - return; + Node_Copy(from, newnode, jmkeys); + Node_Copy(from, newnode, clauses); + return; } /* ---------------- - * _copyJoinMethod + * _copyJoinMethod * ---------------- */ static JoinMethod * -_copyJoinMethod(JoinMethod *from) +_copyJoinMethod(JoinMethod * from) { - JoinMethod *newnode = makeNode(JoinMethod); - - CopyJoinMethodFields(from, newnode); - - return newnode; + JoinMethod *newnode = makeNode(JoinMethod); + + CopyJoinMethodFields(from, newnode); + + return newnode; } /* ---------------- - * _copyHInfo + * _copyHInfo * ---------------- */ -static HInfo * -_copyHInfo(HInfo *from) +static HInfo * +_copyHInfo(HInfo * from) { - HInfo *newnode = makeNode(HInfo); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->hashop = from->hashop; - - return newnode; + HInfo *newnode = makeNode(HInfo); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->hashop = from->hashop; + + return newnode; } /* ---------------- - * _copyMInfo + * _copyMInfo * ---------------- */ -static MInfo * -_copyMInfo(MInfo *from) +static MInfo * +_copyMInfo(MInfo * from) { - MInfo *newnode = makeNode(MInfo); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - Node_Copy(from, newnode, m_ordering); - - return newnode; + MInfo *newnode = makeNode(MInfo); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, m_ordering); + + return newnode; } /* ---------------- - * _copyJInfo + * _copyJInfo * ---------------- */ -static JInfo * -_copyJInfo(JInfo *from) +static JInfo * +_copyJInfo(JInfo * from) { - JInfo *newnode = makeNode(JInfo); - - /* ---------------- - * copy remainder of node - * ---------------- - */ - newnode->otherrels = listCopy(from->otherrels); - Node_Copy(from, newnode, jinfoclauseinfo); - - newnode->mergesortable = from->mergesortable; - newnode->hashjoinable = from->hashjoinable; - newnode->inactive = from->inactive; - - return newnode; + JInfo *newnode = makeNode(JInfo); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + newnode->otherrels = listCopy(from->otherrels); + Node_Copy(from, newnode, jinfoclauseinfo); + + newnode->mergesortable = from->mergesortable; + newnode->hashjoinable = from->hashjoinable; + newnode->inactive = from->inactive; + + return newnode; } -static Iter * -_copyIter(Iter *from) +static Iter * +_copyIter(Iter * from) { - Iter *newnode = makeNode(Iter); + Iter *newnode = makeNode(Iter); + + Node_Copy(from, newnode, iterexpr); + newnode->itertype = from->itertype; - Node_Copy(from, newnode, iterexpr); - newnode->itertype = from->itertype; - - return newnode; + return newnode; } -static Stream * -_copyStream(Stream *from) +static Stream * +_copyStream(Stream * from) { - Stream *newnode = makeNode(Stream); - - newnode->pathptr = from->pathptr; - newnode->cinfo = from->cinfo; - newnode->clausetype = from->clausetype; - newnode->groupup = from->groupup; - newnode->groupcost = from->groupcost; - newnode->groupsel = from->groupsel; - newnode->upstream = (StreamPtr)NULL; /* only copy nodes downwards! */ - Node_Copy(from, newnode, downstream); - if (newnode->downstream) - ((Stream*)newnode->downstream)->upstream = (Stream*)newnode; - - return newnode; + Stream *newnode = makeNode(Stream); + + newnode->pathptr = from->pathptr; + newnode->cinfo = from->cinfo; + newnode->clausetype = from->clausetype; + newnode->groupup = from->groupup; + newnode->groupcost = from->groupcost; + newnode->groupsel = from->groupsel; + newnode->upstream = (StreamPtr) NULL; /* only copy nodes + * downwards! */ + Node_Copy(from, newnode, downstream); + if (newnode->downstream) + ((Stream *) newnode->downstream)->upstream = (Stream *) newnode; + + return newnode; } /* **************** - * parsenodes.h routines have no copy functions + * parsenodes.h routines have no copy functions * **************** */ static TargetEntry * -_copyTargetEntry(TargetEntry *from) +_copyTargetEntry(TargetEntry * from) { - TargetEntry *newnode = makeNode(TargetEntry); + TargetEntry *newnode = makeNode(TargetEntry); - Node_Copy(from, newnode, resdom); - Node_Copy(from, newnode, fjoin); - Node_Copy(from, newnode, expr); - return newnode; + Node_Copy(from, newnode, resdom); + Node_Copy(from, newnode, fjoin); + Node_Copy(from, newnode, expr); + return newnode; } static RangeTblEntry * -_copyRangeTblEntry(RangeTblEntry *from) +_copyRangeTblEntry(RangeTblEntry * from) { - RangeTblEntry *newnode = makeNode(RangeTblEntry); - - memcpy (newnode, from, sizeof (RangeTblEntry)); - if ( from->relname ) - newnode->relname = pstrdup (from->relname); - if ( from->refname ) - newnode->refname = pstrdup (from->refname); - if ( from->timeRange ) - { - newnode->timeRange = makeNode (TimeRange); - if ( from->timeRange->startDate ) - newnode->timeRange->startDate = pstrdup (from->timeRange->startDate); - else - newnode->timeRange->startDate = NULL; - if ( from->timeRange->endDate ) - newnode->timeRange->endDate = pstrdup (from->timeRange->endDate); - else - newnode->timeRange->endDate = NULL; - newnode->timeQual = makeTimeRange (newnode->timeRange->startDate, - newnode->timeRange->endDate, - ((newnode->timeRange->endDate == NULL) ? 0 : 1)); - } - - return newnode; + RangeTblEntry *newnode = makeNode(RangeTblEntry); + + memcpy(newnode, from, sizeof(RangeTblEntry)); + if (from->relname) + newnode->relname = pstrdup(from->relname); + if (from->refname) + newnode->refname = pstrdup(from->refname); + if (from->timeRange) + { + newnode->timeRange = makeNode(TimeRange); + if (from->timeRange->startDate) + newnode->timeRange->startDate = pstrdup(from->timeRange->startDate); + else + newnode->timeRange->startDate = NULL; + if (from->timeRange->endDate) + newnode->timeRange->endDate = pstrdup(from->timeRange->endDate); + else + newnode->timeRange->endDate = NULL; + newnode->timeQual = makeTimeRange(newnode->timeRange->startDate, + newnode->timeRange->endDate, + ((newnode->timeRange->endDate == NULL) ? 0 : 1)); + } + + return newnode; } static SortClause * -_copySortClause(SortClause *from) +_copySortClause(SortClause * from) { - SortClause *newnode = makeNode(SortClause); + SortClause *newnode = makeNode(SortClause); + + Node_Copy(from, newnode, resdom); + newnode->opoid = from->opoid; - Node_Copy(from, newnode, resdom); - newnode->opoid = from->opoid; - - return newnode; + return newnode; } static A_Const * -_copyAConst(A_Const *from) +_copyAConst(A_Const * from) { - A_Const *newnode = makeNode(A_Const); + A_Const *newnode = makeNode(A_Const); - newnode->val = *((Value *)(copyObject(&(from->val)))); - Node_Copy(from, newnode, typename); + newnode->val = *((Value *) (copyObject(&(from->val)))); + Node_Copy(from, newnode, typename); - return newnode; + return newnode; } static TypeName * -_copyTypeName(TypeName *from) +_copyTypeName(TypeName * from) { - TypeName *newnode = makeNode(TypeName); - - if(from->name) { - newnode->name = pstrdup(from->name); - } else { - from->name = (char *)0; - } - newnode->setof = from->setof; - Node_Copy(from, newnode, arrayBounds); - newnode->typlen = from->typlen; - - return newnode; + TypeName *newnode = makeNode(TypeName); + + if (from->name) + { + newnode->name = pstrdup(from->name); + } + else + { + from->name = (char *) 0; + } + newnode->setof = from->setof; + Node_Copy(from, newnode, arrayBounds); + newnode->typlen = from->typlen; + + return newnode; } -static Query * -_copyQuery(Query *from) +static Query * +_copyQuery(Query * from) { - Query *newnode = makeNode(Query); - - newnode->commandType = from->commandType; - newnode->resultRelation = from->resultRelation; - /* probably should dup this string instead of just pointing */ - /* to the old one --djm */ - if(from->into) { - newnode->into = pstrdup(from->into); - } else { - newnode->into = (char *)0; - } - newnode->isPortal = from->isPortal; - Node_Copy(from, newnode, rtable); - if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt) { - NotifyStmt *from_notify = (NotifyStmt*)from->utilityStmt; - NotifyStmt *n = makeNode(NotifyStmt); - int length = strlen(from_notify->relname); - - n->relname = palloc(length + 1); - strcpy(n->relname,from_notify->relname); - newnode->utilityStmt = (Node*)n; - } - if (from->uniqueFlag) { - newnode->uniqueFlag = (char*)palloc(strlen(from->uniqueFlag)+1); - strcpy(newnode->uniqueFlag, from->uniqueFlag); - } - else - newnode->uniqueFlag = NULL; - Node_Copy(from, newnode, sortClause); - Node_Copy(from, newnode, targetList); - Node_Copy(from, newnode, qual); - - return newnode; + Query *newnode = makeNode(Query); + + newnode->commandType = from->commandType; + newnode->resultRelation = from->resultRelation; + /* probably should dup this string instead of just pointing */ + /* to the old one --djm */ + if (from->into) + { + newnode->into = pstrdup(from->into); + } + else + { + newnode->into = (char *) 0; + } + newnode->isPortal = from->isPortal; + Node_Copy(from, newnode, rtable); + if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt) + { + NotifyStmt *from_notify = (NotifyStmt *) from->utilityStmt; + NotifyStmt *n = makeNode(NotifyStmt); + int length = strlen(from_notify->relname); + + n->relname = palloc(length + 1); + strcpy(n->relname, from_notify->relname); + newnode->utilityStmt = (Node *) n; + } + if (from->uniqueFlag) + { + newnode->uniqueFlag = (char *) palloc(strlen(from->uniqueFlag) + 1); + strcpy(newnode->uniqueFlag, from->uniqueFlag); + } + else + newnode->uniqueFlag = NULL; + Node_Copy(from, newnode, sortClause); + Node_Copy(from, newnode, targetList); + Node_Copy(from, newnode, qual); + + return newnode; } /* **************** - * mnodes.h routines have no copy functions + * mnodes.h routines have no copy functions * **************** */ /* **************************************************************** - * pg_list.h copy functions + * pg_list.h copy functions * **************************************************************** */ -static Value * -_copyValue(Value *from) +static Value * +_copyValue(Value * from) { - Value *newnode = makeNode(Value); - - newnode->type = from->type; - switch(from->type) { - case T_String: - newnode->val.str = pstrdup(from->val.str); - break; - case T_Integer: - newnode->val.ival = from->val.ival; - break; - case T_Float: - newnode->val.dval = from->val.dval; - break; - default: - break; - } - return newnode; + Value *newnode = makeNode(Value); + + newnode->type = from->type; + switch (from->type) + { + case T_String: + newnode->val.str = pstrdup(from->val.str); + break; + case T_Integer: + newnode->val.ival = from->val.ival; + break; + case T_Float: + newnode->val.dval = from->val.dval; + break; + default: + break; + } + return newnode; } /* ---------------- - * copyObject returns a copy of the node or list. If it is a list, it - * recursively copies its items. + * copyObject returns a copy of the node or list. If it is a list, it + * recursively copies its items. * ---------------- */ -void * +void * copyObject(void *from) { - void *retval; - - if (from==NULL) - return NULL; - switch(nodeTag(from)) { - /* - * PLAN NODES - */ - case T_Plan: - retval = _copyPlan(from); - break; - case T_Existential: - retval = _copyExistential(from); - break; - case T_Result: - retval = _copyResult(from); - break; - case T_Append: - retval = _copyAppend(from); - break; - case T_Scan: - retval = _copyScan(from); - break; - case T_SeqScan: - retval = _copySeqScan(from); - break; - case T_IndexScan: - retval = _copyIndexScan(from); - break; - case T_Join: - retval = _copyJoin(from); - break; - case T_NestLoop: - retval = _copyNestLoop(from); - break; - case T_MergeJoin: - retval = _copyMergeJoin(from); - break; - case T_HashJoin: - retval = _copyHashJoin(from); - break; - case T_Temp: - retval = _copyTemp(from); - break; - case T_Material: - retval = _copyMaterial(from); - break; - case T_Sort: - retval = _copySort(from); - break; - case T_Agg: - retval = _copyAgg(from); - break; - case T_Unique: - retval = _copyUnique(from); - break; - case T_Hash: - retval = _copyHash(from); - break; - - /* - * PRIMITIVE NODES - */ - case T_Resdom: - retval = _copyResdom(from); - break; - case T_Fjoin: - retval = _copyFjoin(from); - break; - case T_Expr: - retval = _copyExpr(from); - break; - case T_Var: - retval = _copyVar(from); - break; - case T_Oper: - retval = _copyOper(from); - break; - case T_Const: - retval = _copyConst(from); - break; - case T_Param: - retval = _copyParam(from); - break; - case T_Func: - retval = _copyFunc(from); - break; - case T_Array: - retval = _copyArray(from); - break; - case T_ArrayRef: - retval = _copyArrayRef(from); - break; - case T_Aggreg: - retval = _copyAggreg(from); - break; - /* - * RELATION NODES - */ - case T_Rel: - retval = _copyRel(from); - break; - case T_Path: - retval = _copyPath(from); - break; - case T_IndexPath: - retval = _copyIndexPath(from); - break; - case T_JoinPath: - retval = _copyJoinPath(from); - break; - case T_MergePath: - retval = _copyMergePath(from); - break; - case T_HashPath: - retval = _copyHashPath(from); - break; - case T_OrderKey: - retval = _copyOrderKey(from); - break; - case T_JoinKey: - retval = _copyJoinKey(from); - break; - case T_MergeOrder: - retval = _copyMergeOrder(from); - break; - case T_CInfo: - retval = _copyCInfo(from); - break; - case T_JoinMethod: - retval = _copyJoinMethod(from); - break; - case T_HInfo: - retval = _copyHInfo(from); - break; - case T_MInfo: - retval = _copyMInfo(from); - break; - case T_JInfo: - retval = _copyJInfo(from); - break; - case T_Iter: - retval = _copyIter(from); - break; - case T_Stream: - retval = _copyStream(from); - break; + void *retval; - /* - * PARSE NODES - */ - case T_Query: - retval = _copyQuery(from); - break; - case T_TargetEntry: - retval = _copyTargetEntry(from); - break; - case T_RangeTblEntry: - retval = _copyRangeTblEntry(from); - break; - case T_SortClause: - retval = _copySortClause(from); - break; - case T_A_Const: - retval = _copyAConst(from); - break; - case T_TypeName: - retval = _copyTypeName(from); - break; - - /* - * VALUE NODES - */ - case T_Integer: case T_String: case T_Float: - retval = _copyValue(from); - break; - case T_List: + if (from == NULL) + return NULL; + switch (nodeTag(from)) { - List *list=from, *l; - List *newlist = NIL, *nl=NIL; - foreach(l, list) { - if (newlist==NIL) { - newlist = nl = lcons(copyObject(lfirst(l)),NIL); - }else { - lnext(nl) = lcons(copyObject(lfirst(l)),NIL); - nl = lnext(nl); + + /* + * PLAN NODES + */ + case T_Plan: + retval = _copyPlan(from); + break; + case T_Existential: + retval = _copyExistential(from); + break; + case T_Result: + retval = _copyResult(from); + break; + case T_Append: + retval = _copyAppend(from); + break; + case T_Scan: + retval = _copyScan(from); + break; + case T_SeqScan: + retval = _copySeqScan(from); + break; + case T_IndexScan: + retval = _copyIndexScan(from); + break; + case T_Join: + retval = _copyJoin(from); + break; + case T_NestLoop: + retval = _copyNestLoop(from); + break; + case T_MergeJoin: + retval = _copyMergeJoin(from); + break; + case T_HashJoin: + retval = _copyHashJoin(from); + break; + case T_Temp: + retval = _copyTemp(from); + break; + case T_Material: + retval = _copyMaterial(from); + break; + case T_Sort: + retval = _copySort(from); + break; + case T_Agg: + retval = _copyAgg(from); + break; + case T_Unique: + retval = _copyUnique(from); + break; + case T_Hash: + retval = _copyHash(from); + break; + + /* + * PRIMITIVE NODES + */ + case T_Resdom: + retval = _copyResdom(from); + break; + case T_Fjoin: + retval = _copyFjoin(from); + break; + case T_Expr: + retval = _copyExpr(from); + break; + case T_Var: + retval = _copyVar(from); + break; + case T_Oper: + retval = _copyOper(from); + break; + case T_Const: + retval = _copyConst(from); + break; + case T_Param: + retval = _copyParam(from); + break; + case T_Func: + retval = _copyFunc(from); + break; + case T_Array: + retval = _copyArray(from); + break; + case T_ArrayRef: + retval = _copyArrayRef(from); + break; + case T_Aggreg: + retval = _copyAggreg(from); + break; + + /* + * RELATION NODES + */ + case T_Rel: + retval = _copyRel(from); + break; + case T_Path: + retval = _copyPath(from); + break; + case T_IndexPath: + retval = _copyIndexPath(from); + break; + case T_JoinPath: + retval = _copyJoinPath(from); + break; + case T_MergePath: + retval = _copyMergePath(from); + break; + case T_HashPath: + retval = _copyHashPath(from); + break; + case T_OrderKey: + retval = _copyOrderKey(from); + break; + case T_JoinKey: + retval = _copyJoinKey(from); + break; + case T_MergeOrder: + retval = _copyMergeOrder(from); + break; + case T_CInfo: + retval = _copyCInfo(from); + break; + case T_JoinMethod: + retval = _copyJoinMethod(from); + break; + case T_HInfo: + retval = _copyHInfo(from); + break; + case T_MInfo: + retval = _copyMInfo(from); + break; + case T_JInfo: + retval = _copyJInfo(from); + break; + case T_Iter: + retval = _copyIter(from); + break; + case T_Stream: + retval = _copyStream(from); + break; + + /* + * PARSE NODES + */ + case T_Query: + retval = _copyQuery(from); + break; + case T_TargetEntry: + retval = _copyTargetEntry(from); + break; + case T_RangeTblEntry: + retval = _copyRangeTblEntry(from); + break; + case T_SortClause: + retval = _copySortClause(from); + break; + case T_A_Const: + retval = _copyAConst(from); + break; + case T_TypeName: + retval = _copyTypeName(from); + break; + + /* + * VALUE NODES + */ + case T_Integer: + case T_String: + case T_Float: + retval = _copyValue(from); + break; + case T_List: + { + List *list = from, + *l; + List *newlist = NIL, + *nl = NIL; + + foreach(l, list) + { + if (newlist == NIL) + { + newlist = nl = lcons(copyObject(lfirst(l)), NIL); + } + else + { + lnext(nl) = lcons(copyObject(lfirst(l)), NIL); + nl = lnext(nl); + } + } + retval = newlist; } - } - retval = newlist; + break; + default: + elog(NOTICE, "copyObject: don't know how to copy %d", nodeTag(from)); + retval = from; + break; } - break; - default: - elog(NOTICE, "copyObject: don't know how to copy %d", nodeTag(from)); - retval = from; - break; - } - return retval; + return retval; } - |