文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PostgreSQL源码学习--调度器#13

2017-12-22 01:06

关注

PostgreSQL源码学习--调度器#13

本节介绍PortalRunMulti函数。

PortalRunMulti函数

static void
PortalRunMulti(Portal portal,
		   bool isTopLevel, bool setHoldSnapshot,
		   DestReceiver *dest, DestReceiver *altdest,
		   char *completionTag);
//src/backend/tcop/pquery.c


if (dest->mydest == DestRemoteExecute)
	dest = None_Receiver;
if (altdest->mydest == DestRemoteExecute)
	altdest = None_Receiver;


foreach(stmtlist_item, portal->stmts)
{
	PlannedStmt *pstmt = lfirst_node(PlannedStmt, stmtlist_item);
	
	
	CHECK_FOR_INTERRUPTS();
	
	
	if (pstmt->utilityStmt == NULL)
	{
		
		TRACE_POSTGRESQL_QUERY_EXECUTE_START();
		
		
		if (log_executor_stats)
			ResetUsage();
		
		
		if (!active_snapshot_set)
		{
			Snapshot	snapshot = GetTransactionSnapshot();
			
			
			if (setHoldSnapshot)
			{
				snapshot = RegisterSnapshot(snapshot);
				portal->holdSnapshot = snapshot;
			}
			
			
			PushCopiedSnapshot(snapshot);
			active_snapshot_set = true;
		}
		UpdateActiveSnapshotCommandId();
		
		
		if (pstmt->canSetTag)
		{
			
			ProcessQuery(pstmt,
					 portal->sourceText,
					 portal->portalParams,
					 portal->queryEnv,
					 dest, completionTag);
		}
		else
		{
			
			ProcessQuery(pstmt,
					 portal->sourceText,
					 portal->portalParams,
					 portal->queryEnv,
					 altdest, NULL);
		}
		
		
		if (log_executor_stats)
			ShowUsage("EXECUTOR STATISTICS");

		
		TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
	}
	
	else
	{
		if (pstmt->canSetTag)
		{
			Assert(!active_snapshot_set);
			
			PortalRunUtility(portal, pstmt, isTopLevel, false,
							 dest, completionTag);
		}
		else
		{
			Assert(IsA(pstmt->utilityStmt, NotifyStmt));
			
			PortalRunUtility(portal, pstmt, isTopLevel, false,
							 altdest, NULL);
		}
	}
	
	
	if (lnext(stmtlist_item) != NULL)
		CommandCounterIncrement();
	
	
	Assert(portal->portalContext == CurrentMemoryContext);

	MemoryContextDeleteChildren(portal->portalContext);
}


if (active_snapshot_set)
	PopActiveSnapshot();


if (completionTag && completionTag[0] == "")
{
	if (portal->commandTag)
		strcpy(completionTag, portal->commandTag);
	if (strcmp(completionTag, "SELECT") == 0)
		sprintf(completionTag, "SELECT 0 0");
	else if (strcmp(completionTag, "INSERT") == 0)
		strcpy(completionTag, "INSERT 0 0");
	else if (strcmp(completionTag, "UPDATE") == 0)
		strcpy(completionTag, "UPDATE 0");
	else if (strcmp(completionTag, "DELETE") == 0)
		strcpy(completionTag, "DELETE 0");
}
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯