diff options
| author | Peter Eisentraut | 2017-02-22 13:45:14 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2017-02-23 13:19:52 +0000 |
| commit | e8d016d81940e75c126aa52971b7903b7301002e (patch) | |
| tree | 549e818e8125c1a75ed616bd8d7363aaa3c1e408 /src/backend | |
| parent | 9e43e8714c9e976e41b7429fa7c426c9a6e5e8e6 (diff) | |
Remove deprecated COMMENT ON RULE syntax
This was only used for allowing upgrades from pre-7.3 instances, which
was a long time ago.
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/catalog/objectaddress.c | 126 | ||||
| -rw-r--r-- | src/backend/parser/gram.y | 10 | ||||
| -rw-r--r-- | src/backend/rewrite/rewriteSupport.c | 55 |
3 files changed, 49 insertions, 142 deletions
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 9029477d68c..cc636e2e3ed 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -1325,6 +1325,8 @@ get_object_address_relobject(ObjectType objtype, List *objname, Relation relation = NULL; int nnames; const char *depname; + List *relname; + Oid reloid; /* Extract name of dependent object. */ depname = strVal(llast(objname)); @@ -1332,88 +1334,58 @@ get_object_address_relobject(ObjectType objtype, List *objname, /* Separate relation name from dependent object name. */ nnames = list_length(objname); if (nnames < 2) - { - Oid reloid; - - /* - * For compatibility with very old releases, we sometimes allow users - * to attempt to specify a rule without mentioning the relation name. - * If there's only rule by that name in the entire database, this will - * work. But objects other than rules don't get this special - * treatment. - */ - if (objtype != OBJECT_RULE) - elog(ERROR, "must specify relation and object name"); - address.classId = RewriteRelationId; - address.objectId = - get_rewrite_oid_without_relid(depname, &reloid, missing_ok); - address.objectSubId = 0; - - /* - * Caller is expecting to get back the relation, even though we didn't - * end up using it to find the rule. - */ - if (OidIsValid(address.objectId)) - relation = heap_open(reloid, AccessShareLock); - } - else - { - List *relname; - Oid reloid; + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("must specify relation and object name"))); - /* Extract relation name and open relation. */ - relname = list_truncate(list_copy(objname), nnames - 1); - relation = heap_openrv_extended(makeRangeVarFromNameList(relname), - AccessShareLock, - missing_ok); + /* Extract relation name and open relation. */ + relname = list_truncate(list_copy(objname), nnames - 1); + relation = heap_openrv_extended(makeRangeVarFromNameList(relname), + AccessShareLock, + missing_ok); - reloid = relation ? RelationGetRelid(relation) : InvalidOid; + reloid = relation ? RelationGetRelid(relation) : InvalidOid; - switch (objtype) - { - case OBJECT_RULE: - address.classId = RewriteRelationId; - address.objectId = relation ? - get_rewrite_oid(reloid, depname, missing_ok) : InvalidOid; - address.objectSubId = 0; - break; - case OBJECT_TRIGGER: - address.classId = TriggerRelationId; - address.objectId = relation ? - get_trigger_oid(reloid, depname, missing_ok) : InvalidOid; - address.objectSubId = 0; - break; - case OBJECT_TABCONSTRAINT: - address.classId = ConstraintRelationId; - address.objectId = relation ? - get_relation_constraint_oid(reloid, depname, missing_ok) : - InvalidOid; - address.objectSubId = 0; - break; - case OBJECT_POLICY: - address.classId = PolicyRelationId; - address.objectId = relation ? - get_relation_policy_oid(reloid, depname, missing_ok) : - InvalidOid; - address.objectSubId = 0; - break; - default: - elog(ERROR, "unrecognized objtype: %d", (int) objtype); - /* placate compiler, which doesn't know elog won't return */ - address.classId = InvalidOid; - address.objectId = InvalidOid; - address.objectSubId = 0; - } + switch (objtype) + { + case OBJECT_RULE: + address.classId = RewriteRelationId; + address.objectId = relation ? + get_rewrite_oid(reloid, depname, missing_ok) : InvalidOid; + address.objectSubId = 0; + break; + case OBJECT_TRIGGER: + address.classId = TriggerRelationId; + address.objectId = relation ? + get_trigger_oid(reloid, depname, missing_ok) : InvalidOid; + address.objectSubId = 0; + break; + case OBJECT_TABCONSTRAINT: + address.classId = ConstraintRelationId; + address.objectId = relation ? + get_relation_constraint_oid(reloid, depname, missing_ok) : + InvalidOid; + address.objectSubId = 0; + break; + case OBJECT_POLICY: + address.classId = PolicyRelationId; + address.objectId = relation ? + get_relation_policy_oid(reloid, depname, missing_ok) : + InvalidOid; + address.objectSubId = 0; + break; + default: + elog(ERROR, "unrecognized objtype: %d", (int) objtype); + } - /* Avoid relcache leak when object not found. */ - if (!OidIsValid(address.objectId)) - { - if (relation != NULL) - heap_close(relation, AccessShareLock); + /* Avoid relcache leak when object not found. */ + if (!OidIsValid(address.objectId)) + { + if (relation != NULL) + heap_close(relation, AccessShareLock); - relation = NULL; /* department of accident prevention */ - return address; - } + relation = NULL; /* department of accident prevention */ + return address; } /* Done. */ diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 6c6d21b5885..e833b2eba5a 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -6283,16 +6283,6 @@ CommentStmt: n->comment = $8; $$ = (Node *) n; } - | COMMENT ON RULE name IS comment_text - { - /* Obsolete syntax supported for awhile for compatibility */ - CommentStmt *n = makeNode(CommentStmt); - n->objtype = OBJECT_RULE; - n->objname = list_make1(makeString($4)); - n->objargs = NIL; - n->comment = $6; - $$ = (Node *) n; - } | COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text { CommentStmt *n = makeNode(CommentStmt); diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index c4d05d26d46..ce9c8e37938 100644 --- a/src/backend/rewrite/rewriteSupport.c +++ b/src/backend/rewrite/rewriteSupport.c @@ -114,58 +114,3 @@ get_rewrite_oid(Oid relid, const char *rulename, bool missing_ok) ReleaseSysCache(tuple); return ruleoid; } - -/* - * Find rule oid, given only a rule name but no rel OID. - * - * If there's more than one, it's an error. If there aren't any, that's an - * error, too. In general, this should be avoided - it is provided to support - * syntax that is compatible with pre-7.3 versions of PG, where rule names - * were unique across the entire database. - */ -Oid -get_rewrite_oid_without_relid(const char *rulename, - Oid *reloid, bool missing_ok) -{ - Relation RewriteRelation; - HeapScanDesc scanDesc; - ScanKeyData scanKeyData; - HeapTuple htup; - Oid ruleoid; - - /* Search pg_rewrite for such a rule */ - ScanKeyInit(&scanKeyData, - Anum_pg_rewrite_rulename, - BTEqualStrategyNumber, F_NAMEEQ, - CStringGetDatum(rulename)); - - RewriteRelation = heap_open(RewriteRelationId, AccessShareLock); - scanDesc = heap_beginscan_catalog(RewriteRelation, 1, &scanKeyData); - - htup = heap_getnext(scanDesc, ForwardScanDirection); - if (!HeapTupleIsValid(htup)) - { - if (!missing_ok) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("rule \"%s\" does not exist", rulename))); - ruleoid = InvalidOid; - } - else - { - ruleoid = HeapTupleGetOid(htup); - if (reloid != NULL) - *reloid = ((Form_pg_rewrite) GETSTRUCT(htup))->ev_class; - - htup = heap_getnext(scanDesc, ForwardScanDirection); - if (HeapTupleIsValid(htup)) - ereport(ERROR, - (errcode(ERRCODE_DUPLICATE_OBJECT), - errmsg("there are multiple rules named \"%s\"", rulename), - errhint("Specify a relation name as well as a rule name."))); - } - heap_endscan(scanDesc); - heap_close(RewriteRelation, AccessShareLock); - - return ruleoid; -} |
