From dd7e54a17ffed5767cd9af175024c60df2b1951c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 22 Jan 2009 17:27:55 +0000 Subject: Automatic view update rules Bernd Helmle --- src/backend/rewrite/rewriteRemove.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src/backend/rewrite/rewriteRemove.c') 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. -- cgit v1.2.3