Standardize get_whatever_oid functions for object types with
authorRobert Haas <rhaas@postgresql.org>
Thu, 5 Aug 2010 14:45:09 +0000 (14:45 +0000)
committerRobert Haas <rhaas@postgresql.org>
Thu, 5 Aug 2010 14:45:09 +0000 (14:45 +0000)
unqualified names.

- Add a missing_ok parameter to get_tablespace_oid.
- Avoid duplicating get_tablespace_od guts in objectNamesToOids.
- Add a missing_ok parameter to get_database_oid.
- Replace get_roleid and get_role_checked with get_role_oid.
- Add get_namespace_oid, get_language_oid, get_am_oid.
- Refactor existing code to use new interfaces.

Thanks to KaiGai Kohei for the review.

25 files changed:
src/backend/catalog/aclchk.c
src/backend/catalog/namespace.c
src/backend/commands/alter.c
src/backend/commands/comment.c
src/backend/commands/dbcommands.c
src/backend/commands/foreigncmds.c
src/backend/commands/indexcmds.c
src/backend/commands/opclasscmds.c
src/backend/commands/proclang.c
src/backend/commands/schemacmds.c
src/backend/commands/tablecmds.c
src/backend/commands/tablespace.c
src/backend/commands/user.c
src/backend/executor/execMain.c
src/backend/libpq/hba.c
src/backend/utils/adt/acl.c
src/backend/utils/adt/dbsize.c
src/backend/utils/cache/lsyscache.c
src/include/catalog/namespace.h
src/include/commands/dbcommands.h
src/include/commands/defrem.h
src/include/commands/proclang.h
src/include/commands/tablespace.h
src/include/utils/acl.h
src/include/utils/lsyscache.h

index 0470a7027390ea2ef704dc609e5bb95779f560e0..bc3985be69f335d27af648c55ffa0d9a49e17ae1 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/catalog/aclchk.c,v 1.168 2010/07/06 19:18:55 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/catalog/aclchk.c,v 1.169 2010/08/05 14:44:58 rhaas Exp $
  *
  * NOTES
  *   See acl.h.
@@ -43,6 +43,8 @@
 #include "catalog/pg_ts_config.h"
 #include "catalog/pg_ts_dict.h"
 #include "commands/dbcommands.h"
+#include "commands/proclang.h"
+#include "commands/tablespace.h"
 #include "foreign/foreign.h"
 #include "miscadmin.h"
 #include "parser/parse_func.h"
@@ -419,7 +421,7 @@ ExecuteGrantStmt(GrantStmt *stmt)
        else
            istmt.grantees =
                lappend_oid(istmt.grantees,
-                           get_roleid_checked(grantee->rolname));
+                           get_role_oid(grantee->rolname, false));
    }
 
    /*
@@ -607,12 +609,7 @@ objectNamesToOids(GrantObjectType objtype, List *objnames)
                char       *dbname = strVal(lfirst(cell));
                Oid         dbid;
 
-               dbid = get_database_oid(dbname);
-               if (!OidIsValid(dbid))
-                   ereport(ERROR,
-                           (errcode(ERRCODE_UNDEFINED_DATABASE),
-                            errmsg("database \"%s\" does not exist",
-                                   dbname)));
+               dbid = get_database_oid(dbname, false);
                objects = lappend_oid(objects, dbid);
            }
            break;
@@ -631,18 +628,10 @@ objectNamesToOids(GrantObjectType objtype, List *objnames)
            foreach(cell, objnames)
            {
                char       *langname = strVal(lfirst(cell));
-               HeapTuple   tuple;
-
-               tuple = SearchSysCache1(LANGNAME, PointerGetDatum(langname));
-               if (!HeapTupleIsValid(tuple))
-                   ereport(ERROR,
-                           (errcode(ERRCODE_UNDEFINED_OBJECT),
-                            errmsg("language \"%s\" does not exist",
-                                   langname)));
+               Oid         oid;
 
-               objects = lappend_oid(objects, HeapTupleGetOid(tuple));
-
-               ReleaseSysCache(tuple);
+               oid = get_language_oid(langname, false);
+               objects = lappend_oid(objects, oid);
            }
            break;
        case ACL_OBJECT_LARGEOBJECT:
@@ -663,49 +652,20 @@ objectNamesToOids(GrantObjectType objtype, List *objnames)
            foreach(cell, objnames)
            {
                char       *nspname = strVal(lfirst(cell));
-               HeapTuple   tuple;
-
-               tuple = SearchSysCache1(NAMESPACENAME,
-                                       CStringGetDatum(nspname));
-               if (!HeapTupleIsValid(tuple))
-                   ereport(ERROR,
-                           (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                            errmsg("schema \"%s\" does not exist",
-                                   nspname)));
-
-               objects = lappend_oid(objects, HeapTupleGetOid(tuple));
+               Oid         oid;
 
-               ReleaseSysCache(tuple);
+               oid = get_namespace_oid(nspname, false);
+               objects = lappend_oid(objects, oid);
            }
            break;
        case ACL_OBJECT_TABLESPACE:
            foreach(cell, objnames)
            {
                char       *spcname = strVal(lfirst(cell));
-               ScanKeyData entry[1];
-               HeapScanDesc scan;
-               HeapTuple   tuple;
-               Relation    relation;
+               Oid         spcoid;
 
-               relation = heap_open(TableSpaceRelationId, AccessShareLock);
-
-               ScanKeyInit(&entry[0],
-                           Anum_pg_tablespace_spcname,
-                           BTEqualStrategyNumber, F_NAMEEQ,
-                           CStringGetDatum(spcname));
-
-               scan = heap_beginscan(relation, SnapshotNow, 1, entry);
-               tuple = heap_getnext(scan, ForwardScanDirection);
-               if (!HeapTupleIsValid(tuple))
-                   ereport(ERROR,
-                           (errcode(ERRCODE_UNDEFINED_OBJECT),
-                      errmsg("tablespace \"%s\" does not exist", spcname)));
-
-               objects = lappend_oid(objects, HeapTupleGetOid(tuple));
-
-               heap_endscan(scan);
-
-               heap_close(relation, AccessShareLock);
+               spcoid = get_tablespace_oid(spcname, false);
+               objects = lappend_oid(objects, spcoid);
            }
            break;
        case ACL_OBJECT_FDW:
@@ -913,7 +873,7 @@ ExecAlterDefaultPrivilegesStmt(AlterDefaultPrivilegesStmt *stmt)
        else
            iacls.grantees =
                lappend_oid(iacls.grantees,
-                           get_roleid_checked(grantee->rolname));
+                           get_role_oid(grantee->rolname, false));
    }
 
    /*
@@ -996,7 +956,7 @@ ExecAlterDefaultPrivilegesStmt(AlterDefaultPrivilegesStmt *stmt)
        {
            char       *rolename = strVal(lfirst(rolecell));
 
-           iacls.roleid = get_roleid_checked(rolename);
+           iacls.roleid = get_role_oid(rolename, false);
 
            /*
             * We insist that calling user be a member of each target role. If
@@ -1037,18 +997,12 @@ SetDefaultACLsInSchemas(InternalDefaultACL *iacls, List *nspnames)
            AclResult   aclresult;
 
            /*
-            * Normally we'd use LookupCreationNamespace here, but it's
-            * important to do the permissions check against the target role
-            * not the calling user, so write it out in full.  We require
-            * CREATE privileges, since without CREATE you won't be able to do
-            * anything using the default privs anyway.
+            * Note that we must do the permissions check against the target
+            * role not the calling user.  We require CREATE privileges,
+            * since without CREATE you won't be able to do anything using the
+            * default privs anyway.
             */
-           iacls->nspid = GetSysCacheOid1(NAMESPACENAME,
-                                          CStringGetDatum(nspname));
-           if (!OidIsValid(iacls->nspid))
-               ereport(ERROR,
-                       (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                        errmsg("schema \"%s\" does not exist", nspname)));
+           iacls->nspid = get_namespace_oid(nspname, false);
 
            aclresult = pg_namespace_aclcheck(iacls->nspid, iacls->roleid,
                                              ACL_CREATE);
index e2e19985506b8ff838caf0f3169c0cb646181a2e..a19e47eb8b4ffa92ba895bd2d616c67aa3abfd24 100644 (file)
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.125 2010/02/26 02:00:36 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/catalog/namespace.c,v 1.126 2010/08/05 14:44:58 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -332,13 +332,7 @@ RangeVarGetCreationNamespace(const RangeVar *newRelation)
            return myTempNamespace;
        }
        /* use exact schema given */
-       namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                  CStringGetDatum(newRelation->schemaname));
-       if (!OidIsValid(namespaceId))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                    errmsg("schema \"%s\" does not exist",
-                           newRelation->schemaname)));
+       namespaceId = get_namespace_oid(newRelation->schemaname, false);
        /* we do not check for USAGE rights here! */
    }
    else
@@ -2270,7 +2264,7 @@ LookupNamespaceNoError(const char *nspname)
        return InvalidOid;
    }
 
-   return GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(nspname));
+   return get_namespace_oid(nspname, true);
 }
 
 /*
@@ -2300,11 +2294,7 @@ LookupExplicitNamespace(const char *nspname)
         */
    }
 
-   namespaceId = GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(nspname));
-   if (!OidIsValid(namespaceId))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                errmsg("schema \"%s\" does not exist", nspname)));
+   namespaceId = get_namespace_oid(nspname, false);
 
    aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_USAGE);
    if (aclresult != ACLCHECK_OK)
@@ -2339,11 +2329,7 @@ LookupCreationNamespace(const char *nspname)
        return myTempNamespace;
    }
 
-   namespaceId = GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(nspname));
-   if (!OidIsValid(namespaceId))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                errmsg("schema \"%s\" does not exist", nspname)));
+   namespaceId = get_namespace_oid(nspname, false);
 
    aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_CREATE);
    if (aclresult != ACLCHECK_OK)
@@ -2385,12 +2371,7 @@ QualifiedNameGetCreationNamespace(List *names, char **objname_p)
            return myTempNamespace;
        }
        /* use exact schema given */
-       namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                     CStringGetDatum(schemaname));
-       if (!OidIsValid(namespaceId))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                    errmsg("schema \"%s\" does not exist", schemaname)));
+       namespaceId = get_namespace_oid(schemaname, false);
        /* we do not check for USAGE rights here! */
    }
    else
@@ -2413,6 +2394,26 @@ QualifiedNameGetCreationNamespace(List *names, char **objname_p)
    return namespaceId;
 }
 
+/*
+ * get_namespace_oid - given a namespace name, look up the OID
+ *
+ * If missing_ok is false, throw an error if namespace name not found.  If
+ * true, just return InvalidOid.
+ */
+Oid
+get_namespace_oid(const char *nspname, bool missing_ok)
+{
+   Oid         oid;
+
+   oid = GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(nspname));
+   if (!OidIsValid(oid) && !missing_ok)
+        ereport(ERROR,
+                (errcode(ERRCODE_UNDEFINED_SCHEMA),
+                 errmsg("schema \"%s\" does not exist", nspname)));
+
+   return oid;
+}
+
 /*
  * makeRangeVarFromNameList
  *     Utility routine to convert a qualified-name list into RangeVar form.
@@ -2897,8 +2898,7 @@ recomputeNamespacePath(void)
                char       *rname;
 
                rname = NameStr(((Form_pg_authid) GETSTRUCT(tuple))->rolname);
-               namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                             CStringGetDatum(rname));
+               namespaceId = get_namespace_oid(rname, true);
                ReleaseSysCache(tuple);
                if (OidIsValid(namespaceId) &&
                    !list_member_oid(oidlist, namespaceId) &&
@@ -2925,8 +2925,7 @@ recomputeNamespacePath(void)
        else
        {
            /* normal namespace reference */
-           namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                         CStringGetDatum(curname));
+           namespaceId = get_namespace_oid(curname, true);
            if (OidIsValid(namespaceId) &&
                !list_member_oid(oidlist, namespaceId) &&
                pg_namespace_aclcheck(namespaceId, roleid,
@@ -3033,8 +3032,7 @@ InitTempTableNamespace(void)
 
    snprintf(namespaceName, sizeof(namespaceName), "pg_temp_%d", MyBackendId);
 
-   namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                 CStringGetDatum(namespaceName));
+   namespaceId = get_namespace_oid(namespaceName, true);
    if (!OidIsValid(namespaceId))
    {
        /*
@@ -3066,8 +3064,7 @@ InitTempTableNamespace(void)
    snprintf(namespaceName, sizeof(namespaceName), "pg_toast_temp_%d",
             MyBackendId);
 
-   toastspaceId = GetSysCacheOid1(NAMESPACENAME,
-                                  CStringGetDatum(namespaceName));
+   toastspaceId = get_namespace_oid(namespaceName, true);
    if (!OidIsValid(toastspaceId))
    {
        toastspaceId = NamespaceCreate(namespaceName, BOOTSTRAP_SUPERUSERID);
index edf05b6eaa3430c262149f54998720f9ded3c8c5..498d7b45c43e4729d2cc64c342711b76411d79a6 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.37 2010/07/28 05:22:24 sriggs Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.38 2010/08/05 14:44:58 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -211,7 +211,7 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
 void
 ExecAlterOwnerStmt(AlterOwnerStmt *stmt)
 {
-   Oid         newowner = get_roleid_checked(stmt->newowner);
+   Oid         newowner = get_role_oid(stmt->newowner, false);
 
    switch (stmt->objectType)
    {
index 7fa09c8d2a0ec19bb8749c9fcf44377aa1944cb4..ef7ea0b56f29966de1b637dd7144b67c430783b2 100644 (file)
@@ -7,7 +7,7 @@
  * Copyright (c) 1996-2010, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.115 2010/06/13 17:43:12 rhaas Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.116 2010/08/05 14:44:58 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,6 +42,8 @@
 #include "catalog/pg_type.h"
 #include "commands/comment.h"
 #include "commands/dbcommands.h"
+#include "commands/defrem.h"
+#include "commands/proclang.h"
 #include "commands/tablespace.h"
 #include "libpq/be-fsstubs.h"
 #include "miscadmin.h"
@@ -686,11 +688,10 @@ CommentDatabase(List *qualname, char *comment)
     * of the database.  Erroring out would prevent pg_restore from completing
     * (which is really pg_restore's fault, but for now we will work around
     * the problem here).  Consensus is that the best fix is to treat wrong
-    * database name as a WARNING not an ERROR.
+    * database name as a WARNING not an ERROR (thus, we tell get_database_oid
+    * to ignore the error so that we can handle it differently here).
     */
-
-   /* First get the database OID */
-   oid = get_database_oid(database);
+   oid = get_database_oid(database, true);
    if (!OidIsValid(oid))
    {
        ereport(WARNING,
@@ -729,14 +730,7 @@ CommentTablespace(List *qualname, char *comment)
                 errmsg("tablespace name cannot be qualified")));
    tablespace = strVal(linitial(qualname));
 
-   oid = get_tablespace_oid(tablespace);
-   if (!OidIsValid(oid))
-   {
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("tablespace \"%s\" does not exist", tablespace)));
-       return;
-   }
+   oid = get_tablespace_oid(tablespace, false);
 
    /* Check object security */
    if (!pg_tablespace_ownercheck(oid, GetUserId()))
@@ -766,7 +760,7 @@ CommentRole(List *qualname, char *comment)
                 errmsg("role name cannot be qualified")));
    role = strVal(linitial(qualname));
 
-   oid = get_roleid_checked(role);
+   oid = get_role_oid(role, false);
 
    /* Check object security */
    if (!has_privs_of_role(GetUserId(), oid))
@@ -799,11 +793,7 @@ CommentNamespace(List *qualname, char *comment)
                 errmsg("schema name cannot be qualified")));
    namespace = strVal(linitial(qualname));
 
-   oid = GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(namespace));
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                errmsg("schema \"%s\" does not exist", namespace)));
+   oid = get_namespace_oid(namespace, false);
 
    /* Check object security */
    if (!pg_namespace_ownercheck(oid, GetUserId()))
@@ -1213,11 +1203,7 @@ CommentLanguage(List *qualname, char *comment)
                 errmsg("language name cannot be qualified")));
    language = strVal(linitial(qualname));
 
-   oid = GetSysCacheOid1(LANGNAME, CStringGetDatum(language));
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                errmsg("language \"%s\" does not exist", language)));
+   oid = get_language_oid(language, false);
 
    /* Check object security */
    if (!superuser())
@@ -1254,12 +1240,7 @@ CommentOpClass(List *qualname, List *arguments, char *comment)
    /*
     * Get the access method's OID.
     */
-   amID = GetSysCacheOid1(AMNAME, CStringGetDatum(amname));
-   if (!OidIsValid(amID))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       amname)));
+   amID = get_am_oid(amname, false);
 
    /*
     * Look up the opclass.
@@ -1335,12 +1316,7 @@ CommentOpFamily(List *qualname, List *arguments, char *comment)
    /*
     * Get the access method's OID.
     */
-   amID = GetSysCacheOid1(AMNAME, CStringGetDatum(amname));
-   if (!OidIsValid(amID))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       amname)));
+   amID = get_am_oid(amname, false);
 
    /*
     * Look up the opfamily.
index e629b9ab24874dc95f9879de011170b3dc2fdae7..e9caeb05e8cddaa2a726b7ed40a73e4f3a900e05 100644 (file)
@@ -13,7 +13,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.236 2010/07/20 18:14:16 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.237 2010/08/05 14:45:00 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -255,7 +255,7 @@ createdb(const CreatedbStmt *stmt)
 
    /* obtain OID of proposed owner */
    if (dbowner)
-       datdba = get_roleid_checked(dbowner);
+       datdba = get_role_oid(dbowner, false);
    else
        datdba = GetUserId();
 
@@ -429,12 +429,7 @@ createdb(const CreatedbStmt *stmt)
        AclResult   aclresult;
 
        tablespacename = strVal(dtablespacename->arg);
-       dst_deftablespace = get_tablespace_oid(tablespacename);
-       if (!OidIsValid(dst_deftablespace))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("tablespace \"%s\" does not exist",
-                           tablespacename)));
+       dst_deftablespace = get_tablespace_oid(tablespacename, false);
        /* check permissions */
        aclresult = pg_tablespace_aclcheck(dst_deftablespace, GetUserId(),
                                           ACL_CREATE);
@@ -491,7 +486,7 @@ createdb(const CreatedbStmt *stmt)
     * message than "unique index violation".  There's a race condition but
     * we're willing to accept the less friendly message in that case.
     */
-   if (OidIsValid(get_database_oid(dbname)))
+   if (OidIsValid(get_database_oid(dbname, true)))
        ereport(ERROR,
                (errcode(ERRCODE_DUPLICATE_DATABASE),
                 errmsg("database \"%s\" already exists", dbname)));
@@ -919,7 +914,7 @@ RenameDatabase(const char *oldname, const char *newname)
     * Make sure the new name doesn't exist.  See notes for same error in
     * CREATE DATABASE.
     */
-   if (OidIsValid(get_database_oid(newname)))
+   if (OidIsValid(get_database_oid(newname, true)))
        ereport(ERROR,
                (errcode(ERRCODE_DUPLICATE_DATABASE),
                 errmsg("database \"%s\" already exists", newname)));
@@ -1030,11 +1025,7 @@ movedb(const char *dbname, const char *tblspcname)
    /*
     * Get tablespace's oid
     */
-   dst_tblspcoid = get_tablespace_oid(tblspcname);
-   if (dst_tblspcoid == InvalidOid)
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_DATABASE),
-                errmsg("tablespace \"%s\" does not exist", tblspcname)));
+   dst_tblspcoid = get_tablespace_oid(tblspcname, false);
 
    /*
     * Permission checks
@@ -1402,12 +1393,7 @@ AlterDatabase(AlterDatabaseStmt *stmt, bool isTopLevel)
 void
 AlterDatabaseSet(AlterDatabaseSetStmt *stmt)
 {
-   Oid         datid = get_database_oid(stmt->dbname);
-
-   if (!OidIsValid(datid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_DATABASE),
-                errmsg("database \"%s\" does not exist", stmt->dbname)));
+   Oid         datid = get_database_oid(stmt->dbname, false);
 
    /*
     * Obtain a lock on the database and make sure it didn't go away in the
@@ -1818,10 +1804,11 @@ errdetail_busy_db(int notherbackends, int npreparedxacts)
 /*
  * get_database_oid - given a database name, look up the OID
  *
- * Returns InvalidOid if database name not found.
+ * If missing_ok is false, throw an error if database name not found.  If
+ * true, just return InvalidOid.
  */
 Oid
-get_database_oid(const char *dbname)
+get_database_oid(const char *dbname, bool missing_ok)
 {
    Relation    pg_database;
    ScanKeyData entry[1];
@@ -1852,6 +1839,12 @@ get_database_oid(const char *dbname)
    systable_endscan(scan);
    heap_close(pg_database, AccessShareLock);
 
+   if (!OidIsValid(oid) && !missing_ok)
+        ereport(ERROR,
+                (errcode(ERRCODE_UNDEFINED_DATABASE),
+                 errmsg("database \"%s\" does not exist",
+                        dbname)));
+
    return oid;
 }
 
index abbe731b14ce00e048d05fbd44775db48d3430a2..08593f0a488359b0a45423f072db73956cc56d9c 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/foreigncmds.c,v 1.11 2010/02/14 18:42:14 rhaas Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/foreigncmds.c,v 1.12 2010/08/05 14:45:00 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -184,7 +184,7 @@ GetUserOidFromMapping(const char *username, bool missing_ok)
        return GetUserId();
 
    /* map to provided user */
-   return missing_ok ? get_roleid(username) : get_roleid_checked(username);
+   return get_role_oid(username, missing_ok);
 }
 
 
index 780dbc23ede48c205ba6b0b1113ffaa5a339a953..e1ae6b2a13c3c55f3cd8951611a641ab7ce5153e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.198 2010/07/06 19:18:56 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.199 2010/08/05 14:45:00 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -218,12 +218,7 @@ DefineIndex(RangeVar *heapRelation,
     */
    if (tableSpaceName)
    {
-       tablespaceId = get_tablespace_oid(tableSpaceName);
-       if (!OidIsValid(tablespaceId))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("tablespace \"%s\" does not exist",
-                           tableSpaceName)));
+       tablespaceId = get_tablespace_oid(tableSpaceName, false);
    }
    else
    {
index 34f72a2a993c812661117c8d898afae9b48df3d1..478525c8d5080e6518a827237959307dc9f966ab 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.69 2010/07/16 00:13:23 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.70 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -641,7 +641,6 @@ DefineOpFamily(CreateOpFamilyStmt *stmt)
    char       *opfname;        /* name of opfamily we're creating */
    Oid         amoid,          /* our AM's oid */
                namespaceoid;   /* namespace to create opfamily in */
-   HeapTuple   tup;
    AclResult   aclresult;
 
    /* Convert list of names to a name and namespace */
@@ -654,20 +653,11 @@ DefineOpFamily(CreateOpFamilyStmt *stmt)
        aclcheck_error(aclresult, ACL_KIND_NAMESPACE,
                       get_namespace_name(namespaceoid));
 
-   /* Get necessary info about access method */
-   tup = SearchSysCache1(AMNAME, CStringGetDatum(stmt->amname));
-   if (!HeapTupleIsValid(tup))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       stmt->amname)));
-
-   amoid = HeapTupleGetOid(tup);
+   /* Get access method OID, throwing an error if it doesn't exist. */
+   amoid = get_am_oid(stmt->amname, false);
 
    /* XXX Should we make any privilege check against the AM? */
 
-   ReleaseSysCache(tup);
-
    /*
     * Currently, we require superuser privileges to create an opfamily. See
     * comments in DefineOpClass.
@@ -1427,12 +1417,7 @@ RemoveOpClass(RemoveOpClassStmt *stmt)
    /*
     * Get the access method's OID.
     */
-   amID = GetSysCacheOid1(AMNAME, CStringGetDatum(stmt->amname));
-   if (!OidIsValid(amID))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       stmt->amname)));
+   amID = get_am_oid(stmt->amname, false);
 
    /*
     * Look up the opclass.
@@ -1488,12 +1473,7 @@ RemoveOpFamily(RemoveOpFamilyStmt *stmt)
    /*
     * Get the access method's OID.
     */
-   amID = GetSysCacheOid1(AMNAME, CStringGetDatum(stmt->amname));
-   if (!OidIsValid(amID))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       stmt->amname)));
+   amID = get_am_oid(stmt->amname, false);
 
    /*
     * Look up the opfamily.
@@ -1650,12 +1630,7 @@ RenameOpClass(List *name, const char *access_method, const char *newname)
    Relation    rel;
    AclResult   aclresult;
 
-   amOid = GetSysCacheOid1(AMNAME, CStringGetDatum(access_method));
-   if (!OidIsValid(amOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       access_method)));
+   amOid = get_am_oid(access_method, false);
 
    rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
 
@@ -1744,12 +1719,7 @@ RenameOpFamily(List *name, const char *access_method, const char *newname)
    Relation    rel;
    AclResult   aclresult;
 
-   amOid = GetSysCacheOid1(AMNAME, CStringGetDatum(access_method));
-   if (!OidIsValid(amOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       access_method)));
+   amOid = get_am_oid(access_method, false);
 
    rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
 
@@ -1835,12 +1805,7 @@ AlterOpClassOwner(List *name, const char *access_method, Oid newOwnerId)
    char       *opcname;
    char       *schemaname;
 
-   amOid = GetSysCacheOid1(AMNAME, CStringGetDatum(access_method));
-   if (!OidIsValid(amOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       access_method)));
+   amOid = get_am_oid(access_method, false);
 
    rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
 
@@ -1978,12 +1943,7 @@ AlterOpFamilyOwner(List *name, const char *access_method, Oid newOwnerId)
    char       *opfname;
    char       *schemaname;
 
-   amOid = GetSysCacheOid1(AMNAME, CStringGetDatum(access_method));
-   if (!OidIsValid(amOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("access method \"%s\" does not exist",
-                       access_method)));
+   amOid = get_am_oid(access_method, false);
 
    rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
 
@@ -2108,3 +2068,22 @@ AlterOpFamilyOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
                                newOwnerId);
    }
 }
+
+/*
+ * get_am_oid - given an access method name, look up the OID
+ *
+ * If missing_ok is false, throw an error if access method not found.  If
+ * true, just return InvalidOid.
+ */
+Oid
+get_am_oid(const char *amname, bool missing_ok)
+{
+   Oid         oid;
+
+   oid = GetSysCacheOid1(AMNAME, CStringGetDatum(amname));
+   if (!OidIsValid(oid) && !missing_ok)
+       ereport(ERROR,
+               (errcode(ERRCODE_UNDEFINED_OBJECT),
+                errmsg("access method \"%s\" does not exist", amname)));
+   return oid;
+}
index 8292ae1f77722dba3ef528d179fc904008853823..4fcc9dd8098fe0d6443c9ff104ede642e400e09a 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/proclang.c,v 1.91 2010/02/26 02:00:39 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/proclang.c,v 1.92 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -514,7 +514,7 @@ void
 DropProceduralLanguage(DropPLangStmt *stmt)
 {
    char       *languageName;
-   HeapTuple   langTup;
+   Oid         oid;
    ObjectAddress object;
 
    /*
@@ -522,34 +522,26 @@ DropProceduralLanguage(DropPLangStmt *stmt)
     */
    languageName = case_translate_language_name(stmt->plname);
 
-   langTup = SearchSysCache1(LANGNAME, CStringGetDatum(languageName));
-   if (!HeapTupleIsValid(langTup))
+   oid = get_language_oid(languageName, stmt->missing_ok);
+   if (!OidIsValid(oid))
    {
-       if (!stmt->missing_ok)
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("language \"%s\" does not exist", languageName)));
-       else
-           ereport(NOTICE,
-                   (errmsg("language \"%s\" does not exist, skipping",
-                           languageName)));
-
+       ereport(NOTICE,
+               (errmsg("language \"%s\" does not exist, skipping",
+                       languageName)));
        return;
    }
 
    /*
     * Check permission
     */
-   if (!pg_language_ownercheck(HeapTupleGetOid(langTup), GetUserId()))
+   if (!pg_language_ownercheck(oid, GetUserId()))
        aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_LANGUAGE,
                       languageName);
 
    object.classId = LanguageRelationId;
-   object.objectId = HeapTupleGetOid(langTup);
+   object.objectId = oid;
    object.objectSubId = 0;
 
-   ReleaseSysCache(langTup);
-
    /*
     * Do the deletion
     */
@@ -735,3 +727,22 @@ AlterLanguageOwner_internal(HeapTuple tup, Relation rel, Oid newOwnerId)
                                newOwnerId);
    }
 }
+
+/*
+ * get_language_oid - given a language name, look up the OID
+ *
+ * If missing_ok is false, throw an error if language name not found.  If
+ * true, just return InvalidOid.
+ */
+Oid
+get_language_oid(const char *langname, bool missing_ok)
+{
+   Oid         oid;
+
+   oid = GetSysCacheOid1(LANGNAME, CStringGetDatum(langname));
+   if (!OidIsValid(oid) && !missing_ok)
+       ereport(ERROR,
+               (errcode(ERRCODE_UNDEFINED_OBJECT),
+                errmsg("language \"%s\" does not exist", langname)));
+   return oid;
+}
index b30fdce73d09b5dc9a6c7fe57c6527e3b3b4eb28..f678cda9024fde848708e72641490e6adbceeafe 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/schemacmds.c,v 1.57 2010/02/26 02:00:39 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/schemacmds.c,v 1.58 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,7 +57,7 @@ CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString)
     * Who is supposed to own the new schema?
     */
    if (authId)
-       owner_uid = get_roleid_checked(authId);
+       owner_uid = get_role_oid(authId, false);
    else
        owner_uid = saved_uid;
 
@@ -178,24 +178,13 @@ RemoveSchemas(DropStmt *drop)
                     errmsg("schema name cannot be qualified")));
        namespaceName = strVal(linitial(names));
 
-       namespaceId = GetSysCacheOid1(NAMESPACENAME,
-                                     CStringGetDatum(namespaceName));
+       namespaceId = get_namespace_oid(namespaceName, drop->missing_ok);
 
        if (!OidIsValid(namespaceId))
        {
-           if (!drop->missing_ok)
-           {
-               ereport(ERROR,
-                       (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                        errmsg("schema \"%s\" does not exist",
-                               namespaceName)));
-           }
-           else
-           {
-               ereport(NOTICE,
-                       (errmsg("schema \"%s\" does not exist, skipping",
-                               namespaceName)));
-           }
+           ereport(NOTICE,
+                   (errmsg("schema \"%s\" does not exist, skipping",
+                           namespaceName)));
            continue;
        }
 
@@ -264,9 +253,7 @@ RenameSchema(const char *oldname, const char *newname)
                 errmsg("schema \"%s\" does not exist", oldname)));
 
    /* make sure the new name doesn't exist */
-   if (HeapTupleIsValid(
-                        SearchSysCache1(NAMESPACENAME,
-                                        CStringGetDatum(newname))))
+   if (OidIsValid(get_namespace_oid(newname, true)))
        ereport(ERROR,
                (errcode(ERRCODE_DUPLICATE_SCHEMA),
                 errmsg("schema \"%s\" already exists", newname)));
index 2ab1cbedc7b56ea608f42ecce18926edae2496d1..221e6417eb314cc3c916039d94abdbe3567a4c3e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.338 2010/08/03 15:47:02 rhaas Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.339 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -414,12 +414,7 @@ DefineRelation(CreateStmt *stmt, char relkind)
     */
    if (stmt->tablespacename)
    {
-       tablespaceId = get_tablespace_oid(stmt->tablespacename);
-       if (!OidIsValid(tablespaceId))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("tablespace \"%s\" does not exist",
-                           stmt->tablespacename)));
+       tablespaceId = get_tablespace_oid(stmt->tablespacename, false);
    }
    else
    {
@@ -2941,7 +2936,7 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel,
            break;
        case AT_ChangeOwner:    /* ALTER OWNER */
            ATExecChangeOwner(RelationGetRelid(rel),
-                             get_roleid_checked(cmd->name),
+                             get_role_oid(cmd->name, false),
                              false, lockmode);
            break;
        case AT_ClusterOn:      /* CLUSTER ON */
@@ -6945,11 +6940,7 @@ ATPrepSetTableSpace(AlteredTableInfo *tab, Relation rel, char *tablespacename, L
    AclResult   aclresult;
 
    /* Check that the tablespace exists */
-   tablespaceId = get_tablespace_oid(tablespacename);
-   if (!OidIsValid(tablespaceId))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("tablespace \"%s\" does not exist", tablespacename)));
+   tablespaceId = get_tablespace_oid(tablespacename, false);
 
    /* Check its permissions */
    aclresult = pg_tablespace_aclcheck(tablespaceId, GetUserId(), ACL_CREATE);
index 519824f3281270960279db7737f5c7207c07b1a3..569b814e1fbf4de2a962622ac93b3c722a89e8ac 100644 (file)
@@ -40,7 +40,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.78 2010/07/20 18:14:16 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.79 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -246,7 +246,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
 
    /* However, the eventual owner of the tablespace need not be */
    if (stmt->owner)
-       ownerId = get_roleid_checked(stmt->owner);
+       ownerId = get_role_oid(stmt->owner, false);
    else
        ownerId = GetUserId();
 
@@ -298,7 +298,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
     * index would catch this anyway, but might as well give a friendlier
     * message.)
     */
-   if (OidIsValid(get_tablespace_oid(stmt->tablespacename)))
+   if (OidIsValid(get_tablespace_oid(stmt->tablespacename, true)))
        ereport(ERROR,
                (errcode(ERRCODE_DUPLICATE_OBJECT),
                 errmsg("tablespace \"%s\" already exists",
@@ -1029,7 +1029,7 @@ assign_default_tablespace(const char *newval, bool doit, GucSource source)
    if (IsTransactionState())
    {
        if (newval[0] != '\0' &&
-           !OidIsValid(get_tablespace_oid(newval)))
+           !OidIsValid(get_tablespace_oid(newval, true)))
        {
            ereport(GUC_complaint_elevel(source),
                    (errcode(ERRCODE_UNDEFINED_OBJECT),
@@ -1079,7 +1079,7 @@ GetDefaultTablespace(bool forTemp)
     * to refer to an existing tablespace; we just silently return InvalidOid,
     * causing the new object to be created in the database's tablespace.
     */
-   result = get_tablespace_oid(default_tablespace);
+   result = get_tablespace_oid(default_tablespace, true);
 
    /*
     * Allow explicit specification of database's default tablespace in
@@ -1146,21 +1146,13 @@ assign_temp_tablespaces(const char *newval, bool doit, GucSource source)
                continue;
            }
 
-           /* Else verify that name is a valid tablespace name */
-           curoid = get_tablespace_oid(curname);
+           /*
+            * In an interactive SET command, we ereport for bad info.
+            * Otherwise, silently ignore any bad list elements.
+            */
+           curoid = get_tablespace_oid(curname, source < PGC_S_INTERACTIVE);
            if (curoid == InvalidOid)
-           {
-               /*
-                * In an interactive SET command, we ereport for bad info.
-                * Otherwise, silently ignore any bad list elements.
-                */
-               if (source >= PGC_S_INTERACTIVE)
-                   ereport(ERROR,
-                           (errcode(ERRCODE_UNDEFINED_OBJECT),
-                            errmsg("tablespace \"%s\" does not exist",
-                                   curname)));
                continue;
-           }
 
            /*
             * Allow explicit specification of database's default tablespace
@@ -1259,10 +1251,10 @@ PrepareTempTablespaces(void)
        }
 
        /* Else verify that name is a valid tablespace name */
-       curoid = get_tablespace_oid(curname);
+       curoid = get_tablespace_oid(curname, true);
        if (curoid == InvalidOid)
        {
-           /* Silently ignore any bad list elements */
+           /* Skip any bad list elements */
            continue;
        }
 
@@ -1295,10 +1287,11 @@ PrepareTempTablespaces(void)
 /*
  * get_tablespace_oid - given a tablespace name, look up the OID
  *
- * Returns InvalidOid if tablespace name not found.
+ * If missing_ok is false, throw an error if tablespace name not found.  If
+ * true, just return InvalidOid.
  */
 Oid
-get_tablespace_oid(const char *tablespacename)
+get_tablespace_oid(const char *tablespacename, bool missing_ok)
 {
    Oid         result;
    Relation    rel;
@@ -1329,6 +1322,12 @@ get_tablespace_oid(const char *tablespacename)
    heap_endscan(scandesc);
    heap_close(rel, AccessShareLock);
 
+   if (!OidIsValid(result) && !missing_ok)
+        ereport(ERROR,
+                (errcode(ERRCODE_UNDEFINED_OBJECT),
+                 errmsg("tablespace \"%s\" does not exist",
+                        tablespacename)));
+
    return result;
 }
 
index cdf7dc5ef1ffd1a4b072a0e1b250c52c0b4b9736..6ada0f7c3cacaaab8386a7d8aa3f8ee73adf25c9 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.193 2010/02/26 02:00:40 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.194 2010/08/05 14:45:01 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -293,8 +293,7 @@ CreateRole(CreateRoleStmt *stmt)
    pg_authid_rel = heap_open(AuthIdRelationId, RowExclusiveLock);
    pg_authid_dsc = RelationGetDescr(pg_authid_rel);
 
-   tuple = SearchSysCache1(AUTHNAME, PointerGetDatum(stmt->role));
-   if (HeapTupleIsValid(tuple))
+   if (OidIsValid(get_role_oid(stmt->role, true)))
        ereport(ERROR,
                (errcode(ERRCODE_DUPLICATE_OBJECT),
                 errmsg("role \"%s\" already exists",
@@ -384,7 +383,7 @@ CreateRole(CreateRoleStmt *stmt)
    foreach(item, addroleto)
    {
        char       *oldrolename = strVal(lfirst(item));
-       Oid         oldroleid = get_roleid_checked(oldrolename);
+       Oid         oldroleid = get_role_oid(oldrolename, false);
 
        AddRoleMems(oldrolename, oldroleid,
                    list_make1(makeString(stmt->role)),
@@ -795,11 +794,7 @@ AlterRoleSet(AlterRoleSetStmt *stmt)
    /* look up and lock the database, if specified */
    if (stmt->database != NULL)
    {
-       databaseid = get_database_oid(stmt->database);
-       if (!OidIsValid(databaseid))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("database \"%s\" not found", stmt->database)));
+       databaseid = get_database_oid(stmt->database, false);
        shdepLockAndCheckObject(DatabaseRelationId, databaseid);
    }
 
@@ -1099,7 +1094,7 @@ GrantRole(GrantRoleStmt *stmt)
    ListCell   *item;
 
    if (stmt->grantor)
-       grantor = get_roleid_checked(stmt->grantor);
+       grantor = get_role_oid(stmt->grantor, false);
    else
        grantor = GetUserId();
 
@@ -1127,7 +1122,7 @@ GrantRole(GrantRoleStmt *stmt)
                    (errcode(ERRCODE_INVALID_GRANT_OPERATION),
            errmsg("column names cannot be included in GRANT/REVOKE ROLE")));
 
-       roleid = get_roleid_checked(rolename);
+       roleid = get_role_oid(rolename, false);
        if (stmt->is_grant)
            AddRoleMems(rolename, roleid,
                        stmt->grantee_roles, grantee_ids,
@@ -1194,7 +1189,7 @@ ReassignOwnedObjects(ReassignOwnedStmt *stmt)
    }
 
    /* Must have privileges on the receiving side too */
-   newrole = get_roleid_checked(stmt->newrole);
+   newrole = get_role_oid(stmt->newrole, false);
 
    if (!has_privs_of_role(GetUserId(), newrole))
        ereport(ERROR,
@@ -1220,7 +1215,7 @@ roleNamesToIds(List *memberNames)
    foreach(l, memberNames)
    {
        char       *rolename = strVal(lfirst(l));
-       Oid         roleid = get_roleid_checked(rolename);
+       Oid         roleid = get_role_oid(rolename, false);
 
        result = lappend_oid(result, roleid);
    }
index b21dbf4762bbec52eca0c8a3c1a75b43570e0cfe..7dfb2ecbb6b57617a12cf3f3e0f1657fc6b7e393 100644 (file)
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.353 2010/07/25 23:21:21 rhaas Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.354 2010/08/05 14:45:02 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2134,12 +2134,7 @@ OpenIntoRel(QueryDesc *queryDesc)
     */
    if (into->tableSpaceName)
    {
-       tablespaceId = get_tablespace_oid(into->tableSpaceName);
-       if (!OidIsValid(tablespaceId))
-           ereport(ERROR,
-                   (errcode(ERRCODE_UNDEFINED_OBJECT),
-                    errmsg("tablespace \"%s\" does not exist",
-                           into->tableSpaceName)));
+       tablespaceId = get_tablespace_oid(into->tableSpaceName, false);
    }
    else
    {
index 4e1cff3502c8888cf2c79f681b159311535cb627..3aa718b3569686892ec792612e595ed35cef57c8 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.209 2010/07/06 19:18:56 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.210 2010/08/05 14:45:03 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -459,7 +459,7 @@ is_member(Oid userid, const char *role)
    if (!OidIsValid(userid))
        return false;           /* if user not exist, say "no" */
 
-   roleid = get_roleid(role);
+   roleid = get_role_oid(role, true);
 
    if (!OidIsValid(roleid))
        return false;           /* if target role not exist, say "no" */
@@ -1328,7 +1328,7 @@ check_hba(hbaPort *port)
    HbaLine    *hba;
 
    /* Get the target role's OID.  Note we do not error out for bad role. */
-   roleid = get_roleid(port->user_name);
+   roleid = get_role_oid(port->user_name, true);
 
    foreach(line, parsed_hba_lines)
    {
index 79ca6c13724117c8c24b3411688581a85a11b68f..41b410e2a62c03185d31ec09938bef1347c9e779 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.157 2010/02/26 02:01:05 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.158 2010/08/05 14:45:04 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,6 +22,7 @@
 #include "catalog/pg_type.h"
 #include "catalog/pg_class.h"
 #include "commands/dbcommands.h"
+#include "commands/proclang.h"
 #include "commands/tablespace.h"
 #include "foreign/foreign.h"
 #include "funcapi.h"
@@ -324,7 +325,7 @@ aclparse(const char *s, AclItem *aip)
    if (name[0] == '\0')
        aip->ai_grantee = ACL_ID_PUBLIC;
    else
-       aip->ai_grantee = get_roleid_checked(name);
+       aip->ai_grantee = get_role_oid(name, false);
 
    /*
     * XXX Allow a degree of backward compatibility by defaulting the grantor
@@ -337,7 +338,7 @@ aclparse(const char *s, AclItem *aip)
            ereport(ERROR,
                    (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
                     errmsg("a name must follow the \"/\" sign")));
-       aip->ai_grantor = get_roleid_checked(name2);
+       aip->ai_grantor = get_role_oid(name2, false);
    }
    else
    {
@@ -1790,7 +1791,7 @@ has_table_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*rolename), false);
    tableoid = convert_table_name(tablename);
    mode = convert_table_priv_string(priv_type_text);
 
@@ -1839,7 +1840,7 @@ has_table_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_table_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(RELOID, ObjectIdGetDatum(tableoid)))
@@ -1997,7 +1998,7 @@ has_sequence_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*rolename), false);
    mode = convert_sequence_priv_string(priv_type_text);
    sequenceoid = convert_table_name(sequencename);
    if (get_rel_relkind(sequenceoid) != RELKIND_SEQUENCE)
@@ -2057,7 +2058,7 @@ has_sequence_privilege_name_id(PG_FUNCTION_ARGS)
    AclResult   aclresult;
    char        relkind;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_sequence_priv_string(priv_type_text);
    relkind = get_rel_relkind(sequenceoid);
    if (relkind == '\0')
@@ -2208,7 +2209,7 @@ has_any_column_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*rolename), false);
    tableoid = convert_table_name(tablename);
    mode = convert_column_priv_string(priv_type_text);
 
@@ -2265,7 +2266,7 @@ has_any_column_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_column_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(RELOID, ObjectIdGetDatum(tableoid)))
@@ -2450,7 +2451,7 @@ has_column_privilege_name_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    int         privresult;
 
-   roleid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*rolename), false);
    tableoid = convert_table_name(tablename);
    colattnum = convert_column_name(tableoid, column);
    mode = convert_column_priv_string(priv_type_text);
@@ -2478,7 +2479,7 @@ has_column_privilege_name_name_attnum(PG_FUNCTION_ARGS)
    AclMode     mode;
    int         privresult;
 
-   roleid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*rolename), false);
    tableoid = convert_table_name(tablename);
    mode = convert_column_priv_string(priv_type_text);
 
@@ -2505,7 +2506,7 @@ has_column_privilege_name_id_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    int         privresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    colattnum = convert_column_name(tableoid, column);
    mode = convert_column_priv_string(priv_type_text);
 
@@ -2531,7 +2532,7 @@ has_column_privilege_name_id_attnum(PG_FUNCTION_ARGS)
    AclMode     mode;
    int         privresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_column_priv_string(priv_type_text);
 
    privresult = column_privilege_check(tableoid, colattnum, roleid, mode);
@@ -2822,7 +2823,7 @@ has_database_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    databaseoid = convert_database_name(databasename);
    mode = convert_database_priv_string(priv_type_text);
 
@@ -2871,7 +2872,7 @@ has_database_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_database_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(DATABASEOID, ObjectIdGetDatum(databaseoid)))
@@ -2966,15 +2967,8 @@ static Oid
 convert_database_name(text *databasename)
 {
    char       *dbname = text_to_cstring(databasename);
-   Oid         oid;
 
-   oid = get_database_oid(dbname);
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_DATABASE),
-                errmsg("database \"%s\" does not exist", dbname)));
-
-   return oid;
+   return get_database_oid(dbname, false);
 }
 
 /*
@@ -3027,7 +3021,7 @@ has_foreign_data_wrapper_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    fdwid = convert_foreign_data_wrapper_name(fdwname);
    mode = convert_foreign_data_wrapper_priv_string(priv_type_text);
 
@@ -3076,7 +3070,7 @@ has_foreign_data_wrapper_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_foreign_data_wrapper_priv_string(priv_type_text);
 
    aclresult = pg_foreign_data_wrapper_aclcheck(fdwid, roleid, mode);
@@ -3209,7 +3203,7 @@ has_function_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    functionoid = convert_function_name(functionname);
    mode = convert_function_priv_string(priv_type_text);
 
@@ -3258,7 +3252,7 @@ has_function_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_function_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(PROCOID, ObjectIdGetDatum(functionoid)))
@@ -3409,7 +3403,7 @@ has_language_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    languageoid = convert_language_name(languagename);
    mode = convert_language_priv_string(priv_type_text);
 
@@ -3458,7 +3452,7 @@ has_language_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_language_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(LANGOID, ObjectIdGetDatum(languageoid)))
@@ -3553,15 +3547,8 @@ static Oid
 convert_language_name(text *languagename)
 {
    char       *langname = text_to_cstring(languagename);
-   Oid         oid;
 
-   oid = GetSysCacheOid1(LANGNAME, CStringGetDatum(langname));
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("language \"%s\" does not exist", langname)));
-
-   return oid;
+   return get_language_oid(langname, false);
 }
 
 /*
@@ -3607,7 +3594,7 @@ has_schema_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    schemaoid = convert_schema_name(schemaname);
    mode = convert_schema_priv_string(priv_type_text);
 
@@ -3656,7 +3643,7 @@ has_schema_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_schema_priv_string(priv_type_text);
 
    if (!SearchSysCacheExists1(NAMESPACEOID, ObjectIdGetDatum(schemaoid)))
@@ -3751,15 +3738,8 @@ static Oid
 convert_schema_name(text *schemaname)
 {
    char       *nspname = text_to_cstring(schemaname);
-   Oid         oid;
-
-   oid = GetSysCacheOid1(NAMESPACENAME, CStringGetDatum(nspname));
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_SCHEMA),
-                errmsg("schema \"%s\" does not exist", nspname)));
 
-   return oid;
+   return get_namespace_oid(nspname, false);
 }
 
 /*
@@ -3807,7 +3787,7 @@ has_server_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    serverid = convert_server_name(servername);
    mode = convert_server_priv_string(priv_type_text);
 
@@ -3856,7 +3836,7 @@ has_server_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_server_priv_string(priv_type_text);
 
    aclresult = pg_foreign_server_aclcheck(serverid, roleid, mode);
@@ -3989,7 +3969,7 @@ has_tablespace_privilege_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    tablespaceoid = convert_tablespace_name(tablespacename);
    mode = convert_tablespace_priv_string(priv_type_text);
 
@@ -4038,7 +4018,7 @@ has_tablespace_privilege_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_tablespace_priv_string(priv_type_text);
 
    aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);
@@ -4124,16 +4104,8 @@ static Oid
 convert_tablespace_name(text *tablespacename)
 {
    char       *spcname = text_to_cstring(tablespacename);
-   Oid         oid;
 
-   oid = get_tablespace_oid(spcname);
-
-   if (!OidIsValid(oid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("tablespace \"%s\" does not exist", spcname)));
-
-   return oid;
+   return get_tablespace_oid(spcname, false);
 }
 
 /*
@@ -4178,8 +4150,8 @@ pg_has_role_name_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
-   roleoid = get_roleid_checked(NameStr(*rolename));
+   roleid = get_role_oid(NameStr(*username), false);
+   roleoid = get_role_oid(NameStr(*rolename), false);
    mode = convert_role_priv_string(priv_type_text);
 
    aclresult = pg_role_aclcheck(roleoid, roleid, mode);
@@ -4204,7 +4176,7 @@ pg_has_role_name(PG_FUNCTION_ARGS)
    AclResult   aclresult;
 
    roleid = GetUserId();
-   roleoid = get_roleid_checked(NameStr(*rolename));
+   roleoid = get_role_oid(NameStr(*rolename), false);
    mode = convert_role_priv_string(priv_type_text);
 
    aclresult = pg_role_aclcheck(roleoid, roleid, mode);
@@ -4227,7 +4199,7 @@ pg_has_role_name_id(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleid = get_roleid_checked(NameStr(*username));
+   roleid = get_role_oid(NameStr(*username), false);
    mode = convert_role_priv_string(priv_type_text);
 
    aclresult = pg_role_aclcheck(roleoid, roleid, mode);
@@ -4273,7 +4245,7 @@ pg_has_role_id_name(PG_FUNCTION_ARGS)
    AclMode     mode;
    AclResult   aclresult;
 
-   roleoid = get_roleid_checked(NameStr(*rolename));
+   roleoid = get_role_oid(NameStr(*rolename), false);
    mode = convert_role_priv_string(priv_type_text);
 
    aclresult = pg_role_aclcheck(roleoid, roleid, mode);
@@ -4830,3 +4802,22 @@ select_best_grantor(Oid roleId, AclMode privileges,
        }
    }
 }
+
+/*
+ * get_role_oid - Given a role name, look up the role's OID.
+ *
+ * If missing_ok is false, throw an error if tablespace name not found.  If
+ * true, just return InvalidOid.
+ */
+Oid
+get_role_oid(const char *rolname, bool missing_ok)
+{
+   Oid         oid;
+
+   oid = GetSysCacheOid1(AUTHNAME, CStringGetDatum(rolname));
+   if (!OidIsValid(oid) && !missing_ok)
+       ereport(ERROR,
+               (errcode(ERRCODE_UNDEFINED_OBJECT),
+                errmsg("role \"%s\" does not exist", rolname)));
+   return oid;
+}
index 8b5def4d15a9f00d90019e1362d4640137ad8b6c..e11c13a9ccf93160b2a048dde7bd35fe07c7aaa3 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright (c) 2002-2010, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.31 2010/02/26 02:01:07 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.32 2010/08/05 14:45:04 rhaas Exp $
  *
  */
 
@@ -141,13 +141,7 @@ Datum
 pg_database_size_name(PG_FUNCTION_ARGS)
 {
    Name        dbName = PG_GETARG_NAME(0);
-   Oid         dbOid = get_database_oid(NameStr(*dbName));
-
-   if (!OidIsValid(dbOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_DATABASE),
-                errmsg("database \"%s\" does not exist",
-                       NameStr(*dbName))));
+   Oid         dbOid = get_database_oid(NameStr(*dbName), false);
 
    PG_RETURN_INT64(calculate_database_size(dbOid));
 }
@@ -240,13 +234,7 @@ Datum
 pg_tablespace_size_name(PG_FUNCTION_ARGS)
 {
    Name        tblspcName = PG_GETARG_NAME(0);
-   Oid         tblspcOid = get_tablespace_oid(NameStr(*tblspcName));
-
-   if (!OidIsValid(tblspcOid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("tablespace \"%s\" does not exist",
-                       NameStr(*tblspcName))));
+   Oid         tblspcOid = get_tablespace_oid(NameStr(*tblspcName), false);
 
    PG_RETURN_INT64(calculate_tablespace_size(tblspcOid));
 }
index f49656eda22c4d0a7494a6e2d6988521c402f97c..85093b3e4a8b6e93cfa6115a3c060f3c76f72ce4 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.171 2010/07/09 22:57:39 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.172 2010/08/05 14:45:05 rhaas Exp $
  *
  * NOTES
  *   Eventually, the index information should go through here, too.
@@ -2638,34 +2638,3 @@ get_namespace_name(Oid nspid)
    else
        return NULL;
 }
-
-/*             ---------- PG_AUTHID CACHE ----------                    */
-
-/*
- * get_roleid
- *   Given a role name, look up the role's OID.
- *   Returns InvalidOid if no such role.
- */
-Oid
-get_roleid(const char *rolname)
-{
-   return GetSysCacheOid1(AUTHNAME, PointerGetDatum(rolname));
-}
-
-/*
- * get_roleid_checked
- *   Given a role name, look up the role's OID.
- *   ereports if no such role.
- */
-Oid
-get_roleid_checked(const char *rolname)
-{
-   Oid         roleid;
-
-   roleid = get_roleid(rolname);
-   if (!OidIsValid(roleid))
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("role \"%s\" does not exist", rolname)));
-   return roleid;
-}
index 277ea0171fb51c9c794959196fc2d4bdd01164ec..ec4e45125b755ec4d0f7f9d223ea341ba837db01 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/namespace.h,v 1.62 2010/01/02 16:58:01 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/namespace.h,v 1.63 2010/08/05 14:45:06 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -91,6 +91,7 @@ extern void DeconstructQualifiedName(List *names,
                         char **objname_p);
 extern Oid LookupNamespaceNoError(const char *nspname);
 extern Oid LookupExplicitNamespace(const char *nspname);
+extern Oid get_namespace_oid(const char *nspname, bool missing_ok);
 
 extern Oid LookupCreationNamespace(const char *nspname);
 extern Oid QualifiedNameGetCreationNamespace(List *names, char **objname_p);
index f150da3fb76e7745bfc75bb819f941d72a131f9d..7da6e14ada835f4e7b93e56a06e914710030fe70 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.50 2010/01/02 16:58:03 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.51 2010/08/05 14:45:07 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -59,7 +59,7 @@ extern void AlterDatabase(AlterDatabaseStmt *stmt, bool isTopLevel);
 extern void AlterDatabaseSet(AlterDatabaseSetStmt *stmt);
 extern void AlterDatabaseOwner(const char *dbname, Oid newOwnerId);
 
-extern Oid get_database_oid(const char *dbname);
+extern Oid get_database_oid(const char *dbname, bool missingok);
 extern char *get_database_name(Oid dbid);
 
 extern void dbase_redo(XLogRecPtr lsn, XLogRecord *rptr);
index cd5be6e4fda92c257c916c70998a98e8519a3dce..502ee749cde0dcf7cedfc0a52744d9e7c7017221 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/commands/defrem.h,v 1.102 2010/07/03 13:53:13 rhaas Exp $
+ * $PostgreSQL: pgsql/src/include/commands/defrem.h,v 1.103 2010/08/05 14:45:07 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -99,6 +99,7 @@ extern void AlterOpClassOwner(List *name, const char *access_method, Oid newOwne
 extern void AlterOpClassOwner_oid(Oid opclassOid, Oid newOwnerId);
 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);
 
 /* commands/tsearchcmds.c */
 extern void DefineTSParser(List *names, List *parameters);
index 255af9291e01c6afe17d59d6792260a7255b5043..8cc72494f87f219861b6875c6e608cc7ebc8a4f0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $PostgreSQL: pgsql/src/include/commands/proclang.h,v 1.15 2009/06/11 14:49:11 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/commands/proclang.h,v 1.16 2010/08/05 14:45:08 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  *
@@ -21,5 +21,6 @@ extern void RenameLanguage(const char *oldname, const char *newname);
 extern void AlterLanguageOwner(const char *name, Oid newOwnerId);
 extern void AlterLanguageOwner_oid(Oid oid, Oid newOwnerId);
 extern bool PLTemplateExists(const char *languageName);
+extern Oid get_language_oid(const char *langname, bool missing_ok);
 
 #endif   /* PROCLANG_H */
index 3d46eeb650e9ab7ac10bccd3ba54da14c2b8c071..44eed246a1f0a18507f79d840df66872fb1c87e1 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.23 2010/01/07 03:53:08 rhaas Exp $
+ * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.24 2010/08/05 14:45:08 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -51,7 +51,7 @@ extern Oid    GetDefaultTablespace(bool forTemp);
 
 extern void PrepareTempTablespaces(void);
 
-extern Oid get_tablespace_oid(const char *tablespacename);
+extern Oid get_tablespace_oid(const char *tablespacename, bool missing_ok);
 extern char *get_tablespace_name(Oid spc_oid);
 
 extern bool directory_is_empty(const char *path);
index 16a2202fdd1ed90ddedf6b2e436cd0eb50d5b793..1fa0a3df679f6f5a2592fd7c6a539086a44c32e9 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.113 2010/02/26 02:01:28 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.114 2010/08/05 14:45:09 rhaas Exp $
  *
  * NOTES
  *   An ACL array is simply an array of AclItems, representing the union
@@ -223,6 +223,7 @@ extern bool is_member_of_role(Oid member, Oid role);
 extern bool is_member_of_role_nosuper(Oid member, Oid role);
 extern bool is_admin_of_role(Oid member, Oid role);
 extern void check_is_member_of_role(Oid member, Oid role);
+extern Oid get_role_oid(const char *rolname, bool missing_ok);
 
 extern void select_best_grantor(Oid roleId, AclMode privileges,
                    const Acl *acl, Oid ownerId,
index b16ab8680a33b7e8e9d6be64cf1002d26aa220f1..ef78aa8b7f94cc5da3af485f833c1b5f3c3197b4 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.133 2010/04/24 16:20:32 sriggs Exp $
+ * $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.134 2010/08/05 14:45:09 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -136,8 +136,6 @@ extern void free_attstatsslot(Oid atttype,
                  Datum *values, int nvalues,
                  float4 *numbers, int nnumbers);
 extern char *get_namespace_name(Oid nspid);
-extern Oid get_roleid(const char *rolname);
-extern Oid get_roleid_checked(const char *rolname);
 
 #define type_is_array(typid)  (get_element_type(typid) != InvalidOid)