?? freefuncs.c
字號:
/*------------------------------------------------------------------------- * * freefuncs.c * Free functions for Postgres tree nodes. * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * $Header: /usr/local/cvsroot/pgsql/src/backend/nodes/freefuncs.c,v 1.19 1999/05/26 12:55:20 momjian Exp $ * *------------------------------------------------------------------------- */#include <stdio.h>#include <string.h>#include "postgres.h"#include "nodes/pg_list.h"#include "nodes/execnodes.h"#include "nodes/plannodes.h"#include "nodes/parsenodes.h"#include "nodes/primnodes.h"#include "nodes/relation.h"#include "utils/syscache.h"#include "utils/builtins.h" /* for namecpy */#include "utils/elog.h"#include "utils/palloc.h"#include "catalog/pg_type.h"#include "storage/lmgr.h"#include "optimizer/planmain.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 voidFreePlanFields(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 voidFreeScanFields(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);}/* ---------------- * 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 voidFreeJoinFields(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);}/* ---------------- * FreeNonameFields * * This function frees the fields of the Noname node. It is used by * all the free functions for classes which inherit node Noname. * ---------------- */static voidFreeNonameFields(Noname *node){ return;}/* ---------------- * _freeNoname * ---------------- */static void_freeNoname(Noname *node){ /* ---------------- * free node superclass fields * ---------------- */ FreePlanFields((Plan *) node); FreeNonameFields(node); pfree(node);}/* ---------------- * _freeMaterial * ---------------- */static void_freeMaterial(Material *node){ /* ---------------- * free node superclass fields * ---------------- */ FreePlanFields((Plan *) node); FreeNonameFields((Noname *) node); pfree(node);}/* ---------------- * _freeSort * ---------------- */static void_freeSort(Sort *node){ /* ---------------- * free node superclass fields * ---------------- */ FreePlanFields((Plan *) node); FreeNonameFields((Noname *) 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); freeList(node->aggs); pfree(node);}/* --------------- * _freeGroupClause * -------------- */static void_freeGroupClause(GroupClause *node){ pfree(node);}/* ---------------- * _freeUnique * ---------------- */static void_freeUnique(Unique *node){ /* ---------------- * free node superclass fields * ---------------- */ FreePlanFields((Plan *) node); FreeNonameFields((Noname *) node); /* ---------------- * free remainder of node * ---------------- */ if (node->uniqueAttr) pfree(node->uniqueAttr); 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); 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->nullVect) pfree(ptr->nullVect); if (ptr->src) pfree(ptr->src); if (ptr->bin) pfree(ptr->bin); if (ptr->func_state) pfree(ptr->func_state); if (ptr->setArg) pfree(ptr->setArg); 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);}/* ---------------- * _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)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -