亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? explain.c

?? PostgreSQL7.4.6 for Linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
					appendStringInfo(str, " %s",								 quote_identifier(rte->eref->aliasname));			}			break;		case T_SubqueryScan:			if (((Scan *) plan)->scanrelid > 0)			{				RangeTblEntry *rte = rt_fetch(((Scan *) plan)->scanrelid,											  es->rtable);				appendStringInfo(str, " %s",								 quote_identifier(rte->eref->aliasname));			}			break;		case T_FunctionScan:			if (((Scan *) plan)->scanrelid > 0)			{				RangeTblEntry *rte = rt_fetch(((Scan *) plan)->scanrelid,											  es->rtable);				char	   *proname;				/* Assert it's on a RangeFunction */				Assert(rte->rtekind == RTE_FUNCTION);				/*				 * If the expression is still a function call, we can get				 * the real name of the function.  Otherwise, punt (this				 * can happen if the optimizer simplified away the				 * function call, for example).				 */				if (rte->funcexpr && IsA(rte->funcexpr, FuncExpr))				{					FuncExpr   *funcexpr = (FuncExpr *) rte->funcexpr;					Oid			funcid = funcexpr->funcid;					/* We only show the func name, not schema name */					proname = get_func_name(funcid);				}				else					proname = rte->eref->aliasname;				appendStringInfo(str, " on %s",								 quote_identifier(proname));				if (strcmp(rte->eref->aliasname, proname) != 0)					appendStringInfo(str, " %s",								 quote_identifier(rte->eref->aliasname));			}			break;		default:			break;	}	if (es->printCost)	{		appendStringInfo(str, "  (cost=%.2f..%.2f rows=%.0f width=%d)",						 plan->startup_cost, plan->total_cost,						 plan->plan_rows, plan->plan_width);		/*		 * We have to forcibly clean up the instrumentation state because		 * we haven't done ExecutorEnd yet.  This is pretty grotty ...		 */		InstrEndLoop(planstate->instrument);		if (planstate->instrument && planstate->instrument->nloops > 0)		{			double		nloops = planstate->instrument->nloops;			appendStringInfo(str, " (actual time=%.3f..%.3f rows=%.0f loops=%.0f)",						1000.0 * planstate->instrument->startup / nloops,						  1000.0 * planstate->instrument->total / nloops,							 planstate->instrument->ntuples / nloops,							 planstate->instrument->nloops);		}		else if (es->printAnalyze)			appendStringInfo(str, " (never executed)");	}	appendStringInfoChar(str, '\n');	/* quals, sort keys, etc */	switch (nodeTag(plan))	{		case T_IndexScan:			show_scan_qual(((IndexScan *) plan)->indxqualorig, true,						   "Index Cond",						   ((Scan *) plan)->scanrelid,						   outer_plan,						   str, indent, es);			show_scan_qual(plan->qual, false,						   "Filter",						   ((Scan *) plan)->scanrelid,						   outer_plan,						   str, indent, es);			break;		case T_SeqScan:		case T_TidScan:		case T_SubqueryScan:		case T_FunctionScan:			show_scan_qual(plan->qual, false,						   "Filter",						   ((Scan *) plan)->scanrelid,						   outer_plan,						   str, indent, es);			break;		case T_NestLoop:			show_upper_qual(((NestLoop *) plan)->join.joinqual,							"Join Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			show_upper_qual(plan->qual,							"Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			break;		case T_MergeJoin:			show_upper_qual(((MergeJoin *) plan)->mergeclauses,							"Merge Cond",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			show_upper_qual(((MergeJoin *) plan)->join.joinqual,							"Join Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			show_upper_qual(plan->qual,							"Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			break;		case T_HashJoin:			show_upper_qual(((HashJoin *) plan)->hashclauses,							"Hash Cond",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			show_upper_qual(((HashJoin *) plan)->join.joinqual,							"Join Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			show_upper_qual(plan->qual,							"Filter",							"outer", OUTER, outerPlan(plan),							"inner", INNER, innerPlan(plan),							str, indent, es);			break;		case T_Agg:		case T_Group:			show_upper_qual(plan->qual,							"Filter",							"subplan", 0, outerPlan(plan),							"", 0, NULL,							str, indent, es);			break;		case T_Sort:			show_sort_keys(plan->targetlist,						   ((Sort *) plan)->numCols,						   ((Sort *) plan)->sortColIdx,						   "Sort Key",						   str, indent, es);			break;		case T_Result:			show_upper_qual((List *) ((Result *) plan)->resconstantqual,							"One-Time Filter",							"subplan", OUTER, outerPlan(plan),							"", 0, NULL,							str, indent, es);			show_upper_qual(plan->qual,							"Filter",							"subplan", OUTER, outerPlan(plan),							"", 0, NULL,							str, indent, es);			break;		default:			break;	}	/* initPlan-s */	if (plan->initPlan)	{		List	   *saved_rtable = es->rtable;		List	   *lst;		for (i = 0; i < indent; i++)			appendStringInfo(str, "  ");		appendStringInfo(str, "  InitPlan\n");		foreach(lst, planstate->initPlan)		{			SubPlanState *sps = (SubPlanState *) lfirst(lst);			SubPlan    *sp = (SubPlan *) sps->xprstate.expr;			es->rtable = sp->rtable;			for (i = 0; i < indent; i++)				appendStringInfo(str, "  ");			appendStringInfo(str, "    ->  ");			explain_outNode(str, sp->plan,							sps->planstate,							NULL,							indent + 4, es);		}		es->rtable = saved_rtable;	}	/* lefttree */	if (outerPlan(plan))	{		for (i = 0; i < indent; i++)			appendStringInfo(str, "  ");		appendStringInfo(str, "  ->  ");		explain_outNode(str, outerPlan(plan),						outerPlanState(planstate),						NULL,						indent + 3, es);	}	/* righttree */	if (innerPlan(plan))	{		for (i = 0; i < indent; i++)			appendStringInfo(str, "  ");		appendStringInfo(str, "  ->  ");		explain_outNode(str, innerPlan(plan),						innerPlanState(planstate),						outerPlan(plan),						indent + 3, es);	}	if (IsA(plan, Append))	{		Append	   *appendplan = (Append *) plan;		AppendState *appendstate = (AppendState *) planstate;		List	   *lst;		int			j;		j = 0;		foreach(lst, appendplan->appendplans)		{			Plan	   *subnode = (Plan *) lfirst(lst);			for (i = 0; i < indent; i++)				appendStringInfo(str, "  ");			appendStringInfo(str, "  ->  ");			explain_outNode(str, subnode,							appendstate->appendplans[j],							NULL,							indent + 3, es);			j++;		}	}	if (IsA(plan, SubqueryScan))	{		SubqueryScan *subqueryscan = (SubqueryScan *) plan;		SubqueryScanState *subquerystate = (SubqueryScanState *) planstate;		Plan	   *subnode = subqueryscan->subplan;		RangeTblEntry *rte = rt_fetch(subqueryscan->scan.scanrelid,									  es->rtable);		List	   *saved_rtable = es->rtable;		Assert(rte->rtekind == RTE_SUBQUERY);		es->rtable = rte->subquery->rtable;		for (i = 0; i < indent; i++)			appendStringInfo(str, "  ");		appendStringInfo(str, "  ->  ");		explain_outNode(str, subnode,						subquerystate->subplan,						NULL,						indent + 3, es);		es->rtable = saved_rtable;	}	/* subPlan-s */	if (planstate->subPlan)	{		List	   *saved_rtable = es->rtable;		List	   *lst;		for (i = 0; i < indent; i++)			appendStringInfo(str, "  ");		appendStringInfo(str, "  SubPlan\n");		foreach(lst, planstate->subPlan)		{			SubPlanState *sps = (SubPlanState *) lfirst(lst);			SubPlan    *sp = (SubPlan *) sps->xprstate.expr;			es->rtable = sp->rtable;			for (i = 0; i < indent; i++)				appendStringInfo(str, "  ");			appendStringInfo(str, "    ->  ");			explain_outNode(str, sp->plan,							sps->planstate,							NULL,							indent + 4, es);		}		es->rtable = saved_rtable;	}}/* * Show a qualifier expression for a scan plan node */static voidshow_scan_qual(List *qual, bool is_or_qual, const char *qlabel,			   int scanrelid, Plan *outer_plan,			   StringInfo str, int indent, ExplainState *es){	RangeTblEntry *rte;	Node	   *scancontext;	Node	   *outercontext;	List	   *context;	Node	   *node;	char	   *exprstr;	int			i;	/* No work if empty qual */	if (qual == NIL)		return;	if (is_or_qual)	{		if (lfirst(qual) == NIL && lnext(qual) == NIL)			return;	}	/* Fix qual --- indexqual requires different processing */	if (is_or_qual)		node = make_ors_ands_explicit(qual);	else		node = (Node *) make_ands_explicit(qual);	/* Generate deparse context */	Assert(scanrelid > 0 && scanrelid <= length(es->rtable));	rte = rt_fetch(scanrelid, es->rtable);	scancontext = deparse_context_for_rte(rte);	/*	 * If we have an outer plan that is referenced by the qual, add it to	 * the deparse context.  If not, don't (so that we don't force	 * prefixes unnecessarily).	 */	if (outer_plan)	{		Relids		varnos = pull_varnos(node);		if (bms_is_member(OUTER, varnos))			outercontext = deparse_context_for_subplan("outer",												  outer_plan->targetlist,													   es->rtable);		else			outercontext = NULL;		bms_free(varnos);	}	else		outercontext = NULL;	context = deparse_context_for_plan(scanrelid, scancontext,									   OUTER, outercontext,									   NIL);	/* Deparse the expression */	exprstr = deparse_expression(node, context, (outercontext != NULL), false);	/* And add to str */	for (i = 0; i < indent; i++)		appendStringInfo(str, "  ");	appendStringInfo(str, "  %s: %s\n", qlabel, exprstr);}/* * Show a qualifier expression for an upper-level plan node */static voidshow_upper_qual(List *qual, const char *qlabel,				const char *outer_name, int outer_varno, Plan *outer_plan,				const char *inner_name, int inner_varno, Plan *inner_plan,				StringInfo str, int indent, ExplainState *es){	List	   *context;	Node	   *outercontext;	Node	   *innercontext;	Node	   *node;	char	   *exprstr;	int			i;	/* No work if empty qual */	if (qual == NIL)		return;	/* Generate deparse context */	if (outer_plan)		outercontext = deparse_context_for_subplan(outer_name,												   outer_plan->targetlist,												   es->rtable);	else		outercontext = NULL;	if (inner_plan)		innercontext = deparse_context_for_subplan(inner_name,												   inner_plan->targetlist,												   es->rtable);	else		innercontext = NULL;	context = deparse_context_for_plan(outer_varno, outercontext,									   inner_varno, innercontext,									   NIL);	/* Deparse the expression */	node = (Node *) make_ands_explicit(qual);	exprstr = deparse_expression(node, context, (inner_plan != NULL), false);	/* And add to str */	for (i = 0; i < indent; i++)		appendStringInfo(str, "  ");	appendStringInfo(str, "  %s: %s\n", qlabel, exprstr);}/* * Show the sort keys for a Sort node. */static voidshow_sort_keys(List *tlist, int nkeys, AttrNumber *keycols,			   const char *qlabel,			   StringInfo str, int indent, ExplainState *es){	List	   *context;	bool		useprefix;	int			keyno;	char	   *exprstr;	Relids		varnos;	int			i;	if (nkeys <= 0)		return;	for (i = 0; i < indent; i++)		appendStringInfo(str, "  ");	appendStringInfo(str, "  %s: ", qlabel);	/*	 * In this routine we expect that the plan node's tlist has not been	 * processed by set_plan_references().	Normally, any Vars will	 * contain valid varnos referencing the actual rtable.	But we might	 * instead be looking at a dummy tlist generated by prepunion.c; if	 * there are Vars with zero varno, use the tlist itself to determine	 * their names.	 */	varnos = pull_varnos((Node *) tlist);	if (bms_is_member(0, varnos))	{		Node	   *outercontext;		outercontext = deparse_context_for_subplan("sort",												   tlist,												   es->rtable);		context = deparse_context_for_plan(0, outercontext,										   0, NULL,										   NIL);		useprefix = false;	}	else	{		context = deparse_context_for_plan(0, NULL,										   0, NULL,										   es->rtable);		useprefix = length(es->rtable) > 1;	}	bms_free(varnos);	for (keyno = 0; keyno < nkeys; keyno++)	{		/* find key expression in tlist */		AttrNumber	keyresno = keycols[keyno];		TargetEntry *target = get_tle_by_resno(tlist, keyresno);		if (!target)			elog(ERROR, "no tlist entry for key %d", keyresno);		/* Deparse the expression, showing any top-level cast */		exprstr = deparse_expression((Node *) target->expr, context,									 useprefix, true);		/* And add to str */		if (keyno > 0)			appendStringInfo(str, ", ");		appendStringInfo(str, "%s", exprstr);	}	appendStringInfo(str, "\n");}/* * Indexscan qual lists have an implicit OR-of-ANDs structure.	Make it * explicit so deparsing works properly. */static Node *make_ors_ands_explicit(List *orclauses){	if (orclauses == NIL)		return NULL;			/* probably can't happen */	else if (lnext(orclauses) == NIL)		return (Node *) make_ands_explicit(lfirst(orclauses));	else	{		FastList	args;		List	   *orptr;		FastListInit(&args);		foreach(orptr, orclauses)			FastAppend(&args, make_ands_explicit(lfirst(orptr)));		return (Node *) make_orclause(FastListValue(&args));	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产免费| 欧美不卡一二三| 中文字幕中文字幕在线一区| 久久99国产精品免费| 欧美一级高清片在线观看| 亚洲成人动漫精品| 99久久精品99国产精品 | 亚洲午夜精品17c| 欧美日韩一区高清| 久久国产精品区| 国产精品午夜在线观看| 日本韩国视频一区二区| 日韩不卡一二三区| 国产婷婷色一区二区三区四区| 播五月开心婷婷综合| 亚洲成av人片在线观看无码| 日韩欧美一级精品久久| 国产99精品视频| 一区二区三区四区av| 91精品婷婷国产综合久久性色 | 欧美乱熟臀69xxxxxx| 久久激情综合网| 国产日产欧美一区二区视频| 欧美日韩高清一区二区| 久久99国产精品免费| 亚洲欧洲成人自拍| 欧美一区二区三区小说| 国产成人av一区二区三区在线 | 日本黄色一区二区| 精品一区二区三区免费播放 | 欧美综合一区二区| 精品一区二区综合| 一区二区三区在线不卡| 欧美大片日本大片免费观看| 91原创在线视频| 久久99国产精品尤物| 玉米视频成人免费看| 欧美www视频| 91福利国产精品| 狠狠色狠狠色合久久伊人| 亚洲人一二三区| 久久久精品2019中文字幕之3| 色妹子一区二区| 国产91露脸合集magnet| 奇米色一区二区三区四区| 亚洲人成小说网站色在线 | 风流少妇一区二区| 性做久久久久久免费观看| 国产精品私房写真福利视频| 欧美一级爆毛片| 欧美日韩一卡二卡三卡 | 欧美日韩视频在线第一区| 国产精品一区二区在线观看网站 | 久久99久久精品欧美| 日韩黄色一级片| 亚洲人成影院在线观看| 国产免费成人在线视频| 精品免费国产一区二区三区四区| 欧美日韩亚洲综合一区二区三区| www.99精品| 成人午夜av电影| 国产麻豆日韩欧美久久| 国产综合色视频| 美国三级日本三级久久99| 天天做天天摸天天爽国产一区| 亚洲卡通欧美制服中文| 1区2区3区国产精品| 国产精品久久三| 欧美极品aⅴ影院| 久久久777精品电影网影网| 欧美成人一区二区三区在线观看| 欧美高清www午色夜在线视频| 欧美在线观看视频在线| 91论坛在线播放| 色网综合在线观看| 色狠狠一区二区三区香蕉| 91视频国产资源| 91精品福利视频| 欧美午夜电影一区| 欧美日韩专区在线| 777亚洲妇女| 91麻豆精品国产| 精品日韩一区二区三区| 日韩免费看网站| 精品国产3级a| 国产欧美一区二区精品秋霞影院 | 婷婷开心久久网| 亚洲成人在线免费| 日韩高清电影一区| 精品一区二区av| 国产成人久久精品77777最新版本| 色婷婷精品久久二区二区蜜臂av| 成人h精品动漫一区二区三区| 99综合电影在线视频| 91成人在线免费观看| 777欧美精品| 精品国产乱码久久久久久久| 久久久久9999亚洲精品| 亚洲视频免费看| 偷拍一区二区三区四区| 国产在线精品一区二区夜色 | 色诱亚洲精品久久久久久| 色综合天天综合狠狠| 欧美精品第1页| 久久精品一区八戒影视| 亚洲乱码国产乱码精品精98午夜| 亚洲一区二区中文在线| 蜜臀av一级做a爰片久久| 国产91清纯白嫩初高中在线观看 | 国产成人午夜精品5599| 色综合 综合色| 日韩欧美国产高清| 综合久久久久久| 日韩精品1区2区3区| 国产很黄免费观看久久| 色嗨嗨av一区二区三区| 欧美不卡视频一区| 一区二区三区在线不卡| 激情伊人五月天久久综合| 99久久99精品久久久久久| 日韩一级完整毛片| 亚洲色图欧美在线| 精品一区二区三区免费毛片爱| 色综合久久天天综合网| 日韩欧美一区二区视频| 一区二区三区资源| 黄色资源网久久资源365| 99久久久精品免费观看国产蜜| 色婷婷久久久久swag精品| 久久理论电影网| 天天综合日日夜夜精品| 99久久精品国产导航| 久久午夜免费电影| 亚洲妇女屁股眼交7| jlzzjlzz亚洲日本少妇| 久久综合五月天婷婷伊人| 亚洲一区二区美女| 波多野结衣在线aⅴ中文字幕不卡| 日韩一二在线观看| 亚洲影院理伦片| 不卡一区二区中文字幕| 亚洲欧美偷拍卡通变态| 国产精华液一区二区三区| 日韩一区二区三区在线| 樱花影视一区二区| 成人性生交大合| 精品久久99ma| 麻豆成人91精品二区三区| 欧美日韩中文字幕一区| 一区二区三区四区在线免费观看 | 国产精品一二三| 日韩欧美专区在线| 亚洲国产视频直播| 91蝌蚪porny| 亚洲欧洲一区二区在线播放| 国产精品99久久久久久有的能看| 日韩免费观看高清完整版在线观看| 亚洲电影视频在线| 91在线视频官网| ...av二区三区久久精品| 成人av网站免费观看| 欧美极品另类videosde| 国产成a人无v码亚洲福利| 精品毛片乱码1区2区3区| 日韩精彩视频在线观看| 91精品国产综合久久福利软件 | 欧美成人video| 蜜臀av性久久久久av蜜臀妖精| 7777精品伊人久久久大香线蕉完整版| 亚洲午夜激情网站| 在线观看三级视频欧美| 伊人一区二区三区| 国产精品久久久久毛片软件| 有坂深雪av一区二区精品| 奇米四色…亚洲| 色伊人久久综合中文字幕| 久久久蜜桃精品| 91精品国产综合久久小美女 | 国产精品久久一卡二卡| 色婷婷精品大在线视频| 老司机精品视频导航| 亚洲欧洲综合另类| 久久免费看少妇高潮| 欧美日韩免费高清一区色橹橹| 国产在线播放一区| 日本少妇一区二区| 国产精品免费久久| 久久久不卡网国产精品二区 | 大白屁股一区二区视频| 国产美女在线观看一区| 久久精工是国产品牌吗| 麻豆国产欧美日韩综合精品二区| 午夜精品福利一区二区蜜股av| 中文字幕亚洲一区二区av在线| 国产亚洲婷婷免费| 欧美国产乱子伦| 中文字幕一区二区视频| 中文字幕高清一区| 日韩美女视频一区二区| 一区二区在线观看视频|