From 7f8d244e954d1810982a727382c5ca4548f81837 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 3 Nov 2010 18:13:20 -0300
Subject: [PATCH] Use getObjectDescription

---
 src/backend/catalog/dependency.c      |   15 +++++++++++++++
 src/backend/catalog/namespace.c       |   12 ++++++------
 src/backend/commands/conversioncmds.c |    3 +--
 src/include/catalog/dependency.h      |    2 ++
 src/include/catalog/namespace.h       |    4 ++--
 5 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index bb14a43..f55d3f3 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -2706,6 +2706,21 @@ getObjectDescription(const ObjectAddress *object)
 }
 
 /*
+ * getObjectDescriptionOids: as above, except the object is specified by Oids
+ */
+char *
+getObjectDescriptionOids(Oid classid, Oid objid)
+{
+	ObjectAddress	address;
+
+	address.classId = classid;
+	address.objectId = objid;
+	address.objectSubId = 0;
+
+	return getObjectDescription(&address);
+}
+
+/*
  * subroutine for getObjectDescription: describe a relation
  */
 static void
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index 0a04f4d..b7b1198 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -2344,14 +2344,13 @@ LookupCreationNamespace(const char *nspname)
  * ereport(ERROR, ...) in case of any problem.
  */
 void
-CheckSetNamespace(Oid oldNspOid, Oid nspOid,
-				  const char *name, const char *objtype)
+CheckSetNamespace(Oid oldNspOid, Oid nspOid, Oid classid, Oid objid);
 {
 	if (oldNspOid == nspOid)
 		ereport(ERROR,
 				(errcode(ERRCODE_DUPLICATE_OBJECT),
-				 errmsg("%s \"%s\" already exists in schema \"%s\"",
-						objtype, name, get_namespace_name(nspOid))));
+				 errmsg("%s already exists in schema \"%s\"",
+						getObjectDescriptionOids(classid, objid), get_namespace_name(nspOid))));
 
 	/* disallow renaming into or out of temp schemas */
 	if (isAnyTempNamespace(nspOid) || isAnyTempNamespace(oldNspOid))
@@ -2371,8 +2370,9 @@ CheckSetNamespace(Oid oldNspOid, Oid nspOid,
 							  ObjectIdGetDatum(nspOid)))
 		ereport(ERROR,
 				(errcode(ERRCODE_DUPLICATE_OBJECT),
-				 errmsg("%s \"%s\" already exists in schema \"%s\"",
-						objtype, name, get_namespace_name(nspOid))));
+				 errmsg("%s already exists in schema \"%s\"",
+						getObjectDescriptionOids(classid, objid),
+						get_namespace_name(nspOid))));
 }
 
 /*
diff --git a/src/backend/commands/conversioncmds.c b/src/backend/commands/conversioncmds.c
index 75c06aa..7e29342 100644
--- a/src/backend/commands/conversioncmds.c
+++ b/src/backend/commands/conversioncmds.c
@@ -382,8 +382,7 @@ AlterConversionNamespace_internal(Relation rel, Oid conversionOid, Oid nspOid)
 	convForm = (Form_pg_conversion) GETSTRUCT(tup);
 	oldNspOid = convForm->connamespace;
 
-	CheckSetNamespace(oldNspOid, nspOid,
-					  NameStr(convForm->conname), "conversion");
+	CheckSetNamespace(oldNspOid, nspOid, ConversionRelationId, conversionOid);
 
 	/* Superusers can always do it */
 	if (!superuser())
diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h
index ccde371..f56dd4a 100644
--- a/src/include/catalog/dependency.h
+++ b/src/include/catalog/dependency.h
@@ -166,6 +166,8 @@ extern ObjectClass getObjectClass(const ObjectAddress *object);
 
 extern char *getObjectDescription(const ObjectAddress *object);
 
+extern char *getObjectDescriptionOids(Oid classid, Oid objid);
+
 extern ObjectAddresses *new_object_addresses(void);
 
 extern void add_exact_object_address(const ObjectAddress *object,
diff --git a/src/include/catalog/namespace.h b/src/include/catalog/namespace.h
index 16d5763..29c9a5d 100644
--- a/src/include/catalog/namespace.h
+++ b/src/include/catalog/namespace.h
@@ -94,8 +94,8 @@ extern Oid	LookupExplicitNamespace(const char *nspname);
 extern Oid	get_namespace_oid(const char *nspname, bool missing_ok);
 
 extern Oid	LookupCreationNamespace(const char *nspname);
-extern void CheckSetNamespace(Oid oldNspOid, Oid nspOid,
-							  const char *name, const char *objtype);
+extern void CheckSetNamespace(Oid oldNspOid, Oid nspOid, Oid classid,
+				  Oid objid);
 extern Oid	QualifiedNameGetCreationNamespace(List *names, char **objname_p);
 extern RangeVar *makeRangeVarFromNameList(List *names);
 extern char *NameListToString(List *names);
-- 
1.7.1

