aboutsummaryrefslogtreecommitdiff
path: root/src/backend/rewrite/rewriteRemove.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2009-01-22 17:27:55 +0000
committerPeter Eisentraut <peter_e@gmx.net>2009-01-22 17:27:55 +0000
commitdd7e54a17ffed5767cd9af175024c60df2b1951c (patch)
tree2932885551f282e1466c6bd1f31a35c4938c329c /src/backend/rewrite/rewriteRemove.c
parent5841aa86eb67dabb0a54c81d21463002dfa7e358 (diff)
downloadpostgresql-dd7e54a17ffed5767cd9af175024c60df2b1951c.tar.gz
postgresql-dd7e54a17ffed5767cd9af175024c60df2b1951c.zip
Automatic view update rules
Bernd Helmle
Diffstat (limited to 'src/backend/rewrite/rewriteRemove.c')
-rw-r--r--src/backend/rewrite/rewriteRemove.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index 6d7f85514fe..90e99bd8ac8 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/rewrite/rewriteRemove.c,v 1.75 2009/01/01 17:23:47 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/rewrite/rewriteRemove.c,v 1.76 2009/01/22 17:27:54 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -90,6 +90,39 @@ RemoveRewriteRule(Oid owningRel, const char *ruleName, DropBehavior behavior,
performDeletion(&object, behavior);
}
+/*
+ * RemoveAutomaticRulesOnEvent
+ *
+ * This will delete automatic rules, if any exist, on the event in the
+ * relation.
+ */
+void
+RemoveAutomaticRulesOnEvent(Relation rel, CmdType event_type)
+{
+ RuleLock *rulelocks = rel->rd_rules;
+ int i;
+
+ /* If there are no rules on the relation, waste no more time. */
+ if (rulelocks == NULL)
+ return;
+
+ /*
+ * Look at all rules looking for the ones that are on the event
+ * and are automatic.
+ */
+ for (i = 0; i < rulelocks->numLocks; i++)
+ {
+ RewriteRule *oneLock = rulelocks->rules[i];
+
+ if (oneLock->event == event_type && oneLock->is_auto)
+ {
+ RemoveRewriteRuleById(oneLock->ruleId);
+ elog(DEBUG1, "removing automatic rule with OID %u\n",
+ oneLock->ruleId);
+ deleteDependencyRecordsFor(RewriteRelationId, oneLock->ruleId);
+ }
+ }
+}
/*
* Guts of rule deletion.