From 29f8757ab3760a4cbabd701e2925eccb2733aa99 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 3 Nov 2010 14:10:10 -0300 Subject: [PATCH 10/10] Clean up ALTER 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