diff options
| author | Tom Lane | 2002-04-19 23:13:54 +0000 |
|---|---|---|
| committer | Tom Lane | 2002-04-19 23:13:54 +0000 |
| commit | 6d6ca2166c3ae8db9fac2ec7fdadca0c4e6382a1 (patch) | |
| tree | 3bd8166e6da16403daa1daa44315a652eee5f1d2 /src/backend/rewrite | |
| parent | 201737168c4ed5b14313d111d8d746c7f072f24e (diff) | |
Change naming rule for ON SELECT rules of views: they're all just
_RETURN now, since there's no need to keep 'em unique anymore.
Diffstat (limited to 'src/backend/rewrite')
| -rw-r--r-- | src/backend/rewrite/rewriteDefine.c | 30 | ||||
| -rw-r--r-- | src/backend/rewrite/rewriteSupport.c | 35 |
2 files changed, 20 insertions, 45 deletions
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 8b40aeb4f73..922030c4bea 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.67 2002/04/18 20:01:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.68 2002/04/19 23:13:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -176,7 +176,6 @@ DefineQueryRewrite(RuleStmt *stmt) { List *tllist; int i; - char *expected_name; /* * So there cannot be INSTEAD NOTHING, ... @@ -265,15 +264,26 @@ DefineQueryRewrite(RuleStmt *stmt) } /* - * ... and finally the rule must be named _RETviewname. + * ... and finally the rule must be named _RETURN. */ - expected_name = MakeRetrieveViewRuleName(event_obj->relname); - if (strcmp(expected_name, stmt->rulename) != 0) + if (strcmp(stmt->rulename, ViewSelectRuleName) != 0) { - elog(ERROR, "view rule for \"%s\" must be named \"%s\"", - event_obj->relname, expected_name); + /* + * In versions before 7.3, the expected name was _RETviewname. + * For backwards compatibility with old pg_dump output, accept + * that and silently change it to _RETURN. Since this is just + * a quick backwards-compatibility hack, limit the number of + * characters checked to a few less than NAMEDATALEN; this + * saves having to worry about where a multibyte character might + * have gotten truncated. + */ + if (strncmp(stmt->rulename, "_RET", 4) != 0 || + strncmp(stmt->rulename + 4, event_obj->relname, + NAMEDATALEN - 4 - 4) != 0) + elog(ERROR, "view rule for \"%s\" must be named \"%s\"", + event_obj->relname, ViewSelectRuleName); + stmt->rulename = pstrdup(ViewSelectRuleName); } - pfree(expected_name); /* * Are we converting a relation to a view? @@ -418,9 +428,7 @@ setRuleCheckAsUser_walker(Node *node, Oid *context) /* * Rename an existing rewrite rule. * - * There is not currently a user command to invoke this directly - * (perhaps there should be). But we need it anyway to rename the - * ON SELECT rule associated with a view, when the view is renamed. + * This is unused code at the moment. */ void RenameRewriteRule(Oid owningRel, const char *oldName, diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index 62a951aaf6f..92ab521c1fb 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.50 2002/04/18 20:01:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.51 2002/04/19 23:13:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -20,10 +20,6 @@ #include "rewrite/rewriteSupport.h" #include "utils/syscache.h" -#ifdef MULTIBYTE -#include "mb/pg_wchar.h" -#endif - /* * Is there a rule by the given name? @@ -37,35 +33,6 @@ IsDefinedRewriteRule(Oid owningRel, const char *ruleName) 0, 0); } -/* - * 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 |
