aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/adt/acl.c45
-rw-r--r--src/backend/utils/cache/syscache.c12
2 files changed, 23 insertions, 34 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index f868b36861d..0e73cb04b10 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.68 2002/03/02 21:39:32 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.69 2002/03/21 23:27:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -817,7 +817,6 @@ has_table_privilege_id(PG_FUNCTION_ARGS)
{
Oid reloid = PG_GETARG_OID(0);
text *priv_type_text = PG_GETARG_TEXT_P(1);
- char *relname;
int32 usesysid;
AclMode mode;
int32 result;
@@ -825,22 +824,14 @@ has_table_privilege_id(PG_FUNCTION_ARGS)
usesysid = GetUserId();
/*
- * Lookup relname based on rel oid
- */
- relname = get_rel_name(reloid);
- if (relname == NULL)
- elog(ERROR, "has_table_privilege: invalid relation oid %u",
- reloid);
-
- /*
* Convert priv_type_text to an AclMode
*/
mode = convert_priv_string(priv_type_text);
/*
- * Finally, check for the privilege
+ * Check for the privilege
*/
- result = pg_aclcheck(relname, usesysid, mode);
+ result = pg_class_aclcheck(reloid, usesysid, mode);
if (result == ACLCHECK_OK)
PG_RETURN_BOOL(true);
@@ -891,27 +882,18 @@ has_table_privilege_id_id(PG_FUNCTION_ARGS)
int32 usesysid = PG_GETARG_INT32(0);
Oid reloid = PG_GETARG_OID(1);
text *priv_type_text = PG_GETARG_TEXT_P(2);
- char *relname;
AclMode mode;
int32 result;
/*
- * Lookup relname based on rel oid
- */
- relname = get_rel_name(reloid);
- if (relname == NULL)
- elog(ERROR, "has_table_privilege: invalid relation oid %u",
- reloid);
-
- /*
* Convert priv_type_text to an AclMode
*/
mode = convert_priv_string(priv_type_text);
/*
- * Finally, check for the privilege
+ * Check for the privilege
*/
- result = pg_aclcheck(relname, usesysid, mode);
+ result = pg_class_aclcheck(reloid, usesysid, mode);
if (result == ACLCHECK_OK)
PG_RETURN_BOOL(true);
@@ -1050,22 +1032,19 @@ static bool
has_table_privilege_id_cname(int32 usesysid, char *relname,
text *priv_type_text)
{
- HeapTuple tuple;
+ Oid reloid;
AclMode mode;
int32 result;
/*
- * Check relname is valid. This is needed to deal with the case when
- * usename is a superuser in which case pg_aclcheck simply returns
- * ACLCHECK_OK without validating relname
+ * Convert relname to rel OID.
*/
- tuple = SearchSysCache(RELNAME,
- PointerGetDatum(relname),
- 0, 0, 0);
- if (!HeapTupleIsValid(tuple))
+ reloid = GetSysCacheOid(RELNAME,
+ PointerGetDatum(relname),
+ 0, 0, 0);
+ if (!OidIsValid(reloid))
elog(ERROR, "has_table_privilege: relation \"%s\" does not exist",
relname);
- ReleaseSysCache(tuple);
/*
* Convert priv_type_text to an AclMode
@@ -1075,7 +1054,7 @@ has_table_privilege_id_cname(int32 usesysid, char *relname,
/*
* Finally, check for the privilege
*/
- result = pg_aclcheck(relname, usesysid, mode);
+ result = pg_class_aclcheck(reloid, usesysid, mode);
if (result == ACLCHECK_OK)
return true;
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index dfbcccffbed..8779125d159 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.67 2002/02/19 20:11:18 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.68 2002/03/21 23:27:24 tgl Exp $
*
* NOTES
* These routines allow the parser/planner/executor to perform
@@ -103,6 +103,16 @@ static struct cachedesc cacheinfo[] = {
0,
0
}},
+ {AggregateRelationName, /* AGGOID */
+ AggregateOidIndex,
+ 0,
+ 1,
+ {
+ ObjectIdAttributeNumber,
+ 0,
+ 0,
+ 0
+ }},
{AccessMethodRelationName, /* AMNAME */
AmNameIndex,
0,