aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index f2dd4a5a47d..91f5eaecd95 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.168 2005/08/22 19:40:09 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.169 2005/08/23 22:40:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -246,6 +246,8 @@ static void ATExecDropCluster(Relation rel);
static void ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel,
char *tablespacename);
static void ATExecSetTableSpace(Oid tableOid, Oid newTableSpace);
+static void ATExecEnableDisableTrigger(Relation rel, char *trigname,
+ bool enable, bool skip_system);
static void copy_relation_data(Relation rel, SMgrRelation dst);
static void update_ri_trigger_args(Oid relid,
const char *oldname,
@@ -2005,6 +2007,17 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd,
ATPrepSetTableSpace(tab, rel, cmd->name);
pass = AT_PASS_MISC; /* doesn't actually matter */
break;
+ case AT_EnableTrig: /* ENABLE TRIGGER variants */
+ case AT_EnableTrigAll:
+ case AT_EnableTrigUser:
+ case AT_DisableTrig: /* DISABLE TRIGGER variants */
+ case AT_DisableTrigAll:
+ case AT_DisableTrigUser:
+ ATSimplePermissions(rel, false);
+ /* These commands never recurse */
+ /* No command-specific prep needed */
+ pass = AT_PASS_MISC;
+ break;
default: /* oops */
elog(ERROR, "unrecognized alter table type: %d",
(int) cmd->subtype);
@@ -2163,6 +2176,24 @@ ATExecCmd(AlteredTableInfo *tab, Relation rel, AlterTableCmd *cmd)
* Nothing to do here; Phase 3 does the work
*/
break;
+ case AT_EnableTrig: /* ENABLE TRIGGER name */
+ ATExecEnableDisableTrigger(rel, cmd->name, true, false);
+ break;
+ case AT_DisableTrig: /* DISABLE TRIGGER name */
+ ATExecEnableDisableTrigger(rel, cmd->name, false, false);
+ break;
+ case AT_EnableTrigAll: /* ENABLE TRIGGER ALL */
+ ATExecEnableDisableTrigger(rel, NULL, true, false);
+ break;
+ case AT_DisableTrigAll: /* DISABLE TRIGGER ALL */
+ ATExecEnableDisableTrigger(rel, NULL, false, false);
+ break;
+ case AT_EnableTrigUser: /* ENABLE TRIGGER USER */
+ ATExecEnableDisableTrigger(rel, NULL, true, true);
+ break;
+ case AT_DisableTrigUser: /* DISABLE TRIGGER USER */
+ ATExecEnableDisableTrigger(rel, NULL, false, true);
+ break;
default: /* oops */
elog(ERROR, "unrecognized alter table type: %d",
(int) cmd->subtype);
@@ -5779,6 +5810,18 @@ copy_relation_data(Relation rel, SMgrRelation dst)
}
/*
+ * ALTER TABLE ENABLE/DISABLE TRIGGER
+ *
+ * We just pass this off to trigger.c.
+ */
+static void
+ATExecEnableDisableTrigger(Relation rel, char *trigname,
+ bool enable, bool skip_system)
+{
+ EnableDisableTrigger(rel, trigname, enable, skip_system);
+}
+
+/*
* ALTER TABLE CREATE TOAST TABLE
*
* Note: this is also invoked from outside this module; in such cases we