diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile index ac239bcd6f999898e38923135ea5e6b8fdaf3426..264ec069b2b90b3f17ba95fb44de106b3905e617 100644 --- a/src/backend/nodes/Makefile +++ b/src/backend/nodes/Makefile @@ -1,10 +1,10 @@ #------------------------------------------------------------------------- # # Makefile-- -# Makefile for nodes +# Makefile for backend/nodes # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/nodes/Makefile,v 1.11 2000/05/29 05:44:47 tgl Exp $ +# $Header: /cvsroot/pgsql/src/backend/nodes/Makefile,v 1.12 2000/06/29 02:26:23 tgl Exp $ # #------------------------------------------------------------------------- @@ -12,8 +12,8 @@ SRCDIR = ../.. include $(SRCDIR)/Makefile.global OBJS = nodeFuncs.o nodes.o list.o \ - copyfuncs.o equalfuncs.o freefuncs.o makefuncs.o outfuncs.o \ - readfuncs.o print.o read.o + copyfuncs.o equalfuncs.o makefuncs.o \ + outfuncs.o readfuncs.o print.o read.o all: SUBSYS.o @@ -29,4 +29,3 @@ clean: ifeq (depend,$(wildcard depend)) include depend endif - diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c deleted file mode 100644 index 3353a82d9d72c4a08f7b2aa07c98572b06786f0c..0000000000000000000000000000000000000000 --- a/src/backend/nodes/freefuncs.c +++ /dev/null @@ -1,1333 +0,0 @@ - /*------------------------------------------------------------------------- - * - * freefuncs.c - * Free functions for Postgres tree nodes. - * - * Portions Copyright (c) 1996-2000, PostgreSQL, Inc - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.42 2000/06/18 22:44:05 tgl Exp $ - * - *------------------------------------------------------------------------- - */ - -#include "postgres.h" - -#include "optimizer/planmain.h" -#include "access/heapam.h" - -/* **************************************************************** - * plannodes.h free functions - * **************************************************************** - */ -static void freeObject(void *obj); - -/* ---------------- - * FreePlanFields - * - * This function frees the fields of the Plan node. It is used by - * all the free functions for classes which inherit node Plan. - * ---------------- - */ -static void -FreePlanFields(Plan *node) -{ - freeObject(node->targetlist); - freeObject(node->qual); - freeObject(node->lefttree); - freeObject(node->righttree); - freeList(node->extParam); - freeList(node->locParam); - freeList(node->chgParam); - freeObject(node->initPlan); - freeList(node->subPlan); -} - -/* ---------------- - * _freePlan - * ---------------- - */ -static void -_freePlan(Plan *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePlanFields(node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - pfree(node); -} - - -/* ---------------- - * _freeResult - * ---------------- - */ -static void -_freeResult(Result *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->resconstantqual); - - pfree(node); -} - -/* ---------------- - * _freeAppend - * ---------------- - */ -static void -_freeAppend(Append *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->appendplans); - freeObject(node->unionrtables); - freeObject(node->inheritrtable); - - pfree(node); -} - - -/* ---------------- - * FreeScanFields - * - * This function frees the fields of the Scan node. It is used by - * all the free functions for classes which inherit node Scan. - * ---------------- - */ -static void -FreeScanFields(Scan *node) -{ -} - -/* ---------------- - * _freeScan - * ---------------- - */ -static void -_freeScan(Scan *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeScanFields((Scan *) node); - - pfree(node); -} - -/* ---------------- - * _freeSeqScan - * ---------------- - */ -static void -_freeSeqScan(SeqScan *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeScanFields((Scan *) node); - - pfree(node); -} - -/* ---------------- - * _freeIndexScan - * ---------------- - */ -static void -_freeIndexScan(IndexScan *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeScanFields((Scan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeList(node->indxid); - freeObject(node->indxqual); - freeObject(node->indxqualorig); - - pfree(node); -} - -/* ---------------- - * _freeTidScan - * ---------------- - */ -static void -_freeTidScan(TidScan *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeScanFields((Scan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->tideval); - - pfree(node); -} - -/* ---------------- - * FreeJoinFields - * - * This function frees the fields of the Join node. It is used by - * all the free functions for classes which inherit node Join. - * ---------------- - */ -static void -FreeJoinFields(Join *node) -{ - /* nothing extra */ - return; -} - - -/* ---------------- - * _freeJoin - * ---------------- - */ -static void -_freeJoin(Join *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeJoinFields(node); - - pfree(node); -} - - -/* ---------------- - * _freeNestLoop - * ---------------- - */ -static void -_freeNestLoop(NestLoop *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeJoinFields((Join *) node); - - pfree(node); -} - - -/* ---------------- - * _freeMergeJoin - * ---------------- - */ -static void -_freeMergeJoin(MergeJoin *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeJoinFields((Join *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->mergeclauses); - - pfree(node); -} - -/* ---------------- - * _freeHashJoin - * ---------------- - */ -static void -_freeHashJoin(HashJoin *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - FreeJoinFields((Join *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->hashclauses); - - pfree(node); -} - - -/* ---------------- - * _freeMaterial - * ---------------- - */ -static void -_freeMaterial(Material *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - pfree(node); -} - - -/* ---------------- - * _freeSort - * ---------------- - */ -static void -_freeSort(Sort *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - pfree(node); -} - - -/* ---------------- - * _freeGroup - * ---------------- - */ -static void -_freeGroup(Group *node) -{ - FreePlanFields((Plan *) node); - - pfree(node->grpColIdx); - - pfree(node); -} - -/* --------------- - * _freeAgg - * -------------- - */ -static void -_freeAgg(Agg *node) -{ - FreePlanFields((Plan *) node); - - pfree(node); -} - -/* --------------- - * _freeGroupClause - * -------------- - */ -static void -_freeGroupClause(GroupClause *node) -{ - pfree(node); -} - - -/* ---------------- - * _freeUnique - * ---------------- - */ -static void -_freeUnique(Unique *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - pfree(node->uniqColIdx); - - pfree(node); -} - - -/* ---------------- - * _freeHash - * ---------------- - */ -static void -_freeHash(Hash *node) -{ - /* ---------------- - * free node superclass fields - * ---------------- - */ - FreePlanFields((Plan *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->hashkey); - - pfree(node); -} - -static void -_freeSubPlan(SubPlan *node) -{ - freeObject(node->plan); - freeObject(node->rtable); - freeList(node->setParam); - freeList(node->parParam); - freeObject(node->sublink); - - if (node->curTuple) - heap_freetuple(node->curTuple); - - pfree(node); -} - -/* **************************************************************** - * primnodes.h free functions - * **************************************************************** - */ - -/* ---------------- - * _freeResdom - * ---------------- - */ -static void -_freeResdom(Resdom *node) -{ - if (node->resname != NULL) - pfree(node->resname); - - pfree(node); -} - -static void -_freeFjoin(Fjoin *node) -{ - freeObject(node->fj_innerNode); - pfree(node->fj_results); - pfree(node->fj_alwaysDone); - - pfree(node); -} - -/* ---------------- - * _freeExpr - * ---------------- - */ -static void -_freeExpr(Expr *node) -{ - freeObject(node->oper); - freeObject(node->args); - - pfree(node); -} - -/* ---------------- - * _freeVar - * ---------------- - */ -static void -_freeVar(Var *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - pfree(node); -} - -static void -_freeFcache(FunctionCachePtr ptr) -{ - if (ptr->argOidVect) - pfree(ptr->argOidVect); - if (ptr->src) - pfree(ptr->src); - if (ptr->bin) - pfree(ptr->bin); - if (ptr->func_state) - pfree(ptr->func_state); - - pfree(ptr); -} - -/* ---------------- - * _freeOper - * ---------------- - */ -static void -_freeOper(Oper *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - if (node->op_fcache) - _freeFcache(node->op_fcache); - - pfree(node); -} - -/* ---------------- - * _freeConst - * ---------------- - */ -static void -_freeConst(Const *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - if (!node->constbyval) - pfree((void *) node->constvalue); - - pfree(node); -} - -/* ---------------- - * _freeParam - * ---------------- - */ -static void -_freeParam(Param *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - if (node->paramname != NULL) - pfree(node->paramname); - freeObject(node->param_tlist); - - pfree(node); -} - -/* ---------------- - * _freeFunc - * ---------------- - */ -static void -_freeFunc(Func *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->func_tlist); - freeObject(node->func_planlist); - if (node->func_fcache) - _freeFcache(node->func_fcache); - - pfree(node); -} - -/* ---------------- - * _freeAggref - * ---------------- - */ -static void -_freeAggref(Aggref *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - pfree(node->aggname); - freeObject(node->target); - - pfree(node); -} - -/* ---------------- - * _freeSubLink - * ---------------- - */ -static void -_freeSubLink(SubLink *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->lefthand); - freeObject(node->oper); - freeObject(node->subselect); - - pfree(node); -} - -/* ---------------- - * _freeRelabelType - * ---------------- - */ -static void -_freeRelabelType(RelabelType *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->arg); - - pfree(node); -} - -/* ---------------- - * _freeCaseExpr - * ---------------- - */ -static void -_freeCaseExpr(CaseExpr *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->arg); - freeObject(node->args); - freeObject(node->defresult); - - pfree(node); -} - -/* ---------------- - * _freeCaseWhen - * ---------------- - */ -static void -_freeCaseWhen(CaseWhen *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->expr); - freeObject(node->result); - - pfree(node); -} - -static void -_freeArray(Array *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - pfree(node); -} - -static void -_freeArrayRef(ArrayRef *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->refupperindexpr); - freeObject(node->reflowerindexpr); - freeObject(node->refexpr); - freeObject(node->refassgnexpr); - - pfree(node); -} - -/* **************************************************************** - * relation.h free functions - * **************************************************************** - */ - -/* ---------------- - * _freeRelOptInfo - * ---------------- - */ -static void -_freeRelOptInfo(RelOptInfo *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeList(node->relids); - - freeObject(node->targetlist); - freeObject(node->pathlist); - - /* - * XXX is this right? cheapest-path fields will typically be pointers - * into pathlist, not separate structs... - */ - freeObject(node->cheapest_startup_path); - freeObject(node->cheapest_total_path); - - freeObject(node->baserestrictinfo); - freeObject(node->joininfo); - freeObject(node->innerjoin); - - pfree(node); -} - -/* ---------------- - * _freeIndexOptInfo - * ---------------- - */ -static void -_freeIndexOptInfo(IndexOptInfo *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - if (node->classlist) - pfree(node->classlist); - - if (node->indexkeys) - pfree(node->indexkeys); - - if (node->ordering) - pfree(node->ordering); - - freeObject(node->indpred); - - pfree(node); -} - -/* ---------------- - * FreePathFields - * - * This function frees the fields of the Path node. It is used by - * all the free functions for classes which inherit node Path. - * ---------------- - */ -static void -FreePathFields(Path *node) -{ - /* we do NOT free the parent; it doesn't belong to the Path */ - - freeObject(node->pathkeys); -} - -/* ---------------- - * _freePath - * ---------------- - */ -static void -_freePath(Path *node) -{ - FreePathFields(node); - - pfree(node); -} - -/* ---------------- - * _freeIndexPath - * ---------------- - */ -static void -_freeIndexPath(IndexPath *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePathFields((Path *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeList(node->indexid); - freeObject(node->indexqual); - freeList(node->joinrelids); - - pfree(node); -} - -/* ---------------- - * _freeTidPath - * ---------------- - */ -static void -_freeTidPath(TidPath *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePathFields((Path *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->tideval); - freeList(node->unjoined_relids); - - pfree(node); -} - -/* ---------------- - * FreeJoinPathFields - * - * This function frees the fields of the JoinPath node. It is used by - * all the free functions for classes which inherit node JoinPath. - * ---------------- - */ -static void -FreeJoinPathFields(JoinPath *node) -{ - freeObject(node->outerjoinpath); - freeObject(node->innerjoinpath); - - /* - * XXX probably wrong, since ordinarily a JoinPath would share its - * restrictinfo list with other paths made for the same join? - */ - freeObject(node->joinrestrictinfo); -} - -/* ---------------- - * _freeNestPath - * ---------------- - */ -static void -_freeNestPath(NestPath *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePathFields((Path *) node); - FreeJoinPathFields((JoinPath *) node); - - pfree(node); -} - -/* ---------------- - * _freeMergePath - * ---------------- - */ -static void -_freeMergePath(MergePath *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePathFields((Path *) node); - FreeJoinPathFields((JoinPath *) node); - - /* ---------------- - * free the remainder of the node - * ---------------- - */ - freeObject(node->path_mergeclauses); - freeObject(node->outersortkeys); - freeObject(node->innersortkeys); - - pfree(node); -} - -/* ---------------- - * _freeHashPath - * ---------------- - */ -static void -_freeHashPath(HashPath *node) -{ - /* ---------------- - * free the node superclass fields - * ---------------- - */ - FreePathFields((Path *) node); - FreeJoinPathFields((JoinPath *) node); - - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->path_hashclauses); - - pfree(node); -} - -/* ---------------- - * _freePathKeyItem - * ---------------- - */ -static void -_freePathKeyItem(PathKeyItem *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->key); - - pfree(node); -} - - -/* ---------------- - * _freeRestrictInfo - * ---------------- - */ -static void -_freeRestrictInfo(RestrictInfo *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeObject(node->clause); - - /* - * this is certainly wrong? IndexOptInfos don't belong to - * RestrictInfo... - */ - freeObject(node->subclauseindices); - - pfree(node); -} - -/* ---------------- - * _freeJoinInfo - * ---------------- - */ -static void -_freeJoinInfo(JoinInfo *node) -{ - /* ---------------- - * free remainder of node - * ---------------- - */ - freeList(node->unjoined_relids); - freeObject(node->jinfo_restrictinfo); - - pfree(node); -} - -static void -_freeIter(Iter *node) -{ - freeObject(node->iterexpr); - - pfree(node); -} - -static void -_freeStream(Stream *node) -{ - freeObject(node->downstream); - - pfree(node); -} - -/* - * parsenodes.h routines have no free functions - */ - -static void -_freeTargetEntry(TargetEntry *node) -{ - freeObject(node->resdom); - freeObject(node->fjoin); - freeObject(node->expr); - - pfree(node); -} - -static void -_freeRangeTblEntry(RangeTblEntry *node) -{ - if (node->relname) - pfree(node->relname); - freeObject(node->ref); - freeObject(node->eref); - - pfree(node); -} - -static void -_freeAttr(Attr *node) -{ - if (node->relname) - pfree(node->relname); - freeObject(node->attrs); - - pfree(node); -} - -static void -_freeRowMark(RowMark *node) -{ - pfree(node); -} - -static void -_freeSortClause(SortClause *node) -{ - pfree(node); -} - -static void -_freeAConst(A_Const *node) -{ - freeObject(&(node->val)); - freeObject(node->typename); - - pfree(node); -} - -static void -_freeTypeName(TypeName *node) -{ - if (node->name) - pfree(node->name); - freeObject(node->arrayBounds); - - pfree(node); -} - -static void -_freeTypeCast(TypeCast *node) -{ - freeObject(node->arg); - freeObject(node->typename); - - pfree(node); -} - -static void -_freeQuery(Query *node) -{ - if (node->utilityStmt && nodeTag(node->utilityStmt) == T_NotifyStmt) - { - NotifyStmt *node_notify = (NotifyStmt *) node->utilityStmt; - - pfree(node_notify->relname); - pfree(node_notify); - } - if (node->into) - pfree(node->into); - freeObject(node->rtable); - freeObject(node->targetList); - freeObject(node->qual); - freeObject(node->rowMark); - freeObject(node->distinctClause); - freeObject(node->sortClause); - freeObject(node->groupClause); - freeObject(node->havingQual); - /* why not intersectClause? */ - freeObject(node->unionClause); - freeObject(node->limitOffset); - freeObject(node->limitCount); - - /* XXX should we be freeing the planner internal fields? */ - - pfree(node); -} - - -/* - * mnodes.h routines have no free functions - */ - -/* **************************************************************** - * pg_list.h free functions - * **************************************************************** - */ - -static void -_freeValue(Value *node) -{ - switch (node->type) - { - case T_Float: - case T_String: - pfree(node->val.str); - break; - default: - break; - } - - pfree(node); -} - -/* ---------------- - * freeObject free's the node or list. If it is a list, it - * recursively frees its items. - * ---------------- - */ -static void -freeObject(void *node) -{ - if (node == NULL) - return; - - switch (nodeTag(node)) - { - - /* - * PLAN NODES - */ - case T_Plan: - _freePlan(node); - break; - case T_Result: - _freeResult(node); - break; - case T_Append: - _freeAppend(node); - break; - case T_Scan: - _freeScan(node); - break; - case T_SeqScan: - _freeSeqScan(node); - break; - case T_IndexScan: - _freeIndexScan(node); - break; - case T_TidScan: - _freeTidScan(node); - break; - case T_Join: - _freeJoin(node); - break; - case T_NestLoop: - _freeNestLoop(node); - break; - case T_MergeJoin: - _freeMergeJoin(node); - break; - case T_HashJoin: - _freeHashJoin(node); - break; - case T_Material: - _freeMaterial(node); - break; - case T_Sort: - _freeSort(node); - break; - case T_Group: - _freeGroup(node); - break; - case T_Agg: - _freeAgg(node); - break; - case T_GroupClause: - _freeGroupClause(node); - break; - case T_Unique: - _freeUnique(node); - break; - case T_Hash: - _freeHash(node); - break; - case T_SubPlan: - _freeSubPlan(node); - break; - - /* - * PRIMITIVE NODES - */ - case T_Resdom: - _freeResdom(node); - break; - case T_Fjoin: - _freeFjoin(node); - break; - case T_Expr: - _freeExpr(node); - break; - case T_Var: - _freeVar(node); - break; - case T_Oper: - _freeOper(node); - break; - case T_Const: - _freeConst(node); - break; - case T_Param: - _freeParam(node); - break; - case T_Func: - _freeFunc(node); - break; - case T_Array: - _freeArray(node); - break; - case T_ArrayRef: - _freeArrayRef(node); - break; - case T_Aggref: - _freeAggref(node); - break; - case T_SubLink: - _freeSubLink(node); - break; - case T_RelabelType: - _freeRelabelType(node); - break; - case T_CaseExpr: - _freeCaseExpr(node); - break; - case T_CaseWhen: - _freeCaseWhen(node); - break; - - /* - * RELATION NODES - */ - case T_RelOptInfo: - _freeRelOptInfo(node); - break; - case T_Path: - _freePath(node); - break; - case T_IndexPath: - _freeIndexPath(node); - break; - case T_TidPath: - _freeTidPath(node); - break; - case T_NestPath: - _freeNestPath(node); - break; - case T_MergePath: - _freeMergePath(node); - break; - case T_HashPath: - _freeHashPath(node); - break; - case T_PathKeyItem: - _freePathKeyItem(node); - break; - case T_RestrictInfo: - _freeRestrictInfo(node); - break; - case T_JoinInfo: - _freeJoinInfo(node); - break; - case T_Iter: - _freeIter(node); - break; - case T_Stream: - _freeStream(node); - break; - case T_IndexOptInfo: - _freeIndexOptInfo(node); - break; - - /* - * PARSE NODES - */ - case T_Query: - _freeQuery(node); - break; - case T_TargetEntry: - _freeTargetEntry(node); - break; - case T_RangeTblEntry: - _freeRangeTblEntry(node); - break; - case T_RowMark: - _freeRowMark(node); - break; - case T_SortClause: - _freeSortClause(node); - break; - case T_A_Const: - _freeAConst(node); - break; - case T_TypeName: - _freeTypeName(node); - break; - case T_TypeCast: - _freeTypeCast(node); - break; - case T_Attr: - _freeAttr(node); - break; - - /* - * VALUE NODES - */ - case T_Integer: - case T_Float: - case T_String: - _freeValue(node); - break; - case T_List: - { - List *list = node, - *l; - - foreach(l, list) - freeObject(lfirst(l)); - freeList(list); - } - break; - default: - elog(ERROR, "freeObject: don't know how to free %d", nodeTag(node)); - break; - } -}