⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 execnodes.h

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 H
📖 第 1 页 / 共 3 页
字号:
 * but have one child Expr node. * ---------------- */typedef struct GenericExprState{	ExprState	xprstate;	ExprState  *arg;			/* state of my child node */} GenericExprState;/* ---------------- *		AggrefExprState node * ---------------- */typedef struct AggrefExprState{	ExprState	xprstate;	ExprState  *target;			/* state of my child node */	int			aggno;			/* ID number for agg within its plan node */} AggrefExprState;/* ---------------- *		ArrayRefExprState node * * Note: array types can be fixed-length (typlen > 0), but only when the * element type is itself fixed-length.  Otherwise they are varlena structures * and have typlen = -1.  In any case, an array type is never pass-by-value. * ---------------- */typedef struct ArrayRefExprState{	ExprState	xprstate;	List	   *refupperindexpr;	/* states for child nodes */	List	   *reflowerindexpr;	ExprState  *refexpr;	ExprState  *refassgnexpr;	int16		refattrlength;	/* typlen of array type */	int16		refelemlength;	/* typlen of the array element type */	bool		refelembyval;	/* is the element type pass-by-value? */	char		refelemalign;	/* typalign of the element type */} ArrayRefExprState;/* ---------------- *		FuncExprState node * * Although named for FuncExpr, this is also used for OpExpr, DistinctExpr, * and NullIf nodes; be careful to check what xprstate.expr is actually * pointing at! * ---------------- */typedef struct FuncExprState{	ExprState	xprstate;	List	   *args;			/* states of argument expressions */	/*	 * Function manager's lookup info for the target function.  If func.fn_oid	 * is InvalidOid, we haven't initialized it yet.	 */	FmgrInfo	func;	/*	 * We also need to store argument values across calls when evaluating a	 * function-returning-set.	 *	 * setArgsValid is true when we are evaluating a set-valued function and	 * we are in the middle of a call series; we want to pass the same	 * argument values to the function again (and again, until it returns	 * ExprEndResult).	 */	bool		setArgsValid;	/*	 * Flag to remember whether we found a set-valued argument to the	 * function. This causes the function result to be a set as well. Valid	 * only when setArgsValid is true.	 */	bool		setHasSetArg;	/* some argument returns a set */	/*	 * Flag to remember whether we have registered a shutdown callback for	 * this FuncExprState.	We do so only if setArgsValid has been true at	 * least once (since all the callback is for is to clear setArgsValid).	 */	bool		shutdown_reg;	/* a shutdown callback is registered */	/*	 * Current argument data for a set-valued function; contains valid data	 * only if setArgsValid is true.	 */	FunctionCallInfoData setArgs;} FuncExprState;/* ---------------- *		ScalarArrayOpExprState node * * This is a FuncExprState plus some additional data. * ---------------- */typedef struct ScalarArrayOpExprState{	FuncExprState fxprstate;	/* Cached info about array element type */	Oid			element_type;	int16		typlen;	bool		typbyval;	char		typalign;} ScalarArrayOpExprState;/* ---------------- *		BoolExprState node * ---------------- */typedef struct BoolExprState{	ExprState	xprstate;	List	   *args;			/* states of argument expression(s) */} BoolExprState;/* ---------------- *		SubPlanState node * ---------------- */typedef struct SubPlanState{	ExprState	xprstate;	EState	   *sub_estate;		/* subselect plan has its own EState */	struct PlanState *planstate;	/* subselect plan's state tree */	List	   *exprs;			/* states of combining expression(s) */	List	   *args;			/* states of argument expression(s) */	bool		needShutdown;	/* TRUE = need to shutdown subplan */	HeapTuple	curTuple;		/* copy of most recent tuple from subplan */	/* these are used when hashing the subselect's output: */	ProjectionInfo *projLeft;	/* for projecting lefthand exprs */	ProjectionInfo *projRight;	/* for projecting subselect output */	TupleHashTable hashtable;	/* hash table for no-nulls subselect rows */	TupleHashTable hashnulls;	/* hash table for rows with null(s) */	bool		havehashrows;	/* TRUE if hashtable is not empty */	bool		havenullrows;	/* TRUE if hashnulls is not empty */	MemoryContext tablecxt;		/* memory context containing tables */	ExprContext *innerecontext; /* working context for comparisons */	AttrNumber *keyColIdx;		/* control data for hash tables */	FmgrInfo   *eqfunctions;	/* comparison functions for hash tables */	FmgrInfo   *hashfunctions;	/* lookup data for hash functions */} SubPlanState;/* ---------------- *		FieldSelectState node * ---------------- */typedef struct FieldSelectState{	ExprState	xprstate;	ExprState  *arg;			/* input expression */	TupleDesc	argdesc;		/* tupdesc for most recent input */} FieldSelectState;/* ---------------- *		FieldStoreState node * ---------------- */typedef struct FieldStoreState{	ExprState	xprstate;	ExprState  *arg;			/* input tuple value */	List	   *newvals;		/* new value(s) for field(s) */	TupleDesc	argdesc;		/* tupdesc for most recent input */} FieldStoreState;/* ---------------- *		ConvertRowtypeExprState node * ---------------- */typedef struct ConvertRowtypeExprState{	ExprState	xprstate;	ExprState  *arg;			/* input tuple value */	TupleDesc	indesc;			/* tupdesc for source rowtype */	TupleDesc	outdesc;		/* tupdesc for result rowtype */	AttrNumber *attrMap;		/* indexes of input fields, or 0 for null */	Datum	   *invalues;		/* workspace for deconstructing source */	bool	   *inisnull;	Datum	   *outvalues;		/* workspace for constructing result */	bool	   *outisnull;} ConvertRowtypeExprState;/* ---------------- *		CaseExprState node * ---------------- */typedef struct CaseExprState{	ExprState	xprstate;	ExprState  *arg;			/* implicit equality comparison argument */	List	   *args;			/* the arguments (list of WHEN clauses) */	ExprState  *defresult;		/* the default result (ELSE clause) */} CaseExprState;/* ---------------- *		CaseWhenState node * ---------------- */typedef struct CaseWhenState{	ExprState	xprstate;	ExprState  *expr;			/* condition expression */	ExprState  *result;			/* substitution result */} CaseWhenState;/* ---------------- *		ArrayExprState node * * Note: ARRAY[] expressions always produce varlena arrays, never fixed-length * arrays. * ---------------- */typedef struct ArrayExprState{	ExprState	xprstate;	List	   *elements;		/* states for child nodes */	int16		elemlength;		/* typlen of the array element type */	bool		elembyval;		/* is the element type pass-by-value? */	char		elemalign;		/* typalign of the element type */} ArrayExprState;/* ---------------- *		RowExprState node * ---------------- */typedef struct RowExprState{	ExprState	xprstate;	List	   *args;			/* the arguments */	TupleDesc	tupdesc;		/* descriptor for result tuples */} RowExprState;/* ---------------- *		CoalesceExprState node * ---------------- */typedef struct CoalesceExprState{	ExprState	xprstate;	List	   *args;			/* the arguments */} CoalesceExprState;/* ---------------- *		MinMaxExprState node * ---------------- */typedef struct MinMaxExprState{	ExprState	xprstate;	List	   *args;			/* the arguments */	FmgrInfo	cfunc;			/* lookup info for comparison func */} MinMaxExprState;/* ---------------- *		CoerceToDomainState node * ---------------- */typedef struct CoerceToDomainState{	ExprState	xprstate;	ExprState  *arg;			/* input expression */	/* Cached list of constraints that need to be checked */	List	   *constraints;	/* list of DomainConstraintState nodes */} CoerceToDomainState;/* * DomainConstraintState - one item to check during CoerceToDomain * * Note: this is just a Node, and not an ExprState, because it has no * corresponding Expr to link to.  Nonetheless it is part of an ExprState * tree, so we give it a name following the xxxState convention. */typedef enum DomainConstraintType{	DOM_CONSTRAINT_NOTNULL,	DOM_CONSTRAINT_CHECK} DomainConstraintType;typedef struct DomainConstraintState{	NodeTag		type;	DomainConstraintType constrainttype;		/* constraint type */	char	   *name;			/* name of constraint (for error msgs) */	ExprState  *check_expr;		/* for CHECK, a boolean expression */} DomainConstraintState;/* ---------------------------------------------------------------- *				 Executor State Trees * * An executing query has a PlanState tree paralleling the Plan tree * that describes the plan. * ---------------------------------------------------------------- *//* ---------------- *		PlanState node * * We never actually instantiate any PlanState nodes; this is just the common * abstract superclass for all PlanState-type nodes. * ---------------- */typedef struct PlanState{	NodeTag		type;	Plan	   *plan;			/* associated Plan node */	EState	   *state;			/* at execution time, state's of individual								 * nodes point to one EState for the whole								 * top-level plan */	struct Instrumentation *instrument; /* Optional runtime stats for this										 * plan node */	/*	 * Common structural data for all Plan types.  These links to subsidiary	 * state trees parallel links in the associated plan tree (except for the	 * subPlan list, which does not exist in the plan tree).	 */	List	   *targetlist;		/* target list to be computed at this node */	List	   *qual;			/* implicitly-ANDed qual conditions */	struct PlanState *lefttree; /* input plan tree(s) */	struct PlanState *righttree;	List	   *initPlan;		/* Init SubPlanState nodes (un-correlated expr								 * subselects) */	List	   *subPlan;		/* SubPlanState nodes in my expressions */	/*	 * State for management of parameter-change-driven rescanning	 */	Bitmapset  *chgParam;		/* set of IDs of changed Params */	/*	 * Other run-time state needed by most if not all node types.	 */	TupleTableSlot *ps_OuterTupleSlot;	/* slot for current "outer" tuple */	TupleTableSlot *ps_ResultTupleSlot; /* slot for my result tuples */	ExprContext *ps_ExprContext;	/* node's expression-evaluation context */	ProjectionInfo *ps_ProjInfo;	/* info for doing tuple projection */	bool		ps_TupFromTlist;/* state flag for processing set-valued								 * functions in targetlist */} PlanState;/* ---------------- *	these are are defined to avoid confusion problems with "left" *	and "right" and "inner" and "outer".  The convention is that *	the "left" plan is the "outer" plan and the "right" plan is *	the inner plan, but these make the code more readable. * ---------------- */#define innerPlanState(node)		(((PlanState *)(node))->righttree)#define outerPlanState(node)		(((PlanState *)(node))->lefttree)/* ---------------- *	 ResultState information * ---------------- */typedef struct ResultState{	PlanState	ps;				/* its first field is NodeTag */	ExprState  *resconstantqual;	bool		rs_done;		/* are we done? */	bool		rs_checkqual;	/* do we need to check the qual? */} ResultState;/* ---------------- *	 AppendState information * *		nplans			how many plans are in the list *		whichplan		which plan is being executed (0 .. n-1) *		firstplan		first plan to execute (usually 0) *		lastplan		last plan to execute (usually n-1) * ---------------- */typedef struct AppendState{	PlanState	ps;				/* its first field is NodeTag */	PlanState **appendplans;	/* array of PlanStates for my inputs */	int			as_nplans;	int			as_whichplan;	int			as_firstplan;	int			as_lastplan;} AppendState;/* ---------------- *	 BitmapAndState information * ---------------- */typedef struct BitmapAndState{	PlanState	ps;				/* its first field is NodeTag */	PlanState **bitmapplans;	/* array of PlanStates for my inputs */	int			nplans;			/* number of input plans */} BitmapAndState;/* ---------------- *	 BitmapOrState information * ---------------- */typedef struct BitmapOrState{	PlanState	ps;				/* its first field is NodeTag */	PlanState **bitmapplans;	/* array of PlanStates for my inputs */	int			nplans;			/* number of input plans */} BitmapOrState;/* ---------------------------------------------------------------- *				 Scan State Information * ---------------------------------------------------------------- *//* ---------------- *	 ScanState information * *		ScanState extends PlanState for node types that represent *		scans of an underlying relation.  It can also be used for nodes *		that scan the output of an underlying plan node --- in that case, *		only ScanTupleSlot is actually useful, and it refers to the tuple *		retrieved from the subplan. * *		currentRelation    relation being scanned (NULL if none) *		currentScanDesc    current scan descriptor for scan (NULL if none) *		ScanTupleSlot	   pointer to slot in tuple table holding scan tuple * ---------------- */typedef struct ScanState{	PlanState	ps;				/* its first field is NodeTag */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -