Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2e25413

Browse files
committed
Make more use of RoleSpec struct
Most code was casting this through a generic Node. By declaringeverything as RoleSpec appropriately, we can remove a bunch of casts andad-hoc node type checking.Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com>
1 parentf0774ab commit2e25413

File tree

7 files changed

+41
-54
lines changed

7 files changed

+41
-54
lines changed

‎src/backend/catalog/aclchk.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ ExecuteGrantStmt(GrantStmt *stmt)
423423
grantee_uid=ACL_ID_PUBLIC;
424424
break;
425425
default:
426-
grantee_uid=get_rolespec_oid((Node*)grantee, false);
426+
grantee_uid=get_rolespec_oid(grantee, false);
427427
break;
428428
}
429429
istmt.grantees=lappend_oid(istmt.grantees,grantee_uid);
@@ -922,7 +922,7 @@ ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *s
922922
grantee_uid=ACL_ID_PUBLIC;
923923
break;
924924
default:
925-
grantee_uid=get_rolespec_oid((Node*)grantee, false);
925+
grantee_uid=get_rolespec_oid(grantee, false);
926926
break;
927927
}
928928
iacls.grantees=lappend_oid(iacls.grantees,grantee_uid);
@@ -1012,7 +1012,7 @@ ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *s
10121012
{
10131013
RoleSpec*rolespec=lfirst(rolecell);
10141014

1015-
iacls.roleid=get_rolespec_oid((Node*)rolespec, false);
1015+
iacls.roleid=get_rolespec_oid(rolespec, false);
10161016

10171017
/*
10181018
* We insist that calling user be a member of each target role. If

‎src/backend/commands/policy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ policy_role_list_to_array(List *roles, int *num_roles)
177177
}
178178
else
179179
role_oids[i++]=
180-
ObjectIdGetDatum(get_rolespec_oid((Node*)spec, false));
180+
ObjectIdGetDatum(get_rolespec_oid(spec, false));
181181
}
182182

183183
returnrole_oids;

‎src/backend/commands/user.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt)
449449
foreach(item,addroleto)
450450
{
451451
RoleSpec*oldrole=lfirst(item);
452-
HeapTupleoldroletup=get_rolespec_tuple((Node*)oldrole);
452+
HeapTupleoldroletup=get_rolespec_tuple(oldrole);
453453
Oidoldroleid=HeapTupleGetOid(oldroletup);
454454
char*oldrolename=NameStr(((Form_pg_authid)GETSTRUCT(oldroletup))->rolname);
455455

@@ -1396,9 +1396,11 @@ roleSpecsToIds(List *memberNames)
13961396

13971397
foreach(l,memberNames)
13981398
{
1399-
Node*rolespec= (Node*)lfirst(l);
1399+
RoleSpec*rolespec= (RoleSpec*)lfirst(l);
14001400
Oidroleid;
14011401

1402+
Assert(IsA(rolespec,RoleSpec));
1403+
14021404
roleid=get_rolespec_oid(rolespec, false);
14031405
result=lappend_oid(result,roleid);
14041406
}
@@ -1493,7 +1495,7 @@ AddRoleMems(const char *rolename, Oid roleid,
14931495
ereport(ERROR,
14941496
(errcode(ERRCODE_INVALID_GRANT_OPERATION),
14951497
(errmsg("role \"%s\" is a member of role \"%s\"",
1496-
rolename,get_rolespec_name((Node*)memberRole)))));
1498+
rolename,get_rolespec_name(memberRole)))));
14971499

14981500
/*
14991501
* Check if entry for this role/member already exists; if so, give
@@ -1508,7 +1510,7 @@ AddRoleMems(const char *rolename, Oid roleid,
15081510
{
15091511
ereport(NOTICE,
15101512
(errmsg("role \"%s\" is already a member of role \"%s\"",
1511-
get_rolespec_name((Node*)memberRole),rolename)));
1513+
get_rolespec_name(memberRole),rolename)));
15121514
ReleaseSysCache(authmem_tuple);
15131515
continue;
15141516
}
@@ -1619,7 +1621,7 @@ DelRoleMems(const char *rolename, Oid roleid,
16191621
{
16201622
ereport(WARNING,
16211623
(errmsg("role \"%s\" is not a member of role \"%s\"",
1622-
get_rolespec_name((Node*)memberRole),rolename)));
1624+
get_rolespec_name(memberRole),rolename)));
16231625
continue;
16241626
}
16251627

‎src/backend/parser/gram.y

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ static Node *makeBitStringConst(char *str, int location);
144144
static Node *makeNullAConst(int location);
145145
static Node *makeAConst(Value *v,int location);
146146
static Node *makeBoolAConst(bool state,int location);
147-
staticNode *makeRoleSpec(RoleSpecType type,int location);
147+
staticRoleSpec *makeRoleSpec(RoleSpecType type,int location);
148148
staticvoidcheck_qualified_name(List *names,core_yyscan_t yyscanner);
149149
static List *check_func_name(List *names,core_yyscan_t yyscanner);
150150
static List *check_indirection(List *indirection,core_yyscan_t yyscanner);
@@ -231,6 +231,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
231231
PartitionElem*partelem;
232232
PartitionSpec*partspec;
233233
PartitionRangeDatum*partrange_datum;
234+
RoleSpec*rolespec;
234235
}
235236

236237
%type<node>stmtschema_stmt
@@ -339,7 +340,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
339340
%type<list>RowSecurityDefaultToRoleRowSecurityOptionalToRole
340341

341342
%type<str>iso_levelopt_encoding
342-
%type<node>grantee
343+
%type<rolespec>grantee
343344
%type<list>grantee_list
344345
%type<accesspriv>privilege
345346
%type<list>privilegesprivilege_list
@@ -506,7 +507,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
506507
%type<str>NonReservedWordNonReservedWord_or_Sconst
507508
%type<str>createdb_opt_name
508509
%type<node>var_valuezone_value
509-
%type<node>auth_identRoleSpecopt_granted_by
510+
%type<rolespec>auth_identRoleSpecopt_granted_by
510511

511512
%type<keyword>unreserved_keywordtype_func_name_keyword
512513
%type<keyword>col_name_keywordreserved_keyword
@@ -522,7 +523,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
522523
%type<list>constraints_set_list
523524
%type<boolean>constraints_set_mode
524525
%type<str>OptTableSpaceOptConsTableSpace
525-
%type<node>OptTableSpaceOwner
526+
%type<rolespec>OptTableSpaceOwner
526527
%type<ival>opt_check_option
527528

528529
%type<str>opt_providersecurity_label
@@ -13918,10 +13919,10 @@ RoleSpec:NonReservedWord
1391813919
}
1391913920
else
1392013921
{
13921-
n =(RoleSpec *)makeRoleSpec(ROLESPEC_CSTRING, @1);
13922+
n =makeRoleSpec(ROLESPEC_CSTRING, @1);
1392213923
n->rolename =pstrdup($1);
1392313924
}
13924-
$$ =(Node *)n;
13925+
$$ = n;
1392513926
}
1392613927
| CURRENT_USER
1392713928
{
@@ -14644,15 +14645,15 @@ makeBoolAConst(bool state, int location)
1464414645
/* makeRoleSpec
1464514646
* Create a RoleSpec with the given type
1464614647
*/
14647-
staticNode *
14648+
staticRoleSpec *
1464814649
makeRoleSpec(RoleSpecType type, int location)
1464914650
{
1465014651
RoleSpec *spec = makeNode(RoleSpec);
1465114652

1465214653
spec->roletype = type;
1465314654
spec->location = location;
1465414655

14655-
return(Node *)spec;
14656+
return spec;
1465614657
}
1465714658

1465814659
/* check_qualified_name --- check the result of qualified_name production

‎src/backend/utils/adt/acl.c

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5143,15 +5143,10 @@ get_role_oid_or_public(const char *rolname)
51435143
* case must check the case separately.
51445144
*/
51455145
Oid
5146-
get_rolespec_oid(constNode*node,boolmissing_ok)
5146+
get_rolespec_oid(constRoleSpec*role,boolmissing_ok)
51475147
{
5148-
RoleSpec*role;
51495148
Oidoid;
51505149

5151-
if (!IsA(node,RoleSpec))
5152-
elog(ERROR,"invalid node type %d",node->type);
5153-
5154-
role= (RoleSpec*)node;
51555150
switch (role->roletype)
51565151
{
51575152
caseROLESPEC_CSTRING:
@@ -5186,15 +5181,10 @@ get_rolespec_oid(const Node *node, bool missing_ok)
51865181
* Caller must ReleaseSysCache when done with the result tuple.
51875182
*/
51885183
HeapTuple
5189-
get_rolespec_tuple(constNode*node)
5184+
get_rolespec_tuple(constRoleSpec*role)
51905185
{
5191-
RoleSpec*role;
51925186
HeapTupletuple;
51935187

5194-
role= (RoleSpec*)node;
5195-
if (!IsA(node,RoleSpec))
5196-
elog(ERROR,"invalid node type %d",node->type);
5197-
51985188
switch (role->roletype)
51995189
{
52005190
caseROLESPEC_CSTRING:
@@ -5235,13 +5225,13 @@ get_rolespec_tuple(const Node *node)
52355225
* Given a RoleSpec, returns a palloc'ed copy of the corresponding role's name.
52365226
*/
52375227
char*
5238-
get_rolespec_name(constNode*node)
5228+
get_rolespec_name(constRoleSpec*role)
52395229
{
52405230
HeapTupletp;
52415231
Form_pg_authidauthForm;
52425232
char*rolename;
52435233

5244-
tp=get_rolespec_tuple(node);
5234+
tp=get_rolespec_tuple(role);
52455235
authForm= (Form_pg_authid)GETSTRUCT(tp);
52465236
rolename=pstrdup(NameStr(authForm->rolname));
52475237
ReleaseSysCache(tp);
@@ -5257,17 +5247,11 @@ get_rolespec_name(const Node *node)
52575247
* message is provided.
52585248
*/
52595249
void
5260-
check_rolespec_name(constNode*node,constchar*detail_msg)
5250+
check_rolespec_name(constRoleSpec*role,constchar*detail_msg)
52615251
{
5262-
RoleSpec*role;
5263-
5264-
if (!node)
5252+
if (!role)
52655253
return;
52665254

5267-
role= (RoleSpec*)node;
5268-
5269-
Assert(IsA(node,RoleSpec));
5270-
52715255
if (role->roletype!=ROLESPEC_CSTRING)
52725256
return;
52735257

‎src/include/nodes/parsenodes.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,7 +1542,7 @@ typedef struct CreateSchemaStmt
15421542
{
15431543
NodeTagtype;
15441544
char*schemaname;/* the name of the schema to create */
1545-
Node*authrole;/* the owner of the created schema */
1545+
RoleSpec*authrole;/* the owner of the created schema */
15461546
List*schemaElts;/* schema components (list of parsenodes) */
15471547
boolif_not_exists;/* just do nothing if schema already exists? */
15481548
}CreateSchemaStmt;
@@ -1647,7 +1647,7 @@ typedef struct AlterTableCmd/* one subcommand of an ALTER TABLE */
16471647
AlterTableTypesubtype;/* Type of table alteration to apply */
16481648
char*name;/* column, constraint, or trigger to act on,
16491649
* or tablespace */
1650-
Node*newowner;/* RoleSpec */
1650+
RoleSpec*newowner;
16511651
Node*def;/* definition of new column, index,
16521652
* constraint, or parent table */
16531653
DropBehaviorbehavior;/* RESTRICT or CASCADE for DROP cases */
@@ -1766,7 +1766,7 @@ typedef struct GrantRoleStmt
17661766
List*grantee_roles;/* list of member roles to add/delete */
17671767
boolis_grant;/* true = GRANT, false = REVOKE */
17681768
booladmin_opt;/* with admin option */
1769-
Node*grantor;/* set grantor to other than current role */
1769+
RoleSpec*grantor;/* set grantor to other than current role */
17701770
DropBehaviorbehavior;/* drop behavior (for REVOKE) */
17711771
}GrantRoleStmt;
17721772

@@ -1981,7 +1981,7 @@ typedef struct CreateTableSpaceStmt
19811981
{
19821982
NodeTagtype;
19831983
char*tablespacename;
1984-
Node*owner;
1984+
RoleSpec*owner;
19851985
char*location;
19861986
List*options;
19871987
}CreateTableSpaceStmt;
@@ -2107,23 +2107,23 @@ typedef struct CreateForeignTableStmt
21072107
typedefstructCreateUserMappingStmt
21082108
{
21092109
NodeTagtype;
2110-
Node*user;/* user role */
2110+
RoleSpec*user;/* user role */
21112111
char*servername;/* server name */
21122112
List*options;/* generic options to server */
21132113
}CreateUserMappingStmt;
21142114

21152115
typedefstructAlterUserMappingStmt
21162116
{
21172117
NodeTagtype;
2118-
Node*user;/* user role */
2118+
RoleSpec*user;/* user role */
21192119
char*servername;/* server name */
21202120
List*options;/* generic options to server */
21212121
}AlterUserMappingStmt;
21222122

21232123
typedefstructDropUserMappingStmt
21242124
{
21252125
NodeTagtype;
2126-
Node*user;/* user role */
2126+
RoleSpec*user;/* user role */
21272127
char*servername;/* server name */
21282128
boolmissing_ok;/* ignore missing mappings */
21292129
}DropUserMappingStmt;
@@ -2288,15 +2288,15 @@ typedef struct CreateRoleStmt
22882288
typedefstructAlterRoleStmt
22892289
{
22902290
NodeTagtype;
2291-
Node*role;/* role */
2291+
RoleSpec*role;/* role */
22922292
List*options;/* List of DefElem nodes */
22932293
intaction;/* +1 = add members, -1 = drop members */
22942294
}AlterRoleStmt;
22952295

22962296
typedefstructAlterRoleSetStmt
22972297
{
22982298
NodeTagtype;
2299-
Node*role;/* role */
2299+
RoleSpec*role;/* role */
23002300
char*database;/* database name, or NULL */
23012301
VariableSetStmt*setstmt;/* SET or RESET subcommand */
23022302
}AlterRoleSetStmt;
@@ -2687,7 +2687,7 @@ typedef struct AlterOwnerStmt
26872687
RangeVar*relation;/* in case it's a table */
26882688
List*object;/* in case it's some other object */
26892689
List*objarg;/* argument types, if applicable */
2690-
Node*newowner;/* the new owner */
2690+
RoleSpec*newowner;/* the new owner */
26912691
}AlterOwnerStmt;
26922692

26932693

@@ -3171,7 +3171,7 @@ typedef struct ReassignOwnedStmt
31713171
{
31723172
NodeTagtype;
31733173
List*roles;
3174-
Node*newrole;
3174+
RoleSpec*newrole;
31753175
}ReassignOwnedStmt;
31763176

31773177
/*

‎src/include/utils/acl.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ extern bool is_admin_of_role(Oid member, Oid role);
231231
externvoidcheck_is_member_of_role(Oidmember,Oidrole);
232232
externOidget_role_oid(constchar*rolename,boolmissing_ok);
233233
externOidget_role_oid_or_public(constchar*rolename);
234-
externOidget_rolespec_oid(constNode*node,boolmissing_ok);
235-
externvoidcheck_rolespec_name(constNode*node,constchar*detail_msg);
236-
externHeapTupleget_rolespec_tuple(constNode*node);
237-
externchar*get_rolespec_name(constNode*node);
234+
externOidget_rolespec_oid(constRoleSpec*role,boolmissing_ok);
235+
externvoidcheck_rolespec_name(constRoleSpec*role,constchar*detail_msg);
236+
externHeapTupleget_rolespec_tuple(constRoleSpec*role);
237+
externchar*get_rolespec_name(constRoleSpec*role);
238238

239239
externvoidselect_best_grantor(OidroleId,AclModeprivileges,
240240
constAcl*acl,OidownerId,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp