diff options
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. |