aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/acl.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2016-12-28 12:00:00 -0500
committerPeter Eisentraut <peter_e@gmx.net>2016-12-29 10:49:39 -0500
commit2e254130d1d3f16575f2d72952ab23b4e27d035a (patch)
treedb49855dee51e965215877173999daf5204be385 /src/backend/utils/adt/acl.c
parentf0774abde868e0b5a2acbe75b5028884752f739d (diff)
downloadpostgresql-2e254130d1d3f16575f2d72952ab23b4e27d035a.tar.gz
postgresql-2e254130d1d3f16575f2d72952ab23b4e27d035a.zip
Make more use of RoleSpec struct
Most code was casting this through a generic Node. By declaring everything as RoleSpec appropriately, we can remove a bunch of casts and ad-hoc node type checking. Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com>
Diffstat (limited to 'src/backend/utils/adt/acl.c')
-rw-r--r--src/backend/utils/adt/acl.c28
1 files changed, 6 insertions, 22 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index 025a99e55af..cc4e0b3f815 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -5143,15 +5143,10 @@ get_role_oid_or_public(const char *rolname)
* case must check the case separately.
*/
Oid
-get_rolespec_oid(const Node *node, bool missing_ok)
+get_rolespec_oid(const RoleSpec *role, bool missing_ok)
{
- RoleSpec *role;
Oid oid;
- if (!IsA(node, RoleSpec))
- elog(ERROR, "invalid node type %d", node->type);
-
- role = (RoleSpec *) node;
switch (role->roletype)
{
case ROLESPEC_CSTRING:
@@ -5186,15 +5181,10 @@ get_rolespec_oid(const Node *node, bool missing_ok)
* Caller must ReleaseSysCache when done with the result tuple.
*/
HeapTuple
-get_rolespec_tuple(const Node *node)
+get_rolespec_tuple(const RoleSpec *role)
{
- RoleSpec *role;
HeapTuple tuple;
- role = (RoleSpec *) node;
- if (!IsA(node, RoleSpec))
- elog(ERROR, "invalid node type %d", node->type);
-
switch (role->roletype)
{
case ROLESPEC_CSTRING:
@@ -5235,13 +5225,13 @@ get_rolespec_tuple(const Node *node)
* Given a RoleSpec, returns a palloc'ed copy of the corresponding role's name.
*/
char *
-get_rolespec_name(const Node *node)
+get_rolespec_name(const RoleSpec *role)
{
HeapTuple tp;
Form_pg_authid authForm;
char *rolename;
- tp = get_rolespec_tuple(node);
+ tp = get_rolespec_tuple(role);
authForm = (Form_pg_authid) GETSTRUCT(tp);
rolename = pstrdup(NameStr(authForm->rolname));
ReleaseSysCache(tp);
@@ -5257,17 +5247,11 @@ get_rolespec_name(const Node *node)
* message is provided.
*/
void
-check_rolespec_name(const Node *node, const char *detail_msg)
+check_rolespec_name(const RoleSpec *role, const char *detail_msg)
{
- RoleSpec *role;
-
- if (!node)
+ if (!role)
return;
- role = (RoleSpec *) node;
-
- Assert(IsA(node, RoleSpec));
-
if (role->roletype != ROLESPEC_CSTRING)
return;