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:
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user