pgsql-v9.2-drop-reworks-part-0.1.patch
application/octet-stream
Filename: pgsql-v9.2-drop-reworks-part-0.1.patch
Type: application/octet-stream
Part: 0
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index bf25091..cb5ced4 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -72,15 +72,19 @@
#include "utils/tqual.h"
static ObjectAddress get_object_address_unqualified(ObjectType objtype,
- List *qualname);
-static Relation get_relation_by_qualified_name(ObjectType objtype,
- List *objname, LOCKMODE lockmode);
+ List *qualname, bool missing_ok);
+static ObjectAddress get_relation_by_qualified_name(ObjectType objtype,
+ List *objname, bool missing_ok,
+ Relation *relp, LOCKMODE lockmode);
static ObjectAddress get_object_address_relobject(ObjectType objtype,
- List *objname, Relation *relp);
+ List *objname, bool missing_ok, Relation *relp);
static ObjectAddress get_object_address_attribute(ObjectType objtype,
- List *objname, Relation *relp, LOCKMODE lockmode);
+ List *objname, bool missing_ok,
+ Relation *relp, LOCKMODE lockmode);
+static ObjectAddress get_object_address_typeobj(ObjectType objtype,
+ List *objname, bool missing_ok);
static ObjectAddress get_object_address_opcf(ObjectType objtype, List *objname,
- List *objargs);
+ List *objargs, bool missing_ok);
static bool object_exists(ObjectAddress address);
@@ -106,7 +110,7 @@ static bool object_exists(ObjectAddress address);
*/
ObjectAddress
get_object_address(ObjectType objtype, List *objname, List *objargs,
- Relation *relp, LOCKMODE lockmode)
+ bool missing_ok, Relation *relp, LOCKMODE lockmode)
{
ObjectAddress address;
Relation relation = NULL;
@@ -121,21 +125,20 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
case OBJECT_TABLE:
case OBJECT_VIEW:
case OBJECT_FOREIGN_TABLE:
- relation =
- get_relation_by_qualified_name(objtype, objname, lockmode);
- address.classId = RelationRelationId;
- address.objectId = RelationGetRelid(relation);
- address.objectSubId = 0;
+ address =
+ get_relation_by_qualified_name(objtype, objname, missing_ok,
+ &relation, lockmode);
break;
case OBJECT_COLUMN:
address =
- get_object_address_attribute(objtype, objname, &relation,
- lockmode);
+ get_object_address_attribute(objtype, objname, missing_ok,
+ &relation, lockmode);
break;
case OBJECT_RULE:
case OBJECT_TRIGGER:
case OBJECT_CONSTRAINT:
- address = get_object_address_relobject(objtype, objname, &relation);
+ address = get_object_address_relobject(objtype, objname,
+ missing_ok, &relation);
break;
case OBJECT_DATABASE:
case OBJECT_EXTENSION:
@@ -145,23 +148,23 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
case OBJECT_LANGUAGE:
case OBJECT_FDW:
case OBJECT_FOREIGN_SERVER:
- address = get_object_address_unqualified(objtype, objname);
+ address = get_object_address_unqualified(objtype,
+ objname, missing_ok);
break;
case OBJECT_TYPE:
case OBJECT_DOMAIN:
- address.classId = TypeRelationId;
- address.objectId =
- typenameTypeId(NULL, makeTypeNameFromNameList(objname));
- address.objectSubId = 0;
+ address = get_object_address_typeobj(objtype, objname, missing_ok);
break;
case OBJECT_AGGREGATE:
address.classId = ProcedureRelationId;
- address.objectId = LookupAggNameTypeNames(objname, objargs, false);
+ address.objectId =
+ LookupAggNameTypeNames(objname, objargs, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_FUNCTION:
address.classId = ProcedureRelationId;
- address.objectId = LookupFuncNameTypeNames(objname, objargs, false);
+ address.objectId =
+ LookupFuncNameTypeNames(objname, objargs, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_OPERATOR:
@@ -171,22 +174,23 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
LookupOperNameTypeNames(NULL, objname,
(TypeName *) linitial(objargs),
(TypeName *) lsecond(objargs),
- false, -1);
+ missing_ok, -1);
address.objectSubId = 0;
break;
case OBJECT_COLLATION:
address.classId = CollationRelationId;
- address.objectId = get_collation_oid(objname, false);
+ address.objectId = get_collation_oid(objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_CONVERSION:
address.classId = ConversionRelationId;
- address.objectId = get_conversion_oid(objname, false);
+ address.objectId = get_conversion_oid(objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_OPCLASS:
case OBJECT_OPFAMILY:
- address = get_object_address_opcf(objtype, objname, objargs);
+ address = get_object_address_opcf(objtype,
+ objname, objargs, missing_ok);
break;
case OBJECT_LARGEOBJECT:
Assert(list_length(objname) == 1);
@@ -194,10 +198,13 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
address.objectId = oidparse(linitial(objname));
address.objectSubId = 0;
if (!LargeObjectExists(address.objectId))
+ {
+ if (!missing_ok)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("large object %u does not exist",
address.objectId)));
+ }
break;
case OBJECT_CAST:
{
@@ -208,28 +215,28 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
address.classId = CastRelationId;
address.objectId =
- get_cast_oid(sourcetypeid, targettypeid, false);
+ get_cast_oid(sourcetypeid, targettypeid, missing_ok);
address.objectSubId = 0;
}
break;
case OBJECT_TSPARSER:
address.classId = TSParserRelationId;
- address.objectId = get_ts_parser_oid(objname, false);
+ address.objectId = get_ts_parser_oid(objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSDICTIONARY:
address.classId = TSDictionaryRelationId;
- address.objectId = get_ts_dict_oid(objname, false);
+ address.objectId = get_ts_dict_oid(objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSTEMPLATE:
address.classId = TSTemplateRelationId;
- address.objectId = get_ts_template_oid(objname, false);
+ address.objectId = get_ts_template_oid(objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSCONFIGURATION:
address.classId = TSConfigRelationId;
- address.objectId = get_ts_config_oid(objname, false);
+ address.objectId = get_ts_config_oid(objname, missing_ok);
address.objectSubId = 0;
break;
default:
@@ -241,6 +248,15 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
}
/*
+ * If we could not find the supplied object, return without locking.
+ */
+ if (!OidIsValid(address.objectId))
+ {
+ Assert(missing_ok);
+ return address;
+ }
+
+ /*
* If we're dealing with a relation or attribute, then the relation is
* already locked. If we're dealing with any other type of object, we
* need to lock it and then verify that it still exists.
@@ -267,7 +283,8 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
* unqualified name.
*/
static ObjectAddress
-get_object_address_unqualified(ObjectType objtype, List *qualname)
+get_object_address_unqualified(ObjectType objtype,
+ List *qualname, bool missing_ok)
{
const char *name;
ObjectAddress address;
@@ -323,42 +340,42 @@ get_object_address_unqualified(ObjectType objtype, List *qualname)
{
case OBJECT_DATABASE:
address.classId = DatabaseRelationId;
- address.objectId = get_database_oid(name, false);
+ address.objectId = get_database_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_EXTENSION:
address.classId = ExtensionRelationId;
- address.objectId = get_extension_oid(name, false);
+ address.objectId = get_extension_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TABLESPACE:
address.classId = TableSpaceRelationId;
- address.objectId = get_tablespace_oid(name, false);
+ address.objectId = get_tablespace_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_ROLE:
address.classId = AuthIdRelationId;
- address.objectId = get_role_oid(name, false);
+ address.objectId = get_role_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_SCHEMA:
address.classId = NamespaceRelationId;
- address.objectId = get_namespace_oid(name, false);
+ address.objectId = get_namespace_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_LANGUAGE:
address.classId = LanguageRelationId;
- address.objectId = get_language_oid(name, false);
+ address.objectId = get_language_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_FDW:
address.classId = ForeignDataWrapperRelationId;
- address.objectId = get_foreign_data_wrapper_oid(name, false);
+ address.objectId = get_foreign_data_wrapper_oid(name, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_FOREIGN_SERVER:
address.classId = ForeignServerRelationId;
- address.objectId = get_foreign_server_oid(name, false);
+ address.objectId = get_foreign_server_oid(name, missing_ok);
address.objectSubId = 0;
break;
default:
@@ -375,13 +392,71 @@ get_object_address_unqualified(ObjectType objtype, List *qualname)
/*
* Locate a relation by qualified name.
*/
-static Relation
+static ObjectAddress
get_relation_by_qualified_name(ObjectType objtype, List *objname,
- LOCKMODE lockmode)
+ bool missing_ok,
+ Relation *relp, LOCKMODE lockmode)
{
+ ObjectAddress address;
+ RangeVar *range;
Relation relation;
- relation = relation_openrv(makeRangeVarFromNameList(objname), lockmode);
+ range = makeRangeVarFromNameList(objname);
+
+ address.classId = RelationRelationId;
+ address.objectId = RangeVarGetRelid(range, true);
+ address.objectSubId = 0;
+
+ /*
+ * Because RangeVarGetRelid() cannot generate an error message
+ * according to ObjectType, so we shall raise an error message
+ * here.
+ */
+ if (!OidIsValid(address.objectId))
+ {
+ if (!missing_ok)
+ {
+ switch (objtype)
+ {
+ case OBJECT_INDEX:
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_TABLE),
+ errmsg("index \"%s\" does not exist",
+ NameListToString(objname))));
+ break;
+ case OBJECT_SEQUENCE:
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_TABLE),
+ errmsg("sequence \"%s\" does not exist",
+ NameListToString(objname))));
+ break;
+ case OBJECT_TABLE:
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_TABLE),
+ errmsg("table \"%s\" does not exist",
+ NameListToString(objname))));
+ break;
+ case OBJECT_VIEW:
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_TABLE),
+ errmsg("view \"%s\" does not exist",
+ NameListToString(objname))));
+ break;
+ case OBJECT_FOREIGN_TABLE:
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_TABLE),
+ errmsg("foreign table \"%s\" does not exist",
+ NameListToString(objname))));
+ break;
+ default:
+ elog(ERROR, "unrecognized objtype: %d", (int) objtype);
+ break;
+ }
+ }
+ return address;
+ }
+
+ relation = relation_open(address.objectId, lockmode);
switch (objtype)
{
case OBJECT_INDEX:
@@ -424,7 +499,10 @@ get_relation_by_qualified_name(ObjectType objtype, List *objname,
break;
}
- return relation;
+ /* Done */
+ *relp = relation;
+
+ return address;
}
/*
@@ -435,10 +513,11 @@ get_relation_by_qualified_name(ObjectType objtype, List *objname,
* mode for the object itself, not the relation to which it is attached.
*/
static ObjectAddress
-get_object_address_relobject(ObjectType objtype, List *objname, Relation *relp)
+get_object_address_relobject(ObjectType objtype, List *objname,
+ bool missing_ok, Relation *relp)
{
ObjectAddress address;
- Relation relation = NULL;
+ Oid reloid;
int nnames;
const char *depname;
@@ -449,8 +528,6 @@ get_object_address_relobject(ObjectType objtype, List *objname, Relation *relp)
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.
@@ -461,36 +538,36 @@ get_object_address_relobject(ObjectType objtype, List *objname, Relation *relp)
if (objtype != OBJECT_RULE)
elog(ERROR, "must specify relation and object name");
address.classId = RewriteRelationId;
- address.objectId = get_rewrite_oid_without_relid(depname, &reloid);
+ address.objectId =
+ get_rewrite_oid_without_relid(depname, &reloid, missing_ok);
address.objectSubId = 0;
- relation = heap_open(reloid, AccessShareLock);
}
else
{
List *relname;
- Oid reloid;
+ RangeVar *range;
/* Extract relation name and open relation. */
relname = list_truncate(list_copy(objname), nnames - 1);
- relation = heap_openrv(makeRangeVarFromNameList(relname),
- AccessShareLock);
- reloid = RelationGetRelid(relation);
+ range = makeRangeVarFromNameList(relname);
+ reloid = RangeVarGetRelid(range, missing_ok);
switch (objtype)
{
case OBJECT_RULE:
address.classId = RewriteRelationId;
- address.objectId = get_rewrite_oid(reloid, depname, false);
+ address.objectId = get_rewrite_oid(reloid, depname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TRIGGER:
address.classId = TriggerRelationId;
- address.objectId = get_trigger_oid(reloid, depname, false);
+ address.objectId = get_trigger_oid(reloid, depname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_CONSTRAINT:
address.classId = ConstraintRelationId;
- address.objectId = get_constraint_oid(reloid, depname, false);
+ address.objectId =
+ get_constraint_oid(reloid, depname, missing_ok);
address.objectSubId = 0;
break;
default:
@@ -503,7 +580,8 @@ get_object_address_relobject(ObjectType objtype, List *objname, Relation *relp)
}
/* Done. */
- *relp = relation;
+ if (OidIsValid(address.objectId))
+ *relp = heap_open(reloid, AccessShareLock);
return address;
}
@@ -511,32 +589,90 @@ get_object_address_relobject(ObjectType objtype, List *objname, Relation *relp)
* Find the ObjectAddress for an attribute.
*/
static ObjectAddress
-get_object_address_attribute(ObjectType objtype, List *objname,
+get_object_address_attribute(ObjectType objtype, List *objname, bool missing_ok,
Relation *relp, LOCKMODE lockmode)
{
ObjectAddress address;
+ RangeVar *range;
List *relname;
Oid reloid;
- Relation relation;
const char *attname;
+ AttrNumber attnum;
- /* Extract relation name and open relation. */
+ /* Extract relation and attribute name. */
attname = strVal(lfirst(list_tail(objname)));
relname = list_truncate(list_copy(objname), list_length(objname) - 1);
- relation = relation_openrv(makeRangeVarFromNameList(relname), lockmode);
- reloid = RelationGetRelid(relation);
+ range = makeRangeVarFromNameList(relname);
+ reloid = RangeVarGetRelid(range, missing_ok);
+
+ /* Look up attribute */
+ if (!OidIsValid(reloid) ||
+ (attnum = get_attnum(reloid, attname)) == InvalidAttrNumber)
+ {
+ if (!missing_ok)
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_COLUMN),
+ errmsg("column \"%s\" of relation \"%s\" does not exist",
+ attname, NameListToString(relname))));
+
+ address.classId = RelationRelationId;
+ address.objectId = InvalidOid;
+ address.objectSubId = InvalidAttrNumber;
+ return address;
+ }
- /* Look up attribute and construct return value. */
+ /* Construct return value and open relation for locking */
address.classId = RelationRelationId;
- address.objectId = reloid;
- address.objectSubId = get_attnum(reloid, attname);
- if (address.objectSubId == InvalidAttrNumber)
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_COLUMN),
- errmsg("column \"%s\" of relation \"%s\" does not exist",
- attname, RelationGetRelationName(relation))));
+ address.objectId = reloid;
+ address.objectSubId = attnum;
+
+ *relp = relation_open(reloid, lockmode);
+
+ return address;
+}
+
+/*
+ * Find the ObjectAddress for a type or domain
+ */
+static ObjectAddress
+get_object_address_typeobj(ObjectType objtype,
+ List *objname, bool missing_ok)
+{
+ ObjectAddress address;
+ TypeName *typename;
+ Type tup;
+ typename = makeTypeNameFromNameList(objname);
+
+ tup = LookupTypeName(NULL, typename, NULL);
+ if (!HeapTupleIsValid(tup))
+ {
+ if (!missing_ok)
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("type \"%s\" does not exist",
+ TypeNameToString(typename))));
+
+ address.classId = TypeRelationId;
+ address.objectId = InvalidOid;
+ address.objectSubId = 0;
+ return address;
+ }
+
+ address.classId = TypeRelationId;
+ address.objectId = typeTypeId(tup);
+ address.objectSubId = 0;
+
+ if (objtype == OBJECT_DOMAIN)
+ {
+ if (((Form_pg_type) GETSTRUCT(tup))->typtype != TYPTYPE_DOMAIN)
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("\"%s\" is not a domain",
+ TypeNameToString(typename))));
+ }
+
+ ReleaseSysCache(tup);
- *relp = relation;
return address;
}
@@ -544,7 +680,8 @@ get_object_address_attribute(ObjectType objtype, List *objname,
* Find the ObjectAddress for an opclass or opfamily.
*/
static ObjectAddress
-get_object_address_opcf(ObjectType objtype, List *objname, List *objargs)
+get_object_address_opcf(ObjectType objtype,
+ List *objname, List *objargs, bool missing_ok)
{
Oid amoid;
ObjectAddress address;
@@ -556,12 +693,12 @@ get_object_address_opcf(ObjectType objtype, List *objname, List *objargs)
{
case OBJECT_OPCLASS:
address.classId = OperatorClassRelationId;
- address.objectId = get_opclass_oid(amoid, objname, false);
+ address.objectId = get_opclass_oid(amoid, objname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_OPFAMILY:
address.classId = OperatorFamilyRelationId;
- address.objectId = get_opfamily_oid(amoid, objname, false);
+ address.objectId = get_opfamily_oid(amoid, objname, missing_ok);
address.objectSubId = 0;
break;
default:
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index d09bef0..9b2368b 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -69,7 +69,7 @@ CommentObject(CommentStmt *stmt)
* against concurrent DROP operations.
*/
address = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
- &relation, ShareUpdateExclusiveLock);
+ false, &relation, ShareUpdateExclusiveLock);
/* Require ownership of the target object. */
check_object_ownership(GetUserId(), stmt->objtype, address,
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index d848926..cf13200 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -2703,7 +2703,7 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt)
* against concurrent DROP and ALTER EXTENSION ADD/DROP operations.
*/
object = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
- &relation, ShareUpdateExclusiveLock);
+ false, &relation, ShareUpdateExclusiveLock);
/* Permission check: must own target object, too */
check_object_ownership(GetUserId(), stmt->objtype, object,
diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c
index 7afb713..9b9dbd7 100644
--- a/src/backend/commands/seclabel.c
+++ b/src/backend/commands/seclabel.c
@@ -88,7 +88,7 @@ ExecSecLabelStmt(SecLabelStmt *stmt)
* guard against concurrent modifications.
*/
address = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
- &relation, ShareUpdateExclusiveLock);
+ false, &relation, ShareUpdateExclusiveLock);
/* Require ownership of the target object. */
check_object_ownership(GetUserId(), stmt->objtype, address,
diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c
index 7770d03..4d6f508 100644
--- a/src/backend/rewrite/rewriteSupport.c
+++ b/src/backend/rewrite/rewriteSupport.c
@@ -132,7 +132,8 @@ get_rewrite_oid(Oid relid, const char *rulename, bool missing_ok)
* were unique across the entire database.
*/
Oid
-get_rewrite_oid_without_relid(const char *rulename, Oid *reloid)
+get_rewrite_oid_without_relid(const char *rulename,
+ Oid *reloid, bool missing_ok)
{
Relation RewriteRelation;
HeapScanDesc scanDesc;
@@ -151,20 +152,26 @@ get_rewrite_oid_without_relid(const char *rulename, Oid *reloid)
htup = heap_getnext(scanDesc, ForwardScanDirection);
if (!HeapTupleIsValid(htup))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("rule \"%s\" does not exist", rulename)));
-
- ruleoid = HeapTupleGetOid(htup);
- if (reloid != NULL)
- *reloid = ((Form_pg_rewrite) GETSTRUCT(htup))->ev_class;
-
- if (HeapTupleIsValid(htup = heap_getnext(scanDesc, ForwardScanDirection)))
- 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.")));
-
+ {
+ 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);
diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h
index 109a8a3..3eafb18 100644
--- a/src/include/catalog/objectaddress.h
+++ b/src/include/catalog/objectaddress.h
@@ -28,7 +28,8 @@ typedef struct ObjectAddress
} ObjectAddress;
extern ObjectAddress get_object_address(ObjectType objtype, List *objname,
- List *objargs, Relation *relp, LOCKMODE lockmode);
+ List *objargs, bool missing_ok,
+ Relation *relp, LOCKMODE lockmode);
extern void check_object_ownership(Oid roleid,
ObjectType objtype, ObjectAddress address,
diff --git a/src/include/rewrite/rewriteSupport.h b/src/include/rewrite/rewriteSupport.h
index 77417ba..22e6ca2 100644
--- a/src/include/rewrite/rewriteSupport.h
+++ b/src/include/rewrite/rewriteSupport.h
@@ -23,6 +23,7 @@ extern void SetRelationRuleStatus(Oid relationId, bool relHasRules,
bool relIsBecomingView);
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);
+extern Oid get_rewrite_oid_without_relid(const char *rulename,
+ Oid *relid, bool missing_ok);
#endif /* REWRITESUPPORT_H */
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index f84da45..9d5d2ba 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -4,7 +4,7 @@
--
CREATE TABLE tmp (initial int4);
COMMENT ON TABLE tmp_wrong IS 'table comment';
-ERROR: relation "tmp_wrong" does not exist
+ERROR: table "tmp_wrong" does not exist
COMMENT ON TABLE tmp IS 'table comment';
COMMENT ON TABLE tmp IS NULL;
ALTER TABLE tmp ADD COLUMN a int4 default 3;
diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out
index c78d9ee..606f9ec 100644
--- a/src/test/regress/expected/create_index.out
+++ b/src/test/regress/expected/create_index.out
@@ -21,7 +21,7 @@ CREATE INDEX iix ON ihighway USING btree (name text_ops);
CREATE INDEX six ON shighway USING btree (name text_ops);
-- test comments
COMMENT ON INDEX six_wrong IS 'bad index';
-ERROR: relation "six_wrong" does not exist
+ERROR: index "six_wrong" does not exist
COMMENT ON INDEX six IS 'good index';
COMMENT ON INDEX six IS NULL;
--
diff --git a/src/test/regress/expected/create_view.out b/src/test/regress/expected/create_view.out
index f2c0685..253265f 100644
--- a/src/test/regress/expected/create_view.out
+++ b/src/test/regress/expected/create_view.out
@@ -17,7 +17,7 @@ CREATE VIEW toyemp AS
FROM emp;
-- Test comments
COMMENT ON VIEW noview IS 'no view';
-ERROR: relation "noview" does not exist
+ERROR: view "noview" does not exist
COMMENT ON VIEW toyemp IS 'is a view';
COMMENT ON VIEW toyemp IS NULL;
--
diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out
index 13e1565..c986e9d 100644
--- a/src/test/regress/expected/sequence.out
+++ b/src/test/regress/expected/sequence.out
@@ -229,7 +229,7 @@ SELECT * FROM information_schema.sequences WHERE sequence_name IN ('sequence_tes
-- Test comments
COMMENT ON SEQUENCE asdf IS 'won''t work';
-ERROR: relation "asdf" does not exist
+ERROR: sequence "asdf" does not exist
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
COMMENT ON SEQUENCE sequence_test2 IS NULL;
-- Test lastval()
diff --git a/src/test/regress/output/security_label.source b/src/test/regress/output/security_label.source
index 4bc803d..4dacf6e 100644
--- a/src/test/regress/output/security_label.source
+++ b/src/test/regress/output/security_label.source
@@ -47,7 +47,7 @@ ERROR: must be owner of relation seclabel_tbl2
SECURITY LABEL ON TABLE seclabel_tbl1 IS 'secret'; -- fail (not superuser)
ERROR: only superuser can set 'secret' label
SECURITY LABEL ON TABLE seclabel_tbl3 IS 'unclassified'; -- fail (not found)
-ERROR: relation "seclabel_tbl3" does not exist
+ERROR: table "seclabel_tbl3" does not exist
SET SESSION AUTHORIZATION seclabel_user2;
SECURITY LABEL ON TABLE seclabel_tbl1 IS 'unclassified'; -- fail
ERROR: must be owner of relation seclabel_tbl1