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/rewrite/rewriteSupport.c | |
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/rewrite/rewriteSupport.c')
-rw-r--r-- | src/backend/rewrite/rewriteSupport.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index 7578acbcedd..bc2f04932a4 100644 --- a/src/backend/rewrite/rewriteSupport.c +++ b/src/backend/rewrite/rewriteSupport.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.48 2001/03/22 03:59:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.49 2001/08/12 21:35:19 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -20,9 +20,16 @@ #include "rewrite/rewriteSupport.h" #include "utils/syscache.h" +#ifdef MULTIBYTE +#include "mb/pg_wchar.h" +#endif + +/* + * Is there a rule by the given name? + */ bool -IsDefinedRewriteRule(char *ruleName) +IsDefinedRewriteRule(const char *ruleName) { return SearchSysCacheExists(RULENAME, PointerGetDatum(ruleName), @@ -30,6 +37,36 @@ IsDefinedRewriteRule(char *ruleName) } /* + * makeViewRetrieveRuleName + * + * Given a view name, returns the name for the associated ON SELECT rule. + * + * XXX this is not the only place in the backend that knows about the _RET + * name-forming convention. + */ +char * +MakeRetrieveViewRuleName(const 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; +} + +/* * SetRelationRuleStatus * Set the value of the relation's relhasrules field in pg_class; * if the relation is becoming a view, also adjust its relkind. |