Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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