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

📄 relation.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * relation.h *	  Definitions for internal planner nodes. * * * Copyright (c) 1994, Regents of the University of California * * $Id: relation.h,v 1.32 1999/05/25 22:43:01 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef RELATION_H#define RELATION_H#include <nodes/parsenodes.h>#include <nodes/primnodes.h>/* * Relids *		List of relation identifiers (indexes into the rangetable). */typedef List *Relids;/* * RelOptInfo *		Per-base-relation information * *		Parts of this data structure are specific to various scan and join *		mechanisms.  It didn't seem worth creating new node types for them. * *		relids - List of relation indentifiers *		indexed - true if the relation has secondary indices *		pages - number of pages in the relation *		tuples - number of tuples in the relation *		size - number of tuples in the relation after restrictions clauses *			   have been applied *		width - number of bytes per tuple in the relation after the *				appropriate projections have been done *		targetlist - List of TargetList nodes *		pathlist - List of Path nodes, one for each possible method of *				   generating the relation *		cheapestpath -	least expensive Path (regardless of final order) *		pruneable - flag to let the planner know whether it can prune the plan *					space of this RelOptInfo or not. * *	 * If the relation is a (secondary) index it will have the following *		three fields: * *		classlist - List of PG_AMOPCLASS OIDs for the index *		indexkeys - List of base-relation attribute numbers that are index keys *		ordering - List of PG_OPERATOR OIDs which order the indexscan result *		relam	  - the OID of the pg_am of the index * *	 * The presence of the remaining fields depends on the restrictions *		and joins which the relation participates in: * *		restrictinfo - List of RestrictInfo nodes, containing info about each *					 qualification clause in which this relation participates *		joininfo  - List of JoinInfo nodes, containing info about each join *					clause in which this relation participates *		innerjoin - List of Path nodes that represent indices that may be used *					as inner paths of nestloop joins * * NB. the last element of the arrays classlist, indexkeys and ordering *	   is always 0.								2/95 - ay */typedef struct RelOptInfo{	NodeTag		type;	/* all relations: */	Relids		relids;			/* integer list of base relids involved */	/* catalog statistics information */	bool		indexed;	int			pages;	int			tuples;	int			size;	int			width;	/* materialization information */	List	   *targetlist;	List	   *pathlist;		/* Path structures */	struct Path *cheapestpath;	bool		pruneable;	/* used solely by indices: */	Oid		   *classlist;		/* classes of AM operators */	int		   *indexkeys;		/* keys over which we're indexing */	Oid			relam;			/* OID of the access method (in pg_am) */	Oid			indproc;	List	   *indpred;	/* used by various scans and joins: */	Oid		   *ordering;		/* OID of operators in sort order */	List	   *restrictinfo;	/* RestrictInfo structures */	List	   *joininfo;		/* JoinInfo structures */	List	   *innerjoin;} RelOptInfo;extern Var *get_expr(TargetEntry *foo);extern Var *get_groupclause_expr(GroupClause *groupClause, List *targetList);typedef struct MergeOrder{	NodeTag		type;	Oid			join_operator;	Oid			left_operator;	Oid			right_operator;	Oid			left_type;	Oid			right_type;} MergeOrder;typedef enum OrderType{	MERGE_ORDER, SORTOP_ORDER} OrderType;typedef struct PathOrder{	NodeTag		type;	OrderType	ordtype;	union	{		Oid		   *sortop;		MergeOrder *merge;	}			ord;} PathOrder;typedef struct Path{	NodeTag		type;	RelOptInfo *parent;	Cost		path_cost;	NodeTag		pathtype;	PathOrder  *pathorder;	List	   *pathkeys;		/* This is a List of List of Var nodes.								 * See the top of								 * optimizer/path/pathkeys.c for more								 * information. */	Cost		outerjoincost;	Relids		joinid;	List	   *loc_restrictinfo;} Path;typedef struct IndexPath{	Path		path;	List	   *indexid;	List	   *indexqual;	int		   *indexkeys;		/* to transform heap attnos into index								 * ones */} IndexPath;typedef struct NestPath{	Path		path;	List	   *pathinfo;	Path	   *outerjoinpath;	Path	   *innerjoinpath;} NestPath;typedef NestPath JoinPath;typedef struct MergePath{	JoinPath	jpath;	List	   *path_mergeclauses;	List	   *outersortkeys;	List	   *innersortkeys;} MergePath;typedef struct HashPath{	JoinPath	jpath;	List	   *path_hashclauses;	List	   *outerhashkeys;	List	   *innerhashkeys;} HashPath;/* * Keys */typedef struct OrderKey{	NodeTag		type;	int			attribute_number;	Index		array_index;} OrderKey;typedef struct JoinKey{	NodeTag		type;	Var		   *outer;	Var		   *inner;} JoinKey;/* * clause info */typedef struct RestrictInfo{	NodeTag		type;	Expr	   *clause;			/* should be an OP clause */	Cost		selectivity;	bool		notclause;	List	   *indexids;	/* mergejoin only */	MergeOrder *mergejoinorder;	/* hashjoin only */	Oid			hashjoinoperator;	Relids		restrictinfojoinid;} RestrictInfo;typedef struct JoinMethod{	NodeTag		type;	List	   *jmkeys;	List	   *clauses;} JoinMethod;typedef struct HashInfo{	JoinMethod	jmethod;	Oid			hashop;} HashInfo;typedef struct MergeInfo{	JoinMethod	jmethod;	MergeOrder *m_ordering;} MergeInfo;typedef struct JoinInfo{	NodeTag		type;	Relids		unjoined_relids;	List	   *jinfo_restrictinfo;	bool		mergejoinable;	bool		hashjoinable;} JoinInfo;typedef struct Iter{	NodeTag		type;	Node	   *iterexpr;	Oid			itertype;		/* type of the iter expr (use for type								 * checking) */} Iter;/* *	Stream: *	A stream represents a root-to-leaf path in a plan tree (i.e. a tree of *	JoinPaths and Paths).  The stream includes pointers to all Path nodes, *	as well as to any clauses that reside above Path nodes. This structure *	is used to make Path nodes and clauses look similar, so that Predicate *	Migration can run. * *	pathptr -- pointer to the current path node *	cinfo -- if NULL, this stream node referes to the path node. *			  Otherwise this is a pointer to the current clause. *	clausetype -- whether cinfo is in loc_restrictinfo or pathinfo in the *			  path node *	upstream -- linked list pointer upwards *	downstream -- ditto, downwards *	groupup -- whether or not this node is in a group with the node upstream *	groupcost -- total cost of the group that node is in *	groupsel -- total selectivity of the group that node is in */typedef struct Stream *StreamPtr;typedef struct Stream{	NodeTag		type;	Path	   *pathptr;	RestrictInfo *cinfo;	int		   *clausetype;	struct Stream *upstream;	struct Stream *downstream;	bool		groupup;	Cost		groupcost;	Cost		groupsel;} Stream;#endif	 /* RELATION_H */

⌨️ 快捷键说明

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