1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-25 01:02:05 +03:00

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>
This commit is contained in:
Peter Eisentraut
2016-12-28 12:00:00 -05:00
parent f0774abde8
commit 2e254130d1
7 changed files with 41 additions and 54 deletions

View File

@ -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;