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

📄 copyfuncs.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
📖 第 1 页 / 共 3 页
字号:
	/* ----------------	 *	copy remainder of node	 * ----------------	 */	Node_Copy(from, newnode, path_hashclauses);	Node_Copy(from, newnode, outerhashkeys);	Node_Copy(from, newnode, innerhashkeys);	return newnode;}/* ---------------- *		_copyOrderKey * ---------------- */static OrderKey *_copyOrderKey(OrderKey *from){	OrderKey   *newnode = makeNode(OrderKey);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	newnode->attribute_number = from->attribute_number;	newnode->array_index = from->array_index;	return newnode;}/* ---------------- *		_copyJoinKey * ---------------- */static JoinKey *_copyJoinKey(JoinKey *from){	JoinKey    *newnode = makeNode(JoinKey);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	Node_Copy(from, newnode, outer);	Node_Copy(from, newnode, inner);	return newnode;}/* ---------------- *		_copyMergeOrder * ---------------- */static MergeOrder *_copyMergeOrder(MergeOrder *from){	MergeOrder *newnode = makeNode(MergeOrder);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	newnode->join_operator = from->join_operator;	newnode->left_operator = from->left_operator;	newnode->right_operator = from->right_operator;	newnode->left_type = from->left_type;	newnode->right_type = from->right_type;	return newnode;}/* ---------------- *		_copyRestrictInfo * ---------------- */static RestrictInfo *_copyRestrictInfo(RestrictInfo *from){	RestrictInfo *newnode = makeNode(RestrictInfo);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	Node_Copy(from, newnode, clause);	newnode->selectivity = from->selectivity;	newnode->notclause = from->notclause;	Node_Copy(from, newnode, indexids);	Node_Copy(from, newnode, mergejoinorder);	newnode->hashjoinoperator = from->hashjoinoperator;	newnode->restrictinfojoinid = listCopy(from->restrictinfojoinid);	return newnode;}/* ---------------- *		CopyJoinMethodFields * *		This function copies the fields of the JoinMethod node.  It is used by *		all the copy functions for classes which inherit from JoinMethod. * ---------------- */static voidCopyJoinMethodFields(JoinMethod *from, JoinMethod *newnode){	Node_Copy(from, newnode, jmkeys);	Node_Copy(from, newnode, clauses);	return;}/* ---------------- *		_copyJoinMethod * ---------------- */static JoinMethod *_copyJoinMethod(JoinMethod *from){	JoinMethod *newnode = makeNode(JoinMethod);	CopyJoinMethodFields(from, newnode);	return newnode;}/* ---------------- *		_copyHashInfo * ---------------- */static HashInfo *_copyHashInfo(HashInfo *from){	HashInfo   *newnode = makeNode(HashInfo);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	CopyJoinMethodFields((JoinMethod *) from, (JoinMethod *) newnode);	newnode->hashop = from->hashop;	return newnode;}/* ---------------- *		_copyMergeInfo * ---------------- */static MergeInfo *_copyMergeInfo(MergeInfo *from){	MergeInfo  *newnode = makeNode(MergeInfo);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	CopyJoinMethodFields((JoinMethod *) from, (JoinMethod *) newnode);	Node_Copy(from, newnode, m_ordering);	return newnode;}/* ---------------- *		_copyJoinInfo * ---------------- */static JoinInfo *_copyJoinInfo(JoinInfo *from){	JoinInfo   *newnode = makeNode(JoinInfo);	/* ----------------	 *	copy remainder of node	 * ----------------	 */	newnode->unjoined_relids = listCopy(from->unjoined_relids);	Node_Copy(from, newnode, jinfo_restrictinfo);	newnode->mergejoinable = from->mergejoinable;	newnode->hashjoinable = from->hashjoinable;	return newnode;}static Iter *_copyIter(Iter *from){	Iter	   *newnode = makeNode(Iter);	Node_Copy(from, newnode, iterexpr);	newnode->itertype = from->itertype;	return newnode;}static Stream *_copyStream(Stream *from){	Stream	   *newnode = makeNode(Stream);	newnode->pathptr = from->pathptr;	newnode->cinfo = from->cinfo;	newnode->clausetype = from->clausetype;	newnode->upstream = (StreamPtr) NULL;		/* only copy nodes												 * downwards! */	Node_Copy(from, newnode, downstream);	if (newnode->downstream)		((Stream *) newnode->downstream)->upstream = (Stream *) newnode;	newnode->groupup = from->groupup;	newnode->groupcost = from->groupcost;	newnode->groupsel = from->groupsel;	return newnode;}/* *	parsenodes.h routines have no copy functions */static TargetEntry *_copyTargetEntry(TargetEntry *from){	TargetEntry *newnode = makeNode(TargetEntry);	Node_Copy(from, newnode, resdom);	Node_Copy(from, newnode, fjoin);	Node_Copy(from, newnode, expr);	return newnode;}static RangeTblEntry *_copyRangeTblEntry(RangeTblEntry *from){	RangeTblEntry *newnode = makeNode(RangeTblEntry);	if (from->relname)		newnode->relname = pstrdup(from->relname);	if (from->refname)		newnode->refname = pstrdup(from->refname);	newnode->relid = from->relid;	newnode->inh = from->inh;	newnode->inFromCl = from->inFromCl;	newnode->skipAcl = from->skipAcl;	return newnode;}static RowMark *_copyRowMark(RowMark *from){	RowMark    *newnode = makeNode(RowMark);	newnode->rti = from->rti;	newnode->info = from->info;	return newnode;}static SortClause *_copySortClause(SortClause *from){	SortClause *newnode = makeNode(SortClause);	Node_Copy(from, newnode, resdom);	newnode->opoid = from->opoid;	return newnode;}static A_Const *_copyAConst(A_Const *from){	A_Const    *newnode = makeNode(A_Const);	newnode->val = *((Value *) (copyObject(&(from->val))));	Node_Copy(from, newnode, typename);	return newnode;}static TypeName *_copyTypeName(TypeName *from){	TypeName   *newnode = makeNode(TypeName);	if (from->name)		newnode->name = pstrdup(from->name);	newnode->timezone = from->timezone;	newnode->setof = from->setof;	newnode->typmod = from->typmod;	Node_Copy(from, newnode, arrayBounds);	return newnode;}static Query *_copyQuery(Query *from){	Query	   *newnode = makeNode(Query);	newnode->commandType = from->commandType;	if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt)	{		NotifyStmt *from_notify = (NotifyStmt *) from->utilityStmt;		NotifyStmt *n = makeNode(NotifyStmt);		n->relname = pstrdup(from_notify->relname);		newnode->utilityStmt = (Node *) n;	}	newnode->resultRelation = from->resultRelation;	if (from->into)		newnode->into = pstrdup(from->into);	newnode->isPortal = from->isPortal;	newnode->isBinary = from->isBinary;	newnode->isTemp = from->isTemp;	newnode->unionall = from->unionall;	if (from->uniqueFlag)		newnode->uniqueFlag = pstrdup(from->uniqueFlag);	Node_Copy(from, newnode, sortClause);	Node_Copy(from, newnode, rtable);	Node_Copy(from, newnode, targetList);	Node_Copy(from, newnode, qual);	Node_Copy(from, newnode, groupClause);	Node_Copy(from, newnode, havingQual);	newnode->hasAggs = from->hasAggs;	newnode->hasSubLinks = from->hasSubLinks;	if (from->unionClause)	{		List	   *ulist,				   *temp_list = NIL;		foreach(ulist, from->unionClause)			temp_list = lappend(temp_list, copyObject(lfirst(ulist)));		newnode->unionClause = temp_list;	}	Node_Copy(from, newnode, limitOffset);	Node_Copy(from, newnode, limitCount);	Node_Copy(from, newnode, rowMark);	return newnode;}/* *	mnodes.h routines have no copy functions *//* **************************************************************** *					pg_list.h copy functions * **************************************************************** */static Value *_copyValue(Value *from){	Value	   *newnode = makeNode(Value);	newnode->type = from->type;	switch (from->type)	{		case T_String:			newnode->val.str = pstrdup(from->val.str);			break;		case T_Integer:			newnode->val.ival = from->val.ival;			break;		case T_Float:			newnode->val.dval = from->val.dval;			break;		default:			break;	}	return newnode;}/* ---------------- *		copyObject returns a copy of the node or list. If it is a list, it *		recursively copies its items. * ---------------- */void *copyObject(void *from){	void	   *retval;	if (from == NULL)		return NULL;	switch (nodeTag(from))	{			/*			 * PLAN NODES			 */		case T_Plan:			retval = _copyPlan(from);			break;		case T_Result:			retval = _copyResult(from);			break;		case T_Append:			retval = _copyAppend(from);			break;		case T_Scan:			retval = _copyScan(from);			break;		case T_SeqScan:			retval = _copySeqScan(from);			break;		case T_IndexScan:			retval = _copyIndexScan(from);			break;		case T_Join:			retval = _copyJoin(from);			break;		case T_NestLoop:			retval = _copyNestLoop(from);			break;		case T_MergeJoin:			retval = _copyMergeJoin(from);			break;		case T_HashJoin:			retval = _copyHashJoin(from);			break;		case T_Noname:			retval = _copyNoname(from);			break;		case T_Material:			retval = _copyMaterial(from);			break;		case T_Sort:			retval = _copySort(from);			break;		case T_Group:			retval = _copyGroup(from);			break;		case T_Agg:			retval = _copyAgg(from);			break;		case T_GroupClause:			retval = _copyGroupClause(from);			break;		case T_Unique:			retval = _copyUnique(from);			break;		case T_Hash:			retval = _copyHash(from);			break;		case T_SubPlan:			retval = _copySubPlan(from);			break;			/*			 * PRIMITIVE NODES			 */		case T_Resdom:			retval = _copyResdom(from);			break;		case T_Fjoin:			retval = _copyFjoin(from);			break;		case T_Expr:			retval = _copyExpr(from);			break;		case T_Var:			retval = _copyVar(from);			break;		case T_Oper:			retval = _copyOper(from);			break;		case T_Const:			retval = _copyConst(from);			break;		case T_Param:			retval = _copyParam(from);			break;		case T_Func:			retval = _copyFunc(from);			break;		case T_Array:			retval = _copyArray(from);			break;		case T_ArrayRef:			retval = _copyArrayRef(from);			break;		case T_Aggref:			retval = _copyAggref(from);			break;		case T_SubLink:			retval = _copySubLink(from);			break;		case T_CaseExpr:			retval = _copyCaseExpr(from);			break;		case T_CaseWhen:			retval = _copyCaseWhen(from);			break;			/*			 * RELATION NODES			 */		case T_RelOptInfo:			retval = _copyRelOptInfo(from);			break;		case T_Path:			retval = _copyPath(from);			break;		case T_IndexPath:			retval = _copyIndexPath(from);			break;		case T_NestPath:			retval = _copyNestPath(from);			break;		case T_MergePath:			retval = _copyMergePath(from);			break;		case T_HashPath:			retval = _copyHashPath(from);			break;		case T_OrderKey:			retval = _copyOrderKey(from);			break;		case T_JoinKey:			retval = _copyJoinKey(from);			break;		case T_MergeOrder:			retval = _copyMergeOrder(from);			break;		case T_RestrictInfo:			retval = _copyRestrictInfo(from);			break;		case T_JoinMethod:			retval = _copyJoinMethod(from);			break;		case T_HashInfo:			retval = _copyHashInfo(from);			break;		case T_MergeInfo:			retval = _copyMergeInfo(from);			break;		case T_JoinInfo:			retval = _copyJoinInfo(from);			break;		case T_Iter:			retval = _copyIter(from);			break;		case T_Stream:			retval = _copyStream(from);			break;			/*			 * PARSE NODES			 */		case T_Query:			retval = _copyQuery(from);			break;		case T_TargetEntry:			retval = _copyTargetEntry(from);			break;		case T_RangeTblEntry:			retval = _copyRangeTblEntry(from);			break;		case T_RowMark:			retval = _copyRowMark(from);			break;		case T_SortClause:			retval = _copySortClause(from);			break;		case T_A_Const:			retval = _copyAConst(from);			break;		case T_TypeName:			retval = _copyTypeName(from);			break;			/*			 * VALUE NODES			 */		case T_Integer:		case T_String:		case T_Float:			retval = _copyValue(from);			break;		case T_List:			{				List	   *list = from,						   *l;				List	   *newlist = NIL,						   *nl = NIL;				foreach(l, list)				{					if (newlist == NIL)						newlist = nl = lcons(copyObject(lfirst(l)), NIL);					else					{						lnext(nl) = lcons(copyObject(lfirst(l)), NIL);						nl = lnext(nl);					}				}				retval = newlist;			}			break;		default:			elog(ERROR, "copyObject: don't know how to copy %d", nodeTag(from));			retval = from;			break;	}	return retval;}

⌨️ 快捷键说明

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