event_trigger_infos.6.alvherre1.patch
text/plain
Filename: event_trigger_infos.6.alvherre1.patch
Type: text/plain
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/commands/createas.c | 16 | 0 |
| src/backend/commands/event_trigger.c | 24 | 0 |
| src/backend/tcop/utility.c | 101 | 0 |
| src/include/commands/createas.h | 1 | 1 |
| src/include/commands/event_trigger.h | 2 | 0 |
*** a/src/backend/commands/createas.c
--- b/src/backend/commands/createas.c
***************
*** 50,55 **** typedef struct
--- 50,58 ----
BulkInsertState bistate; /* bulk insert state */
} DR_intorel;
+ /* the OID of the created table, for ExecCreateTableAs consumption */
+ static Oid CreateAsRelid = InvalidOid;
+
static void intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo);
static void intorel_receive(TupleTableSlot *slot, DestReceiver *self);
static void intorel_shutdown(DestReceiver *self);
***************
*** 59,71 **** static void intorel_destroy(DestReceiver *self);
/*
* ExecCreateTableAs -- execute a CREATE TABLE AS command
*/
! void
ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
ParamListInfo params, char *completionTag)
{
Query *query = (Query *) stmt->query;
IntoClause *into = stmt->into;
DestReceiver *dest;
List *rewritten;
PlannedStmt *plan;
QueryDesc *queryDesc;
--- 62,75 ----
/*
* ExecCreateTableAs -- execute a CREATE TABLE AS command
*/
! Oid
ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
ParamListInfo params, char *completionTag)
{
Query *query = (Query *) stmt->query;
IntoClause *into = stmt->into;
DestReceiver *dest;
+ Oid relOid;
List *rewritten;
PlannedStmt *plan;
QueryDesc *queryDesc;
***************
*** 88,94 **** ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
ExecuteQuery(estmt, into, queryString, params, dest, completionTag);
! return;
}
Assert(query->commandType == CMD_SELECT);
--- 92,100 ----
ExecuteQuery(estmt, into, queryString, params, dest, completionTag);
! relOid = CreateAsRelid;
! CreateAsRelid = InvalidOid;
! return relOid;
}
Assert(query->commandType == CMD_SELECT);
***************
*** 156,161 **** ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
--- 162,172 ----
FreeQueryDesc(queryDesc);
PopActiveSnapshot();
+
+ relOid = CreateAsRelid;
+ CreateAsRelid = InvalidOid;
+
+ return relOid;
}
/*
***************
*** 353,358 **** intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo)
--- 364,372 ----
myState->rel = intoRelationDesc;
myState->output_cid = GetCurrentCommandId(true);
+ /* and remember the new relation's OID for ExecCreateTableAs */
+ CreateAsRelid = RelationGetRelid(myState->rel);
+
/*
* We can skip WAL-logging the insertions, unless PITR or streaming
* replication is in use. We can skip the FSM in any case.
*** a/src/backend/commands/event_trigger.c
--- b/src/backend/commands/event_trigger.c
***************
*** 81,87 **** typedef enum
EVENT_TRIGGER_COMMAND_TAG_NOT_RECOGNIZED
} event_trigger_command_tag_check_result;
! static event_trigger_support_data event_trigger_support[] = {
{ "AGGREGATE", true },
{ "CAST", true },
{ "CONSTRAINT", true },
--- 81,88 ----
EVENT_TRIGGER_COMMAND_TAG_NOT_RECOGNIZED
} event_trigger_command_tag_check_result;
! static event_trigger_support_data event_trigger_support[] =
! {
{ "AGGREGATE", true },
{ "CAST", true },
{ "CONSTRAINT", true },
***************
*** 121,127 **** static void AlterEventTriggerOwner_internal(Relation rel,
HeapTuple tup,
Oid newOwnerId);
static event_trigger_command_tag_check_result check_ddl_tag(const char *tag);
- static void error_duplicate_filter_variable(const char *defname);
static Datum filter_list_to_array(List *filterlist);
static Oid insert_event_trigger_tuple(char *trigname, char *eventname,
Oid evtOwner, Oid funcoid,
--- 122,127 ----
***************
*** 164,176 **** CreateEventTrigger(CreateEventTrigStmt *stmt)
errhint("Must be superuser to create an event trigger.")));
/* Validate event name. */
! if (! (strcmp(stmt->eventname, "ddl_command_start") == 0
! || strcmp(stmt->eventname, "ddl_command_end") == 0
! || strcmp(stmt->eventname, "ddl_command_trace") == 0))
ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("unrecognized event name \"%s\"",
! stmt->eventname)));
/* Validate filter conditions. */
foreach (lc, stmt->whenclause)
--- 164,176 ----
errhint("Must be superuser to create an event trigger.")));
/* Validate event name. */
! if (strcmp(stmt->eventname, "ddl_command_start") != 0 &&
! strcmp(stmt->eventname, "ddl_command_end") != 0 &&
! strcmp(stmt->eventname, "ddl_command_trace") != 0)
ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("unrecognized event name \"%s\"",
! stmt->eventname)));
/* Validate filter conditions. */
foreach (lc, stmt->whenclause)
***************
*** 179,192 **** CreateEventTrigger(CreateEventTrigStmt *stmt)
if (strcmp(def->defname, "tag") == 0)
{
! if (tags != NULL)
! error_duplicate_filter_variable(def->defname);
tags = (List *) def->arg;
}
else if (strcmp(def->defname, "context") == 0)
{
! if (contexts != NULL)
! error_duplicate_filter_variable(def->defname);
contexts = (List *) def->arg;
}
else
--- 179,198 ----
if (strcmp(def->defname, "tag") == 0)
{
! if (tags != NIL)
! ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("filter variable \"%s\" specified more than once",
! def->defname)));
tags = (List *) def->arg;
}
else if (strcmp(def->defname, "context") == 0)
{
! if (contexts != NIL)
! ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("filter variable \"%s\" specified more than once",
! def->defname)));
contexts = (List *) def->arg;
}
else
***************
*** 359,388 **** check_ddl_tag(const char *tag)
}
/*
- * Complain about a duplicate filter variable.
- */
- static void
- error_duplicate_filter_variable(const char *defname)
- {
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("filter variable \"%s\" specified more than once",
- defname)));
- }
-
- /*
* Insert the new pg_event_trigger row and record dependencies.
*/
static Oid
insert_event_trigger_tuple(char *trigname, char *eventname, Oid evtOwner,
Oid funcoid, List *taglist, List *contexts)
{
! Relation tgrel;
Oid trigoid;
HeapTuple tuple;
Datum values[Natts_pg_trigger];
bool nulls[Natts_pg_trigger];
! ObjectAddress myself, referenced;
/* Open pg_event_trigger. */
tgrel = heap_open(EventTriggerRelationId, RowExclusiveLock);
--- 365,383 ----
}
/*
* Insert the new pg_event_trigger row and record dependencies.
*/
static Oid
insert_event_trigger_tuple(char *trigname, char *eventname, Oid evtOwner,
Oid funcoid, List *taglist, List *contexts)
{
! Relation tgrel;
Oid trigoid;
HeapTuple tuple;
Datum values[Natts_pg_trigger];
bool nulls[Natts_pg_trigger];
! ObjectAddress myself,
! referenced;
/* Open pg_event_trigger. */
tgrel = heap_open(EventTriggerRelationId, RowExclusiveLock);
***************
*** 922,930 **** EventTriggerDDLCommandStart(Node *parsetree, ProcessUtilityContext context)
{
EventTriggerCacheItem *item = lfirst(lc);
! if (ctag->operation == COMMAND_TAG_DROP
! && filter_event_trigger(context, &tag, item))
!
runlist = lappend_oid(runlist, item->fnoid);
}
--- 917,924 ----
{
EventTriggerCacheItem *item = lfirst(lc);
! if (ctag->operation == COMMAND_TAG_DROP &&
! filter_event_trigger(context, &tag, item))
runlist = lappend_oid(runlist, item->fnoid);
}
***************
*** 1074,1082 **** EventTriggerSupportsObjectType(ObjectType obtype)
/* no support for event triggers on event triggers */
return false;
default:
! break;
}
- return true;
}
/*
--- 1068,1075 ----
/* no support for event triggers on event triggers */
return false;
default:
! return true;
}
}
/*
*** a/src/backend/tcop/utility.c
--- b/src/backend/tcop/utility.c
***************
*** 340,345 **** ProcessUtility(Node *parsetree,
--- 340,369 ----
dest, completionTag, context);
}
+ #define InvokeDDLCommandEventTriggers(parsetree, context, fncall) \
+ do { \
+ EventTriggerDDLCommandStart(parsetree, context); \
+ EventTriggerTargetOid = fncall; \
+ EventTriggerDDLCommandEnd(parsetree, context); \
+ } while (0)
+
+ #define InvokeDDLCommandEventTriggersIfSupported(parsetree, context, fncall, objtype) \
+ do { \
+ Oid _targetoid; \
+ bool _supported = EventTriggerSupportsObjectType(objtype); \
+ \
+ if (_supported) \
+ { \
+ EventTriggerDDLCommandStart(parsetree, context); \
+ } \
+ _targetoid = fncall; \
+ if (_supported) \
+ { \
+ EventTriggerTargetOid = _targetoid; \
+ EventTriggerDDLCommandEnd(parsetree, context); \
+ } \
+ } while (0)
+
void
standard_ProcessUtility(Node *parsetree,
const char *queryString,
***************
*** 509,518 **** standard_ProcessUtility(Node *parsetree,
* relation and attribute manipulation
*/
case T_CreateSchemaStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateSchemaCommand((CreateSchemaStmt *) parsetree, queryString);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateStmt:
--- 533,541 ----
* relation and attribute manipulation
*/
case T_CreateSchemaStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateSchemaCommand((CreateSchemaStmt *) parsetree,
! queryString));
break;
case T_CreateStmt:
***************
*** 574,579 **** standard_ProcessUtility(Node *parsetree,
--- 597,603 ----
CreateForeignTable((CreateForeignTableStmt *) stmt,
relOid);
+ EventTriggerTargetOid = relOid;
EventTriggerDDLCommandEnd(stmt, context);
}
else
***************
*** 612,685 **** standard_ProcessUtility(Node *parsetree,
break;
case T_CreateExtensionStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateExtension((CreateExtensionStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterExtensionStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! ExecAlterExtensionStmt((AlterExtensionStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterExtensionContentsStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! ExecAlterExtensionContentsStmt(
! (AlterExtensionContentsStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
!
break;
case T_CreateFdwStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateForeignDataWrapper((CreateFdwStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterFdwStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterForeignDataWrapper((AlterFdwStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateForeignServerStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateForeignServer((CreateForeignServerStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterForeignServerStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterForeignServer((AlterForeignServerStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateUserMappingStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateUserMapping((CreateUserMappingStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterUserMappingStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterUserMapping((AlterUserMappingStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_DropUserMappingStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! RemoveUserMapping((DropUserMappingStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_DropStmt:
--- 636,688 ----
break;
case T_CreateExtensionStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateExtension((CreateExtensionStmt *) parsetree));
break;
case T_AlterExtensionStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! ExecAlterExtensionStmt((AlterExtensionStmt *) parsetree));
break;
case T_AlterExtensionContentsStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! ExecAlterExtensionContentsStmt((AlterExtensionContentsStmt *) parsetree));
break;
case T_CreateFdwStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateForeignDataWrapper((CreateFdwStmt *) parsetree));
break;
case T_AlterFdwStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterForeignDataWrapper((AlterFdwStmt *) parsetree));
break;
case T_CreateForeignServerStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateForeignServer((CreateForeignServerStmt *) parsetree));
break;
case T_AlterForeignServerStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterForeignServer((AlterForeignServerStmt *) parsetree));
break;
case T_CreateUserMappingStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateUserMapping((CreateUserMappingStmt *) parsetree));
break;
case T_AlterUserMappingStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterUserMapping((AlterUserMappingStmt *) parsetree));
break;
case T_DropUserMappingStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! RemoveUserMapping((DropUserMappingStmt *) parsetree));
break;
case T_DropStmt:
***************
*** 756,772 **** standard_ProcessUtility(Node *parsetree,
*/
case T_RenameStmt:
{
! RenameStmt *stmt;
stmt = (RenameStmt *) parsetree;
! if (EventTriggerSupportsObjectType(stmt->renameType))
! EventTriggerDDLCommandStart(parsetree, context);
!
! /* there's s no harm in setting it in all cases */
! EventTriggerTargetOid = ExecRenameStmt(stmt);
!
! if (EventTriggerSupportsObjectType(stmt->renameType))
! EventTriggerDDLCommandEnd(parsetree, context);
break;
}
--- 759,770 ----
*/
case T_RenameStmt:
{
! RenameStmt *stmt;
stmt = (RenameStmt *) parsetree;
! InvokeDDLCommandEventTriggersIfSupported(parsetree, context,
! stmt->renameType,
! ExecRenameStmt(stmt));
break;
}
***************
*** 775,787 **** standard_ProcessUtility(Node *parsetree,
AlterObjectSchemaStmt *stmt;
stmt = (AlterObjectSchemaStmt *) parsetree;
! if (EventTriggerSupportsObjectType(stmt->objectType))
! EventTriggerDDLCommandStart(parsetree, context);
!
! EventTriggerTargetOid = ExecAlterObjectSchemaStmt(stmt);
!
! if (EventTriggerSupportsObjectType(stmt->objectType))
! EventTriggerDDLCommandEnd(parsetree, context);
break;
}
--- 773,781 ----
AlterObjectSchemaStmt *stmt;
stmt = (AlterObjectSchemaStmt *) parsetree;
! InvokeDDLCommandEventTriggersIfSupported(parsetree, context,
! ExecAlterObjectSchemaStmt(stmt),
! stmt->objectType);
break;
}
***************
*** 790,802 **** standard_ProcessUtility(Node *parsetree,
AlterOwnerStmt *stmt;
stmt = (AlterOwnerStmt *) parsetree;
! if (EventTriggerSupportsObjectType(stmt->objectType))
! EventTriggerDDLCommandStart(parsetree, context);
!
! EventTriggerTargetOid = ExecAlterOwnerStmt(stmt);
!
! if (EventTriggerSupportsObjectType(stmt->objectType))
! EventTriggerDDLCommandEnd(parsetree, context);
break;
}
--- 784,792 ----
AlterOwnerStmt *stmt;
stmt = (AlterOwnerStmt *) parsetree;
! InvokeDDLCommandEventTriggersIfSupported(parsetree, context,
! ExecAlterOwnerStmt(stmt),
! stmt->objectType);
break;
}
***************
*** 927,935 **** standard_ProcessUtility(Node *parsetree,
break;
case T_AlterDefaultPrivilegesStmt:
- EventTriggerDDLCommandStart(parsetree, context);
ExecAlterDefaultPrivilegesStmt((AlterDefaultPrivilegesStmt *) parsetree);
- EventTriggerDDLCommandEnd(parsetree, context);
break;
/*
--- 917,923 ----
***************
*** 996,1048 **** standard_ProcessUtility(Node *parsetree,
{
CompositeTypeStmt *stmt = (CompositeTypeStmt *) parsetree;
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineCompositeType(stmt->typevar, stmt->coldeflist);
! EventTriggerDDLCommandEnd(parsetree, context);
}
break;
case T_CreateEnumStmt: /* CREATE TYPE AS ENUM */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineEnum((CreateEnumStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateRangeStmt: /* CREATE TYPE AS RANGE */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineRange((CreateRangeStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterEnumStmt: /* ALTER TYPE (enum) */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterEnum((AlterEnumStmt *) parsetree, isTopLevel);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_ViewStmt: /* CREATE VIEW */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineView((ViewStmt *) parsetree, queryString);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateFunctionStmt: /* CREATE FUNCTION */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateFunction((CreateFunctionStmt *) parsetree, queryString);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterFunctionStmt: /* ALTER FUNCTION */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterFunction((AlterFunctionStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_IndexStmt: /* CREATE INDEX */
--- 984,1022 ----
{
CompositeTypeStmt *stmt = (CompositeTypeStmt *) parsetree;
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineCompositeType(stmt->typevar, stmt->coldeflist));
}
break;
case T_CreateEnumStmt: /* CREATE TYPE AS ENUM */
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineEnum((CreateEnumStmt *) parsetree));
break;
case T_CreateRangeStmt: /* CREATE TYPE AS RANGE */
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineRange((CreateRangeStmt *) parsetree));
break;
case T_AlterEnumStmt: /* ALTER TYPE (enum) */
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterEnum((AlterEnumStmt *) parsetree, isTopLevel));
break;
case T_ViewStmt: /* CREATE VIEW */
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineView((ViewStmt *) parsetree, queryString));
break;
case T_CreateFunctionStmt: /* CREATE FUNCTION */
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateFunction((CreateFunctionStmt *) parsetree, queryString));
break;
case T_AlterFunctionStmt: /* ALTER FUNCTION */
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterFunction((AlterFunctionStmt *) parsetree));
break;
case T_IndexStmt: /* CREATE INDEX */
***************
*** 1079,1102 **** standard_ProcessUtility(Node *parsetree,
break;
case T_RuleStmt: /* CREATE RULE */
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineRule((RuleStmt *) parsetree, queryString);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateSeqStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineSequence((CreateSeqStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterSeqStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterSequence((AlterSeqStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_DoStmt:
--- 1053,1070 ----
break;
case T_RuleStmt: /* CREATE RULE */
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineRule((RuleStmt *) parsetree, queryString));
break;
case T_CreateSeqStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineSequence((CreateSeqStmt *) parsetree));
break;
case T_AlterSeqStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterSequence((AlterSeqStmt *) parsetree));
break;
case T_DoStmt:
***************
*** 1194,1203 **** standard_ProcessUtility(Node *parsetree,
break;
case T_CreateTableAsStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! ExecCreateTableAs((CreateTableAsStmt *) parsetree,
! queryString, params, completionTag);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_VariableSetStmt:
--- 1162,1170 ----
break;
case T_CreateTableAsStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! ExecCreateTableAs((CreateTableAsStmt *) parsetree,
! queryString, params, completionTag));
break;
case T_VariableSetStmt:
***************
*** 1219,1229 **** standard_ProcessUtility(Node *parsetree,
break;
case T_CreateTrigStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
CreateTrigger((CreateTrigStmt *) parsetree, queryString,
! InvalidOid, InvalidOid, false);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateEventTrigStmt:
--- 1186,1194 ----
break;
case T_CreateTrigStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
CreateTrigger((CreateTrigStmt *) parsetree, queryString,
! InvalidOid, InvalidOid, false));
break;
case T_CreateEventTrigStmt:
***************
*** 1237,1256 **** standard_ProcessUtility(Node *parsetree,
break;
case T_CreatePLangStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateProceduralLanguage((CreatePLangStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
/*
* ******************************** DOMAIN statements ****
*/
case T_CreateDomainStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineDomain((CreateDomainStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
/*
--- 1202,1217 ----
break;
case T_CreatePLangStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateProceduralLanguage((CreatePLangStmt *) parsetree));
break;
/*
* ******************************** DOMAIN statements ****
*/
case T_CreateDomainStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineDomain((CreateDomainStmt *) parsetree));
break;
/*
***************
*** 1354,1405 **** standard_ProcessUtility(Node *parsetree,
break;
case T_CreateConversionStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateConversionCommand((CreateConversionStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateCastStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! CreateCast((CreateCastStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateOpClassStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineOpClass((CreateOpClassStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_CreateOpFamilyStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! DefineOpFamily((CreateOpFamilyStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterOpFamilyStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterOpFamily((AlterOpFamilyStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterTSDictionaryStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterTSDictionary((AlterTSDictionaryStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
case T_AlterTSConfigurationStmt:
! EventTriggerDDLCommandStart(parsetree, context);
! EventTriggerTargetOid =
! AlterTSConfiguration((AlterTSConfigurationStmt *) parsetree);
! EventTriggerDDLCommandEnd(parsetree, context);
break;
default:
--- 1315,1352 ----
break;
case T_CreateConversionStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateConversionCommand((CreateConversionStmt *) parsetree));
break;
case T_CreateCastStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! CreateCast((CreateCastStmt *) parsetree));
break;
case T_CreateOpClassStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineOpClass((CreateOpClassStmt *) parsetree));
break;
case T_CreateOpFamilyStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! DefineOpFamily((CreateOpFamilyStmt *) parsetree));
break;
case T_AlterOpFamilyStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterOpFamily((AlterOpFamilyStmt *) parsetree));
break;
case T_AlterTSDictionaryStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterTSDictionary((AlterTSDictionaryStmt *) parsetree));
break;
case T_AlterTSConfigurationStmt:
! InvokeDDLCommandEventTriggers(parsetree, context,
! AlterTSConfiguration((AlterTSConfigurationStmt *) parsetree));
break;
default:
*** a/src/include/commands/createas.h
--- b/src/include/commands/createas.h
***************
*** 19,25 ****
#include "tcop/dest.h"
! extern void ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
ParamListInfo params, char *completionTag);
extern int GetIntoRelEFlags(IntoClause *intoClause);
--- 19,25 ----
#include "tcop/dest.h"
! extern Oid ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
ParamListInfo params, char *completionTag);
extern int GetIntoRelEFlags(IntoClause *intoClause);
*** a/src/include/commands/event_trigger.h
--- b/src/include/commands/event_trigger.h
***************
*** 44,50 **** typedef enum {
* split_command_tag which should be the only thing editing those pieces of
* information.
*/
! typedef struct {
const char *tag;
const char *opname;
CommandTagOperation operation;
--- 44,51 ----
* split_command_tag which should be the only thing editing those pieces of
* information.
*/
! typedef struct CommandTag
! {
const char *tag;
const char *opname;
CommandTagOperation operation;