📄 execnodes.h
字号:
/*------------------------------------------------------------------------- * * execnodes.h * definitions for executor state nodes * * * Copyright (c) 1994, Regents of the University of California * * $Id: execnodes.h,v 1.30 1999/05/25 22:42:54 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef EXECNODES_H#define EXECNODES_H#include <nodes/memnodes.h>#include <nodes/primnodes.h>#include <executor/hashjoin.h>#include <access/relscan.h>#include <access/sdir.h>#include <nodes/params.h>#include <executor/tuptable.h>#include <access/funcindex.h>/* ---------------- * IndexInfo information * * this class holds the information saying what attributes * are the key attributes for this index. -cim 10/15/89 * * NumKeyAttributes number of key attributes for this index * KeyAttributeNumbers array of attribute numbers used as keys * Predicate partial-index predicate for this index * ---------------- */typedef struct IndexInfo{ NodeTag type; int ii_NumKeyAttributes; AttrNumber *ii_KeyAttributeNumbers; FuncIndexInfoPtr ii_FuncIndexInfo; Node *ii_Predicate;} IndexInfo;/* ---------------- * RelationInfo information * * whenever we update an existing relation, we have to * update indices on the relation. The RelationInfo class * is used to hold all the information on result relations, * including indices.. -cim 10/15/89 * * RangeTableIndex result relation's range table index * RelationDesc relation descriptor for result relation * NumIndices number indices existing on result relation * IndexRelationDescs array of relation descriptors for indices * IndexRelationInfo array of key/attr info for indices * ---------------- */typedef struct RelationInfo{ NodeTag type; Index ri_RangeTableIndex; Relation ri_RelationDesc; int ri_NumIndices; RelationPtr ri_IndexRelationDescs; IndexInfo **ri_IndexRelationInfo;} RelationInfo;/* ---------------- * ExprContext * * This class holds the "current context" information * needed to evaluate expressions for doing tuple qualifications * and tuple projections. For example, if an expression refers * to an attribute in the current inner tuple then we need to know * what the current inner tuple is and so we look at the expression * context. * ---------------- */typedef struct ExprContext{ NodeTag type; TupleTableSlot *ecxt_scantuple; TupleTableSlot *ecxt_innertuple; TupleTableSlot *ecxt_outertuple; Relation ecxt_relation; Index ecxt_relid; ParamListInfo ecxt_param_list_info; ParamExecData *ecxt_param_exec_vals; /* this is for subselects */ List *ecxt_range_table; Datum *ecxt_values; /* precomputed values for aggreg */ char *ecxt_nulls; /* null flags for aggreg values */} ExprContext;/* ---------------- * ProjectionInfo node information * * This is all the information needed to preform projections * on a tuple. Nodes which need to do projections create one * of these. In theory, when a node wants to preform a projection * it should just update this information as necessary and then * call ExecProject(). -cim 6/3/91 * * targetlist target list for projection * len length of target list * tupValue array of pointers to projection results * exprContext expression context for ExecTargetList * slot slot to place projection result in * ---------------- */typedef struct ProjectionInfo{ NodeTag type; List *pi_targetlist; int pi_len; Datum *pi_tupValue; ExprContext *pi_exprContext; TupleTableSlot *pi_slot;} ProjectionInfo;/* ---------------- * JunkFilter * * this class is used to store information regarding junk attributes. * A junk attribute is an attribute in a tuple that is needed only for * storing intermediate information in the executor, and does not belong * in the tuple proper. For example, when we do a delete or replace * query, the planner adds an entry to the targetlist so that the tuples * returned to ExecutePlan() contain an extra attribute: the t_ctid of * the tuple to be deleted/replaced. This is needed for amdelete() and * amreplace(). In doing a delete this does not make much of a * difference, but in doing a replace we have to make sure we disgard * all the junk in a tuple before calling amreplace(). Otherwise the * inserted tuple will not have the correct schema. This solves a * problem with hash-join and merge-sort replace plans. -cim 10/10/90 * * targetList: the original target list (including junk attributes). * length: the length of 'targetList'. * tupType: the tuple descriptor for the "original" tuple * (including the junk attributes). * cleanTargetList: the "clean" target list (junk attributes removed). * cleanLength: the length of 'cleanTargetList' * cleanTupTyp: the tuple descriptor of the "clean" tuple (with * junk attributes removed). * cleanMap: A map with the correspondance between the non junk * attributes of the "original" tuple and the * attributes of the "clean" tuple. * ---------------- */typedef struct JunkFilter{ NodeTag type; List *jf_targetList; int jf_length; TupleDesc jf_tupType; List *jf_cleanTargetList; int jf_cleanLength; TupleDesc jf_cleanTupType; AttrNumber *jf_cleanMap;} JunkFilter;/* ---------------- * EState information * * direction direction of the scan * * range_table array of scan relation information * * result_relation_information for update queries * * into_relation_descriptor relation being retrieved "into" * * param_list_info information needed to transform * Param nodes into Const nodes * * BaseId during InitPlan(), each node is * given a number. this is the next * number to be assigned. * * tupleTable this is a pointer to an array * of pointers to tuples used by * the executor at any given moment. * * junkFilter contains information used to * extract junk attributes from a tuple. * (see JunkFilter above) * * refcount local buffer refcounts used in * an ExecMain cycle. this is introduced * to avoid ExecStart's unpinning each * other's buffers when called recursively * ---------------- */typedef struct EState{ NodeTag type; ScanDirection es_direction; Snapshot es_snapshot; List *es_range_table; RelationInfo *es_result_relation_info; List **es_result_relation_constraints; Relation es_into_relation_descriptor; ParamListInfo es_param_list_info; ParamExecData *es_param_exec_vals; /* this is for subselects */ int es_BaseId; TupleTable es_tupleTable; JunkFilter *es_junkFilter; int *es_refcount; uint32 es_processed; /* # of tuples processed */ Oid es_lastoid; /* last oid processed (by INSERT) */ List *es_rowMark; /* not good place, but there is no other */ /* Below is to re-evaluate plan qual in READ COMMITTED mode */ struct Plan *es_origPlan; Pointer es_evalPlanQual; bool *es_evTupleNull; HeapTuple *es_evTuple; bool es_useEvalPlan;} EState;/* ---------------- * Executor Type information needed by plannodes.h * *| Note: the bogus classes CommonState and CommonScanState exist only *| because our inheritance system only allows single inheritance *| and we have to have unique slot names. Hence two or more *| classes which want to have a common slot must ALL inherit *| the slot from some other class. (This is a big hack to *| allow our classes to share slot names..) *| *| Example: *| the class Result and the class NestLoop nodes both want *| a slot called "OuterTuple" so they both have to inherit *| it from some other class. In this case they inherit *| it from CommonState. "CommonState" and "CommonScanState" are *| the best names I could come up with for this sort of *| stuff. *| *| As a result, many classes have extra slots which they *| don't use. These slots are denoted (unused) in the *| comment preceeding the class definition. If you *| comes up with a better idea of a way of doing things *| along these lines, then feel free to make your idea *| known to me.. -cim 10/15/89 * ---------------- *//* ---------------------------------------------------------------- * Common Executor State Information * ---------------------------------------------------------------- *//* BaseNode removed -- base_id moved into CommonState - jolly *//* ---------------- * CommonState information * *| this is a bogus class used to hold slots so other *| nodes can inherit them... * * OuterTupleSlot pointer to slot containing current "outer" tuple * ResultTupleSlot pointer to slot in tuple table for projected tuple * ExprContext node's current expression context * ProjInfo info this node uses to form tuple projections * NumScanAttributes size of ScanAttributes array * ScanAttributes attribute numbers of interest in this tuple * * ---------------- */typedef struct CommonState{ NodeTag type; /* its first field is NodeTag */ int cs_base_id; TupleTableSlot *cs_OuterTupleSlot; TupleTableSlot *cs_ResultTupleSlot; ExprContext *cs_ExprContext; ProjectionInfo *cs_ProjInfo; bool cs_TupFromTlist;} CommonState;/* ---------------------------------------------------------------- * Control Node State Information * ---------------------------------------------------------------- *//* ---------------- * ResultState information * * done flag which tells us to quit when we * have already returned a constant tuple. * * CommonState information * * OuterTupleSlot pointer to slot containing current "outer" tuple * ResultTupleSlot pointer to slot in tuple table for projected tuple * ExprContext node's current expression context * ProjInfo info this node uses to form tuple projections * NumScanAttributes size of ScanAttributes array * ScanAttributes attribute numbers of interest in this tuple * ---------------- */typedef struct ResultState{ CommonState cstate; /* its first field is NodeTag */ bool rs_done; bool rs_checkqual;} ResultState;/* ---------------- * AppendState information * * append nodes have this field "unionplans" which is this * list of plans to execute in sequence.. these variables * keep track of things.. * * whichplan which plan is being executed * nplans how many plans are in the list * initialized array of ExecInitNode() results * rtentries range table for the current plan * result_relation_info_list array of each subplan's result relation info * junkFilter_list array of each subplan's junk filter * * CommonState information * * OuterTupleSlot pointer to slot containing current "outer" tuple * ResultTupleSlot pointer to slot in tuple table for projected tuple * ExprContext node's current expression context * ProjInfo info this node uses to form tuple projections * NumScanAttributes size of ScanAttributes array * ScanAttributes attribute numbers of interest in this tuple * ---------------- */typedef struct AppendState{ CommonState cstate; /* its first field is NodeTag */ int as_whichplan; int as_nplans; bool *as_initialized; List *as_rtentries; List *as_result_relation_info_list; List *as_junkFilter_list;} AppendState;/* ---------------------------------------------------------------- * Scan State Information * ---------------------------------------------------------------- *//* ---------------- * CommonScanState information * * CommonScanState is a class like CommonState, but is used more
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -