c语言sscanf函数的用法是什么
291
2022-12-02
PostgreSQL数据库查询执行——ProcessUtilitySlow
ProcessUtilitySlow主要用于处理event triggers支持的语句,所以执行真正处理函数之前都需要执行event triggers支持相关的调用。如果传入参数不为PROCESS_UTILITY_SUBCOMMAND,就需要执行event triggers支持相关的调用。
static void ProcessUtilitySlow(ParseState *pstate, PlannedStmt *pstmt, const char *queryString, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, char *completionTag) { Node *parsetree = pstmt->utilityStmt; bool isTopLevel = (context == PROCESS_UTILITY_TOPLEVEL); bool isCompleteQuery = (context != PROCESS_UTILITY_SUBCOMMAND); bool needCleanup; bool commandCollected = false; ObjectAddress address; ObjectAddress secondaryObject = InvalidObjectAddress; /* All event trigger calls are done only when isCompleteQuery is true */ needCleanup = isCompleteQuery && EventTriggerBeginCompleteQuery(); /* PG_TRY block is to ensure we call EventTriggerEndCompleteQuery */ PG_TRY(); { if (isCompleteQuery) EventTriggerDDLCommandStart(parsetree); switch (nodeTag(parsetree)) ... /* Remember the object so that ddl_command_end event triggers have access to it. */ if (!commandCollected) EventTriggerCollectSimpleCommand(address, secondaryObject, parsetree); if (isCompleteQuery) { EventTriggerSQLDrop(parsetree); EventTriggerDDLCommandEnd(parsetree); } } PG_CATCH(); { if (needCleanup) EventTriggerEndCompleteQuery(); PG_RE_THROW(); } PG_END_TRY(); if (needCleanup) EventTriggerEndCompleteQuery();}
event triggers支持相关的调用流程如下所示,后续博客讲解。
EventTriggerBeginCompleteQueryEventTriggerDDLCommandStartEventTriggerSQLDropEventTriggerDDLCommandEndEventTriggerEndCompleteQuery
真正处理的情况
T_CreateSchemaStmt T_CreateStmt T_CreateForeignTableStmt T_AlterTableStmt T_AlterDomainStmt T_DefineStmt T_IndexStmt T_CreateExtensionStmt T_AlterExtensionStmt T_AlterExtensionContentsStmt T_CreateFdwStmt T_AlterFdwStmt T_CreateForeignServerStmt T_AlterForeignServerStmt T_CreateUserMappingStmt T_AlterUserMappingStmt T_DropUserMappingStmt T_ImportForeignSchemaStmt T_CompositeTypeStmt T_CreateEnumStmt T_CreateRangeStmt T_AlterEnumStmt: /* ALTER TYPE (enum) / T_ViewStmt: / CREATE VIEW / T_CreateFunctionStmt / CREATE FUNCTION / T_AlterFunctionStmt / ALTER FUNCTION / T_RuleStmt / CREATE RULE / T_CreateSeqStmt T_AlterSeqStmt T_CreateTableAsStmt T_RefreshMatViewStmt T_CreateTrigStmt T_CreatePLangStmt T_CreateDomainStmt T_CreateConversionStmt T_CreateCastStmt T_CreateOpClassStmt T_CreateOpFamilyStmt T_CreateTransformStmt T_AlterOpFamilyStmt T_AlterTSDictionaryStmt T_AlterTSConfigurationStmt T_AlterTableMoveAllStmt T_DropStmt: T_RenameStmt T_AlterObjectDependsStmt T_AlterObjectSchemaStmt T_AlterOwnerStmt T_AlterOperatorStmt T_CommentStmt T_GrantStmt T_DropOwnedStmt T_AlterDefaultPrivilegesStmt T_CreatePolicyStmt / CREATE POLICY / T_AlterPolicyStmt / ALTER POLICY */ T_SecLabelStmt T_CreateAmStmt T_CreatePublicationStmt T_AlterPublicationStmt T_CreateSubscriptionStmt T_AlterSubscriptionStmt T_DropSubscriptionStmt T_CreateStatsStmt T_AlterCollationStmt
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~