summaryrefslogtreecommitdiff
path: root/src/backend/catalog/namespace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/catalog/namespace.c')
-rw-r--r--src/backend/catalog/namespace.c258
1 files changed, 125 insertions, 133 deletions
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index dc627e42880..0cafa9f9faf 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -13,7 +13,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.78 2005/10/06 22:43:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.79 2005/10/15 02:49:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -108,7 +108,7 @@ static bool namespaceSearchPathValid = true;
* command is first executed). Thereafter it's the OID of the temp namespace.
*
* myTempNamespaceSubID shows whether we've created the TEMP namespace in the
- * current subtransaction. The flag propagates up the subtransaction tree,
+ * current subtransaction. The flag propagates up the subtransaction tree,
* so the main transaction will correctly recognize the flag if all
* intermediate subtransactions commit. When it is InvalidSubTransactionId,
* we either haven't made the TEMP namespace yet, or have successfully
@@ -225,7 +225,7 @@ RangeVarGetCreationNamespace(const RangeVar *newRelation)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cross-database references are not implemented: \"%s.%s.%s\"",
- newRelation->catalogname, newRelation->schemaname,
+ newRelation->catalogname, newRelation->schemaname,
newRelation->relname)));
}
@@ -235,7 +235,7 @@ RangeVarGetCreationNamespace(const RangeVar *newRelation)
if (newRelation->schemaname)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
- errmsg("temporary tables may not specify a schema name")));
+ errmsg("temporary tables may not specify a schema name")));
/* Initialize temp namespace if first time through */
if (!OidIsValid(myTempNamespace))
InitTempTableNamespace();
@@ -246,7 +246,7 @@ RangeVarGetCreationNamespace(const RangeVar *newRelation)
{
/* use exact schema given */
namespaceId = GetSysCacheOid(NAMESPACENAME,
- CStringGetDatum(newRelation->schemaname),
+ CStringGetDatum(newRelation->schemaname),
0, 0, 0);
if (!OidIsValid(namespaceId))
ereport(ERROR,
@@ -322,9 +322,9 @@ RelationIsVisible(Oid relid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
relnamespace = relform->relnamespace;
if (relnamespace != PG_CATALOG_NAMESPACE &&
@@ -333,9 +333,9 @@ RelationIsVisible(Oid relid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another relation of the same name earlier in the
- * path. So we must do a slow check for conflicting relations.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another relation of the same name earlier in the path. So
+ * we must do a slow check for conflicting relations.
*/
char *relname = NameStr(relform->relname);
ListCell *l;
@@ -420,9 +420,9 @@ TypeIsVisible(Oid typid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
typnamespace = typform->typnamespace;
if (typnamespace != PG_CATALOG_NAMESPACE &&
@@ -431,9 +431,9 @@ TypeIsVisible(Oid typid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another type of the same name earlier in the path.
- * So we must do a slow check for conflicting types.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another type of the same name earlier in the path. So we
+ * must do a slow check for conflicting types.
*/
char *typname = NameStr(typform->typname);
ListCell *l;
@@ -545,14 +545,14 @@ FuncnameGetCandidates(List *names, int nargs)
/*
* Okay, it's in the search path, but does it have the same
- * arguments as something we already accepted? If so, keep
- * only the one that appears earlier in the search path.
+ * arguments as something we already accepted? If so, keep only
+ * the one that appears earlier in the search path.
*
* If we have an ordered list from SearchSysCacheList (the normal
- * case), then any conflicting proc must immediately adjoin
- * this one in the list, so we only need to look at the newest
- * result item. If we have an unordered list, we have to scan
- * the whole result list.
+ * case), then any conflicting proc must immediately adjoin this
+ * one in the list, so we only need to look at the newest result
+ * item. If we have an unordered list, we have to scan the whole
+ * result list.
*/
if (resultList)
{
@@ -575,9 +575,9 @@ FuncnameGetCandidates(List *names, int nargs)
prevResult = prevResult->next)
{
if (pronargs == prevResult->nargs &&
- memcmp(procform->proargtypes.values,
- prevResult->args,
- pronargs * sizeof(Oid)) == 0)
+ memcmp(procform->proargtypes.values,
+ prevResult->args,
+ pronargs * sizeof(Oid)) == 0)
break;
}
}
@@ -640,9 +640,9 @@ FunctionIsVisible(Oid funcid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
pronamespace = procform->pronamespace;
if (pronamespace != PG_CATALOG_NAMESPACE &&
@@ -651,10 +651,10 @@ FunctionIsVisible(Oid funcid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another proc of the same name and arguments
- * earlier in the path. So we must do a slow check to see if this
- * is the same proc that would be found by FuncnameGetCandidates.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another proc of the same name and arguments earlier in
+ * the path. So we must do a slow check to see if this is the same
+ * proc that would be found by FuncnameGetCandidates.
*/
char *proname = NameStr(procform->proname);
int nargs = procform->pronargs;
@@ -733,13 +733,12 @@ OpernameGetCandidates(List *names, char oprkind)
/*
* In typical scenarios, most if not all of the operators found by the
- * catcache search will end up getting returned; and there can be
- * quite a few, for common operator names such as '=' or '+'. To
- * reduce the time spent in palloc, we allocate the result space as an
- * array large enough to hold all the operators. The original coding
- * of this routine did a separate palloc for each operator, but
- * profiling revealed that the pallocs used an unreasonably large
- * fraction of parsing time.
+ * catcache search will end up getting returned; and there can be quite a
+ * few, for common operator names such as '=' or '+'. To reduce the time
+ * spent in palloc, we allocate the result space as an array large enough
+ * to hold all the operators. The original coding of this routine did a
+ * separate palloc for each operator, but profiling revealed that the
+ * pallocs used an unreasonably large fraction of parsing time.
*/
#define SPACE_PER_OP MAXALIGN(sizeof(struct _FuncCandidateList) + sizeof(Oid))
@@ -780,14 +779,14 @@ OpernameGetCandidates(List *names, char oprkind)
/*
* Okay, it's in the search path, but does it have the same
- * arguments as something we already accepted? If so, keep
- * only the one that appears earlier in the search path.
+ * arguments as something we already accepted? If so, keep only
+ * the one that appears earlier in the search path.
*
* If we have an ordered list from SearchSysCacheList (the normal
- * case), then any conflicting oper must immediately adjoin
- * this one in the list, so we only need to look at the newest
- * result item. If we have an unordered list, we have to scan
- * the whole result list.
+ * case), then any conflicting oper must immediately adjoin this
+ * one in the list, so we only need to look at the newest result
+ * item. If we have an unordered list, we have to scan the whole
+ * result list.
*/
if (resultList)
{
@@ -870,9 +869,9 @@ OperatorIsVisible(Oid oprid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
oprnamespace = oprform->oprnamespace;
if (oprnamespace != PG_CATALOG_NAMESPACE &&
@@ -881,11 +880,10 @@ OperatorIsVisible(Oid oprid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another operator of the same name and arguments
- * earlier in the path. So we must do a slow check to see if this
- * is the same operator that would be found by
- * OpernameGetCandidates.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another operator of the same name and arguments earlier
+ * in the path. So we must do a slow check to see if this is the same
+ * operator that would be found by OpernameGetCandidates.
*/
char *oprname = NameStr(oprform->oprname);
FuncCandidateList clist;
@@ -956,15 +954,14 @@ OpclassGetCandidates(Oid amid)
continue; /* opclass is not in search path */
/*
- * Okay, it's in the search path, but does it have the same name
- * as something we already accepted? If so, keep only the one
- * that appears earlier in the search path.
+ * Okay, it's in the search path, but does it have the same name as
+ * something we already accepted? If so, keep only the one that
+ * appears earlier in the search path.
*
- * If we have an ordered list from SearchSysCacheList (the normal
- * case), then any conflicting opclass must immediately adjoin
- * this one in the list, so we only need to look at the newest
- * result item. If we have an unordered list, we have to scan the
- * whole result list.
+ * If we have an ordered list from SearchSysCacheList (the normal case),
+ * then any conflicting opclass must immediately adjoin this one in
+ * the list, so we only need to look at the newest result item. If we
+ * have an unordered list, we have to scan the whole result list.
*/
if (resultList)
{
@@ -1083,9 +1080,9 @@ OpclassIsVisible(Oid opcid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
opcnamespace = opcform->opcnamespace;
if (opcnamespace != PG_CATALOG_NAMESPACE &&
@@ -1094,10 +1091,10 @@ OpclassIsVisible(Oid opcid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another opclass of the same name earlier in the
- * path. So we must do a slow check to see if this opclass would
- * be found by OpclassnameGetOpcid.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another opclass of the same name earlier in the path. So
+ * we must do a slow check to see if this opclass would be found by
+ * OpclassnameGetOpcid.
*/
char *opcname = NameStr(opcform->opcname);
@@ -1164,9 +1161,9 @@ ConversionIsVisible(Oid conid)
recomputeNamespacePath();
/*
- * Quick check: if it ain't in the path at all, it ain't visible.
- * Items in the system namespace are surely in the path and so we
- * needn't even do list_member_oid() for them.
+ * Quick check: if it ain't in the path at all, it ain't visible. Items in
+ * the system namespace are surely in the path and so we needn't even do
+ * list_member_oid() for them.
*/
connamespace = conform->connamespace;
if (connamespace != PG_CATALOG_NAMESPACE &&
@@ -1175,10 +1172,10 @@ ConversionIsVisible(Oid conid)
else
{
/*
- * If it is in the path, it might still not be visible; it could
- * be hidden by another conversion of the same name earlier in the
- * path. So we must do a slow check to see if this conversion
- * would be found by ConversionGetConid.
+ * If it is in the path, it might still not be visible; it could be
+ * hidden by another conversion of the same name earlier in the path.
+ * So we must do a slow check to see if this conversion would be found
+ * by ConversionGetConid.
*/
char *conname = NameStr(conform->conname);
@@ -1226,14 +1223,14 @@ DeconstructQualifiedName(List *names,
if (strcmp(catalogname, get_database_name(MyDatabaseId)) != 0)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("cross-database references are not implemented: %s",
- NameListToString(names))));
+ errmsg("cross-database references are not implemented: %s",
+ NameListToString(names))));
break;
default:
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("improper qualified name (too many dotted names): %s",
- NameListToString(names))));
+ errmsg("improper qualified name (too many dotted names): %s",
+ NameListToString(names))));
break;
}
@@ -1373,8 +1370,8 @@ makeRangeVarFromNameList(List *names)
default:
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("improper relation name (too many dotted names): %s",
- NameListToString(names))));
+ errmsg("improper relation name (too many dotted names): %s",
+ NameListToString(names))));
break;
}
@@ -1574,7 +1571,7 @@ FindDefaultConversionProc(int4 for_encoding, int4 to_encoding)
static void
recomputeNamespacePath(void)
{
- Oid roleid = GetUserId();
+ Oid roleid = GetUserId();
char *rawname;
List *namelist;
List *oidlist;
@@ -1602,9 +1599,9 @@ recomputeNamespacePath(void)
/*
* Convert the list of names to a list of OIDs. If any names are not
- * recognizable or we don't have read access, just leave them out of
- * the list. (We can't raise an error, since the search_path setting
- * has already been accepted.) Don't make duplicate entries, either.
+ * recognizable or we don't have read access, just leave them out of the
+ * list. (We can't raise an error, since the search_path setting has
+ * already been accepted.) Don't make duplicate entries, either.
*/
oidlist = NIL;
foreach(l, namelist)
@@ -1659,8 +1656,8 @@ recomputeNamespacePath(void)
firstNS = linitial_oid(oidlist);
/*
- * Add any implicitly-searched namespaces to the list. Note these go
- * on the front, not the back; also notice that we do not check USAGE
+ * Add any implicitly-searched namespaces to the list. Note these go on
+ * the front, not the back; also notice that we do not check USAGE
* permissions for these.
*/
if (!list_member_oid(oidlist, PG_CATALOG_NAMESPACE))
@@ -1675,8 +1672,8 @@ recomputeNamespacePath(void)
oidlist = lcons_oid(mySpecialNamespace, oidlist);
/*
- * Now that we've successfully built the new list of namespace OIDs,
- * save it in permanent storage.
+ * Now that we've successfully built the new list of namespace OIDs, save
+ * it in permanent storage.
*/
oldcxt = MemoryContextSwitchTo(TopMemoryContext);
newpath = list_copy(oidlist);
@@ -1717,14 +1714,13 @@ InitTempTableNamespace(void)
/*
* First, do permission check to see if we are authorized to make temp
- * tables. We use a nonstandard error message here since
- * "databasename: permission denied" might be a tad cryptic.
+ * tables. We use a nonstandard error message here since "databasename:
+ * permission denied" might be a tad cryptic.
*
- * Note that ACL_CREATE_TEMP rights are rechecked in
- * pg_namespace_aclmask; that's necessary since current user ID could
- * change during the session. But there's no need to make the
- * namespace in the first place until a temp table creation request is
- * made by someone with appropriate rights.
+ * Note that ACL_CREATE_TEMP rights are rechecked in pg_namespace_aclmask;
+ * that's necessary since current user ID could change during the session.
+ * But there's no need to make the namespace in the first place until a
+ * temp table creation request is made by someone with appropriate rights.
*/
if (pg_database_aclcheck(MyDatabaseId, GetUserId(),
ACL_CREATE_TEMP) != ACLCHECK_OK)
@@ -1741,13 +1737,12 @@ InitTempTableNamespace(void)
if (!OidIsValid(namespaceId))
{
/*
- * First use of this temp namespace in this database; create it.
- * The temp namespaces are always owned by the superuser. We
- * leave their permissions at default --- i.e., no access except
- * to superuser --- to ensure that unprivileged users can't peek
- * at other backends' temp tables. This works because the places
- * that access the temp namespace for my own backend skip
- * permissions checks on it.
+ * First use of this temp namespace in this database; create it. The
+ * temp namespaces are always owned by the superuser. We leave their
+ * permissions at default --- i.e., no access except to superuser ---
+ * to ensure that unprivileged users can't peek at other backends'
+ * temp tables. This works because the places that access the temp
+ * namespace for my own backend skip permissions checks on it.
*/
namespaceId = NamespaceCreate(namespaceName, BOOTSTRAP_SUPERUSERID);
/* Advance command counter to make namespace visible */
@@ -1756,16 +1751,16 @@ InitTempTableNamespace(void)
else
{
/*
- * If the namespace already exists, clean it out (in case the
- * former owner crashed without doing so).
+ * If the namespace already exists, clean it out (in case the former
+ * owner crashed without doing so).
*/
RemoveTempRelations(namespaceId);
}
/*
- * Okay, we've prepared the temp namespace ... but it's not committed
- * yet, so all our work could be undone by transaction rollback. Set
- * flag for AtEOXact_Namespace to know what to do.
+ * Okay, we've prepared the temp namespace ... but it's not committed yet,
+ * so all our work could be undone by transaction rollback. Set flag for
+ * AtEOXact_Namespace to know what to do.
*/
myTempNamespace = namespaceId;
@@ -1784,11 +1779,11 @@ AtEOXact_Namespace(bool isCommit)
{
/*
* If we abort the transaction in which a temp namespace was selected,
- * we'll have to do any creation or cleanout work over again. So,
- * just forget the namespace entirely until next time. On the other
- * hand, if we commit then register an exit callback to clean out the
- * temp tables at backend shutdown. (We only want to register the
- * callback once per session, so this is a good place to do it.)
+ * we'll have to do any creation or cleanout work over again. So, just
+ * forget the namespace entirely until next time. On the other hand, if
+ * we commit then register an exit callback to clean out the temp tables
+ * at backend shutdown. (We only want to register the callback once per
+ * session, so this is a good place to do it.)
*/
if (myTempNamespaceSubID != InvalidSubTransactionId)
{
@@ -1852,9 +1847,9 @@ RemoveTempRelations(Oid tempNamespaceId)
ObjectAddress object;
/*
- * We want to get rid of everything in the target namespace, but not
- * the namespace itself (deleting it only to recreate it later would
- * be a waste of cycles). We do this by finding everything that has a
+ * We want to get rid of everything in the target namespace, but not the
+ * namespace itself (deleting it only to recreate it later would be a
+ * waste of cycles). We do this by finding everything that has a
* dependency on the namespace.
*/
object.classId = NamespaceRelationId;
@@ -1916,15 +1911,13 @@ assign_search_path(const char *newval, bool doit, GucSource source)
/*
* Verify that all the names are either valid namespace names or
* "$user". We do not require $user to correspond to a valid
- * namespace. We do not check for USAGE rights, either; should
- * we?
+ * namespace. We do not check for USAGE rights, either; should we?
*
- * When source == PGC_S_TEST, we are checking the argument of an
- * ALTER DATABASE SET or ALTER USER SET command. It could be that
- * the intended use of the search path is for some other database,
- * so we should not error out if it mentions schemas not present
- * in the current database. We reduce the message to NOTICE
- * instead.
+ * When source == PGC_S_TEST, we are checking the argument of an ALTER
+ * DATABASE SET or ALTER USER SET command. It could be that the
+ * intended use of the search path is for some other database, so we
+ * should not error out if it mentions schemas not present in the
+ * current database. We reduce the message to NOTICE instead.
*/
foreach(l, namelist)
{
@@ -1937,7 +1930,7 @@ assign_search_path(const char *newval, bool doit, GucSource source)
0, 0, 0))
ereport((source == PGC_S_TEST) ? NOTICE : ERROR,
(errcode(ERRCODE_UNDEFINED_SCHEMA),
- errmsg("schema \"%s\" does not exist", curname)));
+ errmsg("schema \"%s\" does not exist", curname)));
}
}
@@ -1945,9 +1938,9 @@ assign_search_path(const char *newval, bool doit, GucSource source)
list_free(namelist);
/*
- * We mark the path as needing recomputation, but don't do anything
- * until it's needed. This avoids trying to do database access during
- * GUC initialization.
+ * We mark the path as needing recomputation, but don't do anything until
+ * it's needed. This avoids trying to do database access during GUC
+ * initialization.
*/
if (doit)
namespaceSearchPathValid = false;
@@ -1967,8 +1960,7 @@ InitializeSearchPath(void)
{
/*
* In bootstrap mode, the search path must be 'pg_catalog' so that
- * tables are created in the proper namespace; ignore the GUC
- * setting.
+ * tables are created in the proper namespace; ignore the GUC setting.
*/
MemoryContext oldcxt;
@@ -1983,8 +1975,8 @@ InitializeSearchPath(void)
else
{
/*
- * In normal mode, arrange for a callback on any syscache
- * invalidation of pg_namespace rows.
+ * In normal mode, arrange for a callback on any syscache invalidation
+ * of pg_namespace rows.
*/
CacheRegisterSyscacheCallback(NAMESPACEOID,
NamespaceCallback,