From 2e254130d1d3f16575f2d72952ab23b4e27d035a Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 28 Dec 2016 12:00:00 -0500 Subject: 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 --- src/backend/utils/adt/acl.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) (limited to 'src/backend/utils/adt/acl.c') diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 025a99e55a..cc4e0b3f81 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; -- cgit v1.2.1