diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 31192fc615a..0feb9216520 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -72,7 +72,6 @@ int SessionReplicationRole = SESSION_REPLICATION_ROLE_ORIGIN; /* How many levels deep into trigger execution are we? */ static int MyTriggerDepth = 0; -List *triggerOids = NIL; /* To store all trigger calls information */ /* Local function prototypes */ static void renametrig_internal(Relation tgrel, Relation targetrel, @@ -485,7 +484,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString, RelationGetRelationName(rel)), errdetail("Triggers on foreign tables cannot have transition tables."))); - if (rel->rd_rel->relkind == RELKIND_VIEW && sql_dialect != SQL_DIALECT_TSQL) + if (rel->rd_rel->relkind == RELKIND_VIEW) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is a view", @@ -2509,13 +2508,11 @@ ExecCallTriggerFunc(TriggerData *trigdata, MyTriggerDepth++; PG_TRY(); { - triggerOids = lappend_oid(triggerOids, trigdata->tg_trigger->tgoid); result = FunctionCallInvoke(fcinfo); } PG_FINALLY(); { MyTriggerDepth--; - triggerOids = list_delete_oid(triggerOids, trigdata->tg_trigger->tgoid); } PG_END_TRY(); diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 3b24dbb4932..ccc1ba3f0fc 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1063,7 +1063,7 @@ CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) switch (operation) { case CMD_INSERT: - if (!trigDesc || (!trigDesc->trig_insert_instead_row && (sql_dialect == SQL_DIALECT_TSQL && !trigDesc->trig_insert_instead_statement))) + if (!trigDesc || (!trigDesc->trig_insert_instead_row)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot insert into view \"%s\"", @@ -1071,7 +1071,7 @@ CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) errhint("To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule."))); break; case CMD_UPDATE: - if (!trigDesc || (!trigDesc->trig_update_instead_row && (sql_dialect == SQL_DIALECT_TSQL && !trigDesc->trig_update_instead_statement))) + if (!trigDesc || (!trigDesc->trig_update_instead_row)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot update view \"%s\"", @@ -1079,7 +1079,7 @@ CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation) errhint("To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule."))); break; case CMD_DELETE: - if (!trigDesc || (!trigDesc->trig_delete_instead_row && (sql_dialect == SQL_DIALECT_TSQL && !trigDesc->trig_delete_instead_statement))) + if (!trigDesc || (!trigDesc->trig_delete_instead_row)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot delete from view \"%s\"", diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 4fdd63ad6fb..dc211b1bb53 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -46,8 +46,6 @@ #include "utils/lsyscache.h" #include "utils/rel.h" -bbfViewHasInsteadofTrigger_hook_type bbfViewHasInsteadofTrigger_hook = NULL; /** BBF Hook to check Instead Of trigger on View */ - /* We use a list of these to detect recursion in RewriteQuery */ typedef struct rewrite_event { @@ -1481,8 +1479,7 @@ rewriteValuesRTE(Query *parsetree, RangeTblEntry *rte, int rti, */ isAutoUpdatableView = false; if (target_relation->rd_rel->relkind == RELKIND_VIEW && - (!view_has_instead_trigger(target_relation, CMD_INSERT) && - !(sql_dialect == SQL_DIALECT_TSQL && bbfViewHasInsteadofTrigger_hook && (bbfViewHasInsteadofTrigger_hook)(target_relation, CMD_INSERT)))) + !view_has_instead_trigger(target_relation, CMD_INSERT)) { List *locks; bool hasUpdate; @@ -3728,8 +3725,7 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) result_relation = parsetree->resultRelation; Assert(result_relation != 0); rt_entry = rt_fetch(result_relation, parsetree->rtable); - /** allow transition table in TSQL inside trigger body, rtekind can be RTE_NAMEDTUPLESTORE, eg inserted and deleted*/ - Assert(rt_entry->rtekind == RTE_RELATION || (sql_dialect == SQL_DIALECT_TSQL && rt_entry->rtekind == RTE_NAMEDTUPLESTORE)); + Assert(rt_entry->rtekind == RTE_RELATION); /* * We can use NoLock here since either the parser or @@ -3949,8 +3945,7 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length) */ if (!instead && rt_entry_relation->rd_rel->relkind == RELKIND_VIEW && - (!view_has_instead_trigger(rt_entry_relation, event) - && !(sql_dialect == SQL_DIALECT_TSQL && bbfViewHasInsteadofTrigger_hook && (bbfViewHasInsteadofTrigger_hook)(rt_entry_relation, event)))) + !view_has_instead_trigger(rt_entry_relation, event)) { /* * If there were any qualified INSTEAD rules, don't allow the view diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h index ea7b410f4ee..59ad3e437da 100644 --- a/src/include/commands/trigger.h +++ b/src/include/commands/trigger.h @@ -291,7 +291,6 @@ extern void AfterTriggerEndSubXact(bool isCommit); extern void AfterTriggerSetState(ConstraintsSetStmt *stmt); extern bool AfterTriggerPendingOnRel(Oid relid); -extern List *triggerOids; /* To store all trigger calls information */ /* * in utils/adt/ri_triggers.c diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index fc857ea9faf..189ce1c947f 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -99,9 +99,6 @@ extern PGDLLIMPORT ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook; typedef bool (*TriggerRecuresiveCheck_hook_type) (ResultRelInfo *resultRelInfo); extern PGDLLEXPORT TriggerRecuresiveCheck_hook_type TriggerRecuresiveCheck_hook; -typedef bool (*bbfViewHasInsteadofTrigger_hook_type) (Relation view, CmdType event); -extern PGDLLEXPORT bbfViewHasInsteadofTrigger_hook_type bbfViewHasInsteadofTrigger_hook; - typedef bool (*check_rowcount_hook_type) (int es_processed); extern PGDLLEXPORT check_rowcount_hook_type check_rowcount_hook;