Remove deprecated COMMENT ON RULE syntax
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 22 Feb 2017 13:45:14 +0000 (08:45 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 23 Feb 2017 13:19:52 +0000 (08:19 -0500)
This was only used for allowing upgrades from pre-7.3 instances, which
was a long time ago.

src/backend/catalog/objectaddress.c
src/backend/parser/gram.y
src/backend/rewrite/rewriteSupport.c
src/include/rewrite/rewriteSupport.h
src/test/modules/test_ddl_deparse/expected/comment_on.out
src/test/modules/test_ddl_deparse/sql/comment_on.sql
src/test/regress/expected/object_address.out

index 9029477d68c6b1232d76ed3f55cf034ca8026405..cc636e2e3ed775011fb5ce02ed6b2beff6b63ffc 100644 (file)
@@ -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. */
index 6c6d21b5885e7e6787b30ad2adc6f5448726e703..e833b2eba5a0b4dcb5d994c845e7c61700030b51 100644 (file)
@@ -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);
index c4d05d26d462cfe4713d2a1a0a41e84e6bbc434f..ce9c8e379388310f08d92151e9443f7362ab9496 100644 (file)
@@ -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;
-}
index 36e5296295743821a6839c2b962c34ef45be1b98..d287bbda7891c25705d6d306bbc50c6ad02c9540 100644 (file)
@@ -22,7 +22,5 @@ extern bool IsDefinedRewriteRule(Oid owningRel, const char *ruleName);
 extern void SetRelationRuleStatus(Oid relationId, bool relHasRules);
 
 extern Oid     get_rewrite_oid(Oid relid, const char *rulename, bool missing_ok);
-extern Oid get_rewrite_oid_without_relid(const char *rulename,
-                                                         Oid *relid, bool missing_ok);
 
 #endif   /* REWRITESUPPORT_H */
index 8ce01e0f748d8c8dbbb66e5541ab29c60490f10c..129eff99c50223e26cd3c0129477e7b0e36d52e9 100644 (file)
@@ -19,5 +19,5 @@ COMMENT ON FUNCTION c_function_test() IS 'FUNCTION test';
 ERROR:  function c_function_test() does not exist
 COMMENT ON TRIGGER trigger_1 ON datatype_table IS 'TRIGGER test';
 NOTICE:  DDL test: type simple, tag COMMENT
-COMMENT ON RULE rule_1 IS 'RULE test';
+COMMENT ON RULE rule_1 ON datatype_table IS 'RULE test';
 NOTICE:  DDL test: type simple, tag COMMENT
index 734d493d5ad5cfc035a5ed482318473eb8a0a0d2..fc29a736150e8d2c7653f44c565664cd3d77749a 100644 (file)
@@ -11,4 +11,4 @@ COMMENT ON TABLE datatype_table IS 'This table should contain all native datatyp
 COMMENT ON VIEW datatype_view IS 'This is a view';
 COMMENT ON FUNCTION c_function_test() IS 'FUNCTION test';
 COMMENT ON TRIGGER trigger_1 ON datatype_table IS 'TRIGGER test';
-COMMENT ON RULE rule_1 IS 'RULE test';
+COMMENT ON RULE rule_1 ON datatype_table IS 'RULE test';
index ec5ada97ad7e0ef0815107a2b153fff8f9752da9..4766975746d66a190c48f67327c3267775b4fa2d 100644 (file)
@@ -214,8 +214,8 @@ WARNING:  error for operator family,{addr_nsp,zwei},{}: access method "addr_nsp"
 WARNING:  error for operator family,{addr_nsp,zwei},{integer}: access method "addr_nsp" does not exist
 WARNING:  error for operator family,{eins,zwei,drei},{}: access method "eins" does not exist
 WARNING:  error for operator family,{eins,zwei,drei},{integer}: access method "eins" does not exist
-WARNING:  error for rule,{eins},{}: rule "eins" does not exist
-WARNING:  error for rule,{eins},{integer}: rule "eins" does not exist
+WARNING:  error for rule,{eins},{}: must specify relation and object name
+WARNING:  error for rule,{eins},{integer}: must specify relation and object name
 WARNING:  error for rule,{addr_nsp,zwei},{}: relation "addr_nsp" does not exist
 WARNING:  error for rule,{addr_nsp,zwei},{integer}: relation "addr_nsp" does not exist
 WARNING:  error for rule,{eins,zwei,drei},{}: schema "eins" does not exist