From 29f8757ab3760a4cbabd701e2925eccb2733aa99 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 3 Nov 2010 14:10:10 -0300
Subject: [PATCH 10/10] Clean up ALTER <OBJECT> SET SCHEMA patch

---
 src/backend/catalog/namespace.c       |   36 +++++++++++++++++++++++++++++++
 src/backend/catalog/pg_namespace.c    |   38 ---------------------------------
 src/backend/commands/conversioncmds.c |    6 +++-
 src/backend/commands/opclasscmds.c    |    8 +++++-
 src/backend/commands/operatorcmds.c   |   25 +++++++++++----------
 src/backend/commands/tsearchcmds.c    |   10 +++++++-
 src/include/catalog/namespace.h       |    2 +
 src/include/catalog/pg_namespace.h    |    2 -
 src/include/commands/conversioncmds.h |    2 -
 src/include/commands/defrem.h         |    9 -------
 10 files changed, 70 insertions(+), 68 deletions(-)

diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index 3727146..0a04f4d 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -2340,6 +2340,42 @@ LookupCreationNamespace(const char *nspname)
 }
 
 /*
+ * Check new namespace validity in ALTER OBJECT ... SET SCHEMA ... and
+ * ereport(ERROR, ...) in case of any problem.
+ */
+void
+CheckSetNamespace(Oid oldNspOid, Oid nspOid,
+				  const char *name, const char *objtype)
+{
+	if (oldNspOid == nspOid)
+		ereport(ERROR,
+				(errcode(ERRCODE_DUPLICATE_OBJECT),
+				 errmsg("%s \"%s\" already exists in schema \"%s\"",
+						objtype, name, get_namespace_name(nspOid))));
+
+	/* disallow renaming into or out of temp schemas */
+	if (isAnyTempNamespace(nspOid) || isAnyTempNamespace(oldNspOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				 errmsg("cannot move objects into or out of temporary schemas")));
+
+	/* same for TOAST schema */
+	if (nspOid == PG_TOAST_NAMESPACE || oldNspOid == PG_TOAST_NAMESPACE)
+		ereport(ERROR,
+				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				 errmsg("cannot move objects into or out of TOAST schema")));
+
+	/* check for duplicate name (more friendly than unique-index failure) */
+	if (SearchSysCacheExists2(TYPENAMENSP,
+							  CStringGetDatum(name),
+							  ObjectIdGetDatum(nspOid)))
+		ereport(ERROR,
+				(errcode(ERRCODE_DUPLICATE_OBJECT),
+				 errmsg("%s \"%s\" already exists in schema \"%s\"",
+						objtype, name, get_namespace_name(nspOid))));
+}
+
+/*
  * QualifiedNameGetCreationNamespace
  *		Given a possibly-qualified name for an object (in List-of-Values
  *		format), determine what namespace the object should be created in.
diff --git a/src/backend/catalog/pg_namespace.c b/src/backend/catalog/pg_namespace.c
index eabb19d..71ebd7a 100644
--- a/src/backend/catalog/pg_namespace.c
+++ b/src/backend/catalog/pg_namespace.c
@@ -17,10 +17,8 @@
 #include "access/heapam.h"
 #include "catalog/dependency.h"
 #include "catalog/indexing.h"
-#include "catalog/namespace.h"
 #include "catalog/pg_namespace.h"
 #include "utils/builtins.h"
-#include "utils/lsyscache.h"
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
@@ -79,39 +77,3 @@ NamespaceCreate(const char *nspName, Oid ownerId)
 
 	return nspoid;
 }
-
-/*
- * Check new namespace validity in ALTER OBJECT ... SET SCHEMA ... and
- * ereport(ERROR, ...) in case of any problem.
- */
-void
-CheckSetNamespace(Oid oldNspOid, Oid nspOid,
-				  const char *name, const char *objtype)
-{
-	if (oldNspOid == nspOid)
-		ereport(ERROR,
-				(errcode(ERRCODE_DUPLICATE_OBJECT),
-				 errmsg("%s \"%s\" already exists in schema \"%s\"",
-						objtype, name, get_namespace_name(nspOid))));
-
-	/* disallow renaming into or out of temp schemas */
-	if (isAnyTempNamespace(nspOid) || isAnyTempNamespace(oldNspOid))
-		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-			errmsg("cannot move objects into or out of temporary schemas")));
-
-	/* same for TOAST schema */
-	if (nspOid == PG_TOAST_NAMESPACE || oldNspOid == PG_TOAST_NAMESPACE)
-		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-				 errmsg("cannot move objects into or out of TOAST schema")));
-
-	/* check for duplicate name (more friendly than unique-index failure) */
-	if (SearchSysCacheExists2(TYPENAMENSP,
-							  CStringGetDatum(name),
-							  ObjectIdGetDatum(nspOid)))
-		ereport(ERROR,
-				(errcode(ERRCODE_DUPLICATE_OBJECT),
-				 errmsg("%s \"%s\" already exists in schema \"%s\"",
-						objtype, name, get_namespace_name(nspOid))));
-}
diff --git a/src/backend/commands/conversioncmds.c b/src/backend/commands/conversioncmds.c
index d989c07..75c06aa 100644
--- a/src/backend/commands/conversioncmds.c
+++ b/src/backend/commands/conversioncmds.c
@@ -33,6 +33,8 @@
 
 static void AlterConversionOwner_internal(Relation rel, Oid conversionOid,
 							  Oid newOwnerId);
+static void AlterConversionNamespace_internal(Relation rel, Oid conversionOid,
+								  Oid nspOid);
 
 /*
  * CREATE CONVERSION
@@ -350,7 +352,7 @@ AlterConversionNamespace(List *name, const char *newschema)
 }
 
 /*
- * Change conversion owner, by oid
+ * Change conversion schema, by oid
  */
 void
 AlterConversionNamespace_oid(Oid conversionOid, Oid newNspOid)
@@ -364,7 +366,7 @@ AlterConversionNamespace_oid(Oid conversionOid, Oid newNspOid)
 	heap_close(rel, NoLock);
 }
 
-void
+static void
 AlterConversionNamespace_internal(Relation rel, Oid conversionOid, Oid nspOid)
 {
 	Oid			oldNspOid;
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c
index 596779c..bfda30c 100644
--- a/src/backend/commands/opclasscmds.c
+++ b/src/backend/commands/opclasscmds.c
@@ -81,6 +81,10 @@ static void AlterOpClassOwner_internal(Relation rel, HeapTuple tuple,
 						   Oid newOwnerId);
 static void AlterOpFamilyOwner_internal(Relation rel, HeapTuple tuple,
 							Oid newOwnerId);
+static void AlterOpClassNamespace_internal(Relation rel, HeapTuple tup,
+			   				   Oid nspOid);
+extern void AlterOpFamilyNamespace_internal(Relation rel, HeapTuple tup,
+								Oid nspOid);
 
 
 /*
@@ -1955,13 +1959,13 @@ AlterOpClassNamespace_oid(Oid opclassOid, Oid newNspOid)
 	if (!HeapTupleIsValid(tup))
 		elog(ERROR, "cache lookup failed for opclass %u", opclassOid);
 
-	AlterOpClassOwner_internal(rel, tup, newNspOid);
+	AlterOpClassNamespace_internal(rel, tup, newNspOid);
 
 	heap_freetuple(tup);
 	heap_close(rel, NoLock);
 }
 
-void
+static void
 AlterOpClassNamespace_internal(Relation rel, HeapTuple tup, Oid nspOid)
 {
 	Oid			oldNspOid;
diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c
index 0a94c12..3868216 100644
--- a/src/backend/commands/operatorcmds.c
+++ b/src/backend/commands/operatorcmds.c
@@ -53,6 +53,7 @@
 
 
 static void AlterOperatorOwner_internal(Relation rel, Oid operOid, Oid newOwnerId);
+static void AlterOperatorNamespace_internal(Relation rel, Oid operOid, Oid nspOid);
 
 /*
  * DefineOperator
@@ -458,18 +459,6 @@ AlterOperatorOwner_internal(Relation rel, Oid operOid, Oid newOwnerId)
  * Execute ALTER OPERATOR SET SCHEMA
  */
 void
-AlterOperatorNamespace_oid(Oid operOid, Oid newNspOid)
-{
-	Relation	rel;
-
-	rel = heap_open(OperatorRelationId, RowExclusiveLock);
-
-	AlterOperatorOwner_internal(rel, operOid, newNspOid);
-
-	heap_close(rel, NoLock);
-}
-
-void
 AlterOperatorNamespace(List *names, List *argtypes, const char *newschema)
 {
 	List	   *operatorName = names;
@@ -494,6 +483,18 @@ AlterOperatorNamespace(List *names, List *argtypes, const char *newschema)
 }
 
 void
+AlterOperatorNamespace_oid(Oid operOid, Oid newNspOid)
+{
+	Relation	rel;
+
+	rel = heap_open(OperatorRelationId, RowExclusiveLock);
+
+	AlterOperatorNamespace_internal(rel, operOid, newNspOid);
+
+	heap_close(rel, NoLock);
+}
+
+static void
 AlterOperatorNamespace_internal(Relation rel, Oid operOid, Oid nspOid)
 {
 	Form_pg_operator oprForm;
diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c
index aa309be..e441038 100644
--- a/src/backend/commands/tsearchcmds.c
+++ b/src/backend/commands/tsearchcmds.c
@@ -52,6 +52,14 @@ static void MakeConfigurationMapping(AlterTSConfigurationStmt *stmt,
 						 HeapTuple tup, Relation relMap);
 static void DropConfigurationMapping(AlterTSConfigurationStmt *stmt,
 						 HeapTuple tup, Relation relMap);
+static void AlterTSParserNamespace_internal(Relation rel, Oid prsId,
+								Oid nspOid);
+static void AlterTSDictionaryNamespace_internal(Relation rel, Oid dictId,
+									Oid nspOid);
+static void AlterTSTemplateNamespace_internal(Relation rel, Oid tmplId,
+								  Oid nspOid);
+static void AlterTSConfigurationNamespace_internal(Relation rel, Oid cfgId,
+									   Oid nspOid);
 
 
 /* --------------------- TS Parser commands ------------------------ */
@@ -426,7 +434,7 @@ AlterTSParserNamespace_oid(Oid prsId, Oid newNspOid)
 	heap_close(rel, NoLock);
 }
 
-void
+static void
 AlterTSParserNamespace_internal(Relation rel, Oid prsId, Oid nspOid)
 {
 	HeapTuple	tup;
diff --git a/src/include/catalog/namespace.h b/src/include/catalog/namespace.h
index c6672e9..16d5763 100644
--- a/src/include/catalog/namespace.h
+++ b/src/include/catalog/namespace.h
@@ -94,6 +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 Oid	QualifiedNameGetCreationNamespace(List *names, char **objname_p);
 extern RangeVar *makeRangeVarFromNameList(List *names);
 extern char *NameListToString(List *names);
diff --git a/src/include/catalog/pg_namespace.h b/src/include/catalog/pg_namespace.h
index b8bed97..1d866d4 100644
--- a/src/include/catalog/pg_namespace.h
+++ b/src/include/catalog/pg_namespace.h
@@ -78,7 +78,5 @@ DESCR("standard public schema");
  * prototypes for functions in pg_namespace.c
  */
 extern Oid	NamespaceCreate(const char *nspName, Oid ownerId);
-extern void CheckSetNamespace(Oid oldNspOid, Oid nspOid,
-							  const char *name, const char *objtype);
 
 #endif   /* PG_NAMESPACE_H */
diff --git a/src/include/commands/conversioncmds.h b/src/include/commands/conversioncmds.h
index 7cd96fa..b315a54 100644
--- a/src/include/commands/conversioncmds.h
+++ b/src/include/commands/conversioncmds.h
@@ -16,7 +16,6 @@
 #define CONVERSIONCMDS_H
 
 #include "nodes/parsenodes.h"
-#include "utils/relcache.h"
 
 extern void CreateConversionCommand(CreateConversionStmt *parsetree);
 extern void DropConversionsCommand(DropStmt *drop);
@@ -25,7 +24,6 @@ extern void AlterConversionOwner(List *name, Oid newOwnerId);
 extern void AlterConversionOwner_oid(Oid conversionOid, Oid newOwnerId);
 extern void AlterConversionNamespace(List *name, const char *newschema);
 extern void AlterConversionNamespace_oid(Oid conversionOid, Oid newNspOid);
-extern void AlterConversionNamespace_internal(Relation rel, Oid conversionOid, Oid nspOid);
 
 
 #endif   /* CONVERSIONCMDS_H */
diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h
index e2153ba..584ef90 100644
--- a/src/include/commands/defrem.h
+++ b/src/include/commands/defrem.h
@@ -14,9 +14,7 @@
 #ifndef DEFREM_H
 #define DEFREM_H
 
-#include "access/htup.h"
 #include "nodes/parsenodes.h"
-#include "utils/relcache.h"
 
 
 /* commands/indexcmds.c */
@@ -83,7 +81,6 @@ extern Oid get_opclass_oid(Oid amID, List *opclassname, bool missing_ok);
 extern Oid get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok);
 extern void AlterOperatorNamespace_oid(Oid operOid, Oid newNspOid);
 extern void AlterOperatorNamespace(List *names, List *argtypes, const char *newschema);
-extern void AlterOperatorNamespace_internal(Relation rel, Oid operoid, Oid nspOid);
 
 /* commands/aggregatecmds.c */
 extern void DefineAggregate(List *name, List *args, bool oldstyle,
@@ -108,13 +105,11 @@ extern void AlterOpClassOwner(List *name, const char *access_method, Oid newOwne
 extern void AlterOpClassOwner_oid(Oid opclassOid, Oid newOwnerId);
 extern void AlterOpClassNamespace(List *name, List *argam, const char *newschema);
 extern void AlterOpClassNamespace_oid(Oid opclassOid, Oid newNspOid);
-extern void AlterOpClassNamespace_internal(Relation rel, HeapTuple tup, Oid nspOid);
 extern void AlterOpFamilyOwner(List *name, const char *access_method, Oid newOwnerId);
 extern void AlterOpFamilyOwner_oid(Oid opfamilyOid, Oid newOwnerId);
 extern Oid get_am_oid(const char *amname, bool missing_ok);
 extern void AlterOpFamilyNamespace(List *name, List *argam, const char *newschema);
 extern void AlterOpFamilyNamespace_oid(Oid opfamilyOid, Oid newNspOid);
-extern void AlterOpFamilyNamespace_internal(Relation rel, HeapTuple tup, Oid nspOid);
 
 /* commands/tsearchcmds.c */
 extern void DefineTSParser(List *names, List *parameters);
@@ -123,7 +118,6 @@ extern void RemoveTSParsers(DropStmt *drop);
 extern void RemoveTSParserById(Oid prsId);
 extern void AlterTSParserNamespace(List *name, const char *newschema);
 extern void AlterTSParserNamespace_oid(Oid prsId, Oid newNspOid);
-extern void AlterTSParserNamespace_internal(Relation rel, Oid prsId, Oid nspOid);
 
 extern void DefineTSDictionary(List *names, List *parameters);
 extern void RenameTSDictionary(List *oldname, const char *newname);
@@ -133,13 +127,11 @@ extern void AlterTSDictionary(AlterTSDictionaryStmt *stmt);
 extern void AlterTSDictionaryOwner(List *name, Oid newOwnerId);
 extern void AlterTSDictionaryNamespace(List *name, const char *newschema);
 extern void AlterTSDictionaryNamespace_oid(Oid dictId, Oid newNspOid);
-extern void AlterTSDictionaryNamespace_internal(Relation rel, Oid dictId, Oid nspOid);
 
 extern void DefineTSTemplate(List *names, List *parameters);
 extern void RenameTSTemplate(List *oldname, const char *newname);
 extern void AlterTSTemplateNamespace(List *name, const char *newschema);
 extern void AlterTSTemplateNamespace_oid(Oid tmplId, Oid newNspOid);
-extern void AlterTSTemplateNamespace_internal(Relation rel, Oid tmplId, Oid nspOid);
 extern void RemoveTSTemplates(DropStmt *stmt);
 extern void RemoveTSTemplateById(Oid tmplId);
 
@@ -147,7 +139,6 @@ extern void DefineTSConfiguration(List *names, List *parameters);
 extern void RenameTSConfiguration(List *oldname, const char *newname);
 extern void AlterTSConfigurationNamespace(List *name, const char *newschema);
 extern void AlterTSConfigurationNamespace_oid(Oid cfgId, Oid newNspOid);
-extern void AlterTSConfigurationNamespace_internal(Relation rel, Oid cfgId, Oid nspOid);
 extern void RemoveTSConfigurations(DropStmt *stmt);
 extern void RemoveTSConfigurationById(Oid cfgId);
 extern void AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
-- 
1.7.1

