diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-08-12 21:35:19 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-08-12 21:35:19 +0000 |
commit | 1b5cffacdffaf1cdedb60ff4bc160e65261eb4eb (patch) | |
tree | c34ded33b39c6b0924f00927313f8b9192ec5939 /src/backend/commands | |
parent | a0c449a0f8bc29326c7fa9b49c2198a92e35681a (diff) | |
download | postgresql-1b5cffacdffaf1cdedb60ff4bc160e65261eb4eb.tar.gz postgresql-1b5cffacdffaf1cdedb60ff4bc160e65261eb4eb.zip |
Make ALTER TABLE RENAME on a view rename the view's on-select rule too.
Needed to keep pg_dump from getting confused.
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/rename.c | 17 | ||||
-rw-r--r-- | src/backend/commands/view.c | 36 |
2 files changed, 18 insertions, 35 deletions
diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c index 52568f29f5f..d56c7f2652c 100644 --- a/src/backend/commands/rename.c +++ b/src/backend/commands/rename.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.56 2001/03/22 03:59:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.57 2001/08/12 21:35:18 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -26,6 +26,8 @@ #include "miscadmin.h" #include "storage/smgr.h" #include "optimizer/prep.h" +#include "rewrite/rewriteDefine.h" +#include "rewrite/rewriteSupport.h" #include "utils/acl.h" #include "utils/relcache.h" #include "utils/syscache.h" @@ -265,4 +267,17 @@ renamerel(const char *oldrelname, const char *newrelname) */ if (relkind != RELKIND_INDEX) TypeRename(oldrelname, newrelname); + + /* + * If it's a view, must also rename the associated ON SELECT rule. + */ + if (relkind == RELKIND_VIEW) + { + char *oldrulename, + *newrulename; + + oldrulename = MakeRetrieveViewRuleName(oldrelname); + newrulename = MakeRetrieveViewRuleName(newrelname); + RenameRewriteRule(oldrulename, newrulename); + } } diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index a8cddde2dd6..461ac162519 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -6,11 +6,10 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: view.c,v 1.55 2001/08/10 18:57:35 tgl Exp $ + * $Id: view.c,v 1.56 2001/08/12 21:35:18 tgl Exp $ * *------------------------------------------------------------------------- */ - #include "postgres.h" #include "access/xact.h" @@ -24,10 +23,8 @@ #include "rewrite/rewriteDefine.h" #include "rewrite/rewriteManip.h" #include "rewrite/rewriteRemove.h" +#include "rewrite/rewriteSupport.h" -#ifdef MULTIBYTE -#include "mb/pg_wchar.h" -#endif /*--------------------------------------------------------------------- * DefineVirtualRelation @@ -100,35 +97,6 @@ DefineVirtualRelation(char *relname, List *tlist) DefineRelation(createStmt, RELKIND_VIEW); } -/*------------------------------------------------------------------ - * makeViewRetrieveRuleName - * - * Given a view name, returns the name for the 'on retrieve to "view"' - * rule. - *------------------------------------------------------------------ - */ -char * -MakeRetrieveViewRuleName(char *viewName) -{ - char *buf; - int buflen, - maxlen; - - buflen = strlen(viewName) + 5; - buf = palloc(buflen); - snprintf(buf, buflen, "_RET%s", viewName); - /* clip to less than NAMEDATALEN bytes, if necessary */ -#ifdef MULTIBYTE - maxlen = pg_mbcliplen(buf, strlen(buf), NAMEDATALEN - 1); -#else - maxlen = NAMEDATALEN - 1; -#endif - if (maxlen < buflen) - buf[maxlen] = '\0'; - - return buf; -} - static RuleStmt * FormViewRetrieveRule(char *viewName, Query *viewParse) { |