aboutsummaryrefslogtreecommitdiff
path: root/src/backend/rewrite/rewriteSupport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/rewrite/rewriteSupport.c')
-rw-r--r--src/backend/rewrite/rewriteSupport.c41
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.