diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2009-01-22 17:27:55 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2009-01-22 17:27:55 +0000 |
commit | dd7e54a17ffed5767cd9af175024c60df2b1951c (patch) | |
tree | 2932885551f282e1466c6bd1f31a35c4938c329c /src/backend/rewrite/rewriteRemove.c | |
parent | 5841aa86eb67dabb0a54c81d21463002dfa7e358 (diff) | |
download | postgresql-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.c | 35 |
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. |