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/commands | |
parent | 5841aa86eb67dabb0a54c81d21463002dfa7e358 (diff) | |
download | postgresql-dd7e54a17ffed5767cd9af175024c60df2b1951c.tar.gz postgresql-dd7e54a17ffed5767cd9af175024c60df2b1951c.zip |
Automatic view update rules
Bernd Helmle
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/view.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index c29e88abddb..de1834ab1c8 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.111 2009/01/01 17:23:40 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.112 2009/01/22 17:27:54 petere Exp $ * *------------------------------------------------------------------------- */ @@ -27,7 +27,9 @@ #include "parser/parse_relation.h" #include "rewrite/rewriteDefine.h" #include "rewrite/rewriteManip.h" +#include "rewrite/rewriteRemove.h" #include "rewrite/rewriteSupport.h" +#include "rewrite/viewUpdate.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/lsyscache.h" @@ -308,13 +310,28 @@ DefineViewRules(Oid viewOid, Query *viewParse, bool replace) viewOid, NULL, CMD_SELECT, - true, + true, /* is_instead */ + true, /* is_auto */ replace, list_make1(viewParse)); /* - * Someday: automatic ON INSERT, etc + * Delete all implicit rules on replace. CreateViewUpdateRules() + * below will re-create them if appropriate for the new view + * definition. */ + if (replace) + { + Relation rel = heap_open(viewOid, AccessExclusiveLock); + RemoveAutomaticRulesOnEvent(rel, CMD_INSERT); + RemoveAutomaticRulesOnEvent(rel, CMD_DELETE); + RemoveAutomaticRulesOnEvent(rel, CMD_UPDATE); + heap_close(rel, NoLock); + } + + CommandCounterIncrement(); + + CreateViewUpdateRules(viewOid, viewParse); } /*--------------------------------------------------------------- |