mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Allow type_func_name_keywords in even more places
A while back,2c92edad48
allowed type_func_name_keywords to be used in more places, including role identifiers. Unfortunately, that commit missed out on cases where name_list was used for lists-of-roles, eg: for DROP ROLE. This resulted in the unfortunate situation that you could CREATE a role with a type_func_name_keywords-allowed identifier, but not DROP it (directly- ALTER could be used to rename it to something which could be DROP'd). This extends allowing type_func_name_keywords to places where role lists can be used. Back-patch to 9.0, as2c92edad48
was.
This commit is contained in:
@ -306,7 +306,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
|
||||
oper_argtypes RuleActionList RuleActionMulti
|
||||
opt_column_list columnList opt_name_list
|
||||
sort_clause opt_sort_clause sortby_list index_params
|
||||
name_list from_clause from_list opt_array_bounds
|
||||
name_list role_list from_clause from_list opt_array_bounds
|
||||
qualified_name_list any_name any_name_list
|
||||
any_operator expr_list attrs
|
||||
target_list insert_column_list set_target_list
|
||||
@ -860,7 +860,7 @@ AlterOptRoleElem:
|
||||
$$ = makeDefElem("validUntil", (Node *)makeString($3));
|
||||
}
|
||||
/* Supported but not documented for roles, for use by ALTER GROUP. */
|
||||
| USER name_list
|
||||
| USER role_list
|
||||
{
|
||||
$$ = makeDefElem("rolemembers", (Node *)$2);
|
||||
}
|
||||
@ -924,19 +924,19 @@ CreateOptRoleElem:
|
||||
{
|
||||
$$ = makeDefElem("sysid", (Node *)makeInteger($2));
|
||||
}
|
||||
| ADMIN name_list
|
||||
| ADMIN role_list
|
||||
{
|
||||
$$ = makeDefElem("adminmembers", (Node *)$2);
|
||||
}
|
||||
| ROLE name_list
|
||||
| ROLE role_list
|
||||
{
|
||||
$$ = makeDefElem("rolemembers", (Node *)$2);
|
||||
}
|
||||
| IN_P ROLE name_list
|
||||
| IN_P ROLE role_list
|
||||
{
|
||||
$$ = makeDefElem("addroleto", (Node *)$3);
|
||||
}
|
||||
| IN_P GROUP_P name_list
|
||||
| IN_P GROUP_P role_list
|
||||
{
|
||||
$$ = makeDefElem("addroleto", (Node *)$3);
|
||||
}
|
||||
@ -1035,14 +1035,14 @@ AlterUserSetStmt:
|
||||
*****************************************************************************/
|
||||
|
||||
DropRoleStmt:
|
||||
DROP ROLE name_list
|
||||
DROP ROLE role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP ROLE IF_P EXISTS name_list
|
||||
| DROP ROLE IF_P EXISTS role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = TRUE;
|
||||
@ -1061,14 +1061,14 @@ DropRoleStmt:
|
||||
*****************************************************************************/
|
||||
|
||||
DropUserStmt:
|
||||
DROP USER name_list
|
||||
DROP USER role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP USER IF_P EXISTS name_list
|
||||
| DROP USER IF_P EXISTS role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->roles = $5;
|
||||
@ -1103,7 +1103,7 @@ CreateGroupStmt:
|
||||
*****************************************************************************/
|
||||
|
||||
AlterGroupStmt:
|
||||
ALTER GROUP_P RoleId add_drop USER name_list
|
||||
ALTER GROUP_P RoleId add_drop USER role_list
|
||||
{
|
||||
AlterRoleStmt *n = makeNode(AlterRoleStmt);
|
||||
n->role = $3;
|
||||
@ -1127,14 +1127,14 @@ add_drop: ADD_P { $$ = +1; }
|
||||
*****************************************************************************/
|
||||
|
||||
DropGroupStmt:
|
||||
DROP GROUP_P name_list
|
||||
DROP GROUP_P role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP GROUP_P IF_P EXISTS name_list
|
||||
| DROP GROUP_P IF_P EXISTS role_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = TRUE;
|
||||
@ -4790,7 +4790,7 @@ DropOpFamilyStmt:
|
||||
*
|
||||
*****************************************************************************/
|
||||
DropOwnedStmt:
|
||||
DROP OWNED BY name_list opt_drop_behavior
|
||||
DROP OWNED BY role_list opt_drop_behavior
|
||||
{
|
||||
DropOwnedStmt *n = makeNode(DropOwnedStmt);
|
||||
n->roles = $4;
|
||||
@ -4800,7 +4800,7 @@ DropOwnedStmt:
|
||||
;
|
||||
|
||||
ReassignOwnedStmt:
|
||||
REASSIGN OWNED BY name_list TO name
|
||||
REASSIGN OWNED BY role_list TO name
|
||||
{
|
||||
ReassignOwnedStmt *n = makeNode(ReassignOwnedStmt);
|
||||
n->roles = $4;
|
||||
@ -5682,7 +5682,7 @@ function_with_argtypes:
|
||||
*****************************************************************************/
|
||||
|
||||
GrantRoleStmt:
|
||||
GRANT privilege_list TO name_list opt_grant_admin_option opt_granted_by
|
||||
GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by
|
||||
{
|
||||
GrantRoleStmt *n = makeNode(GrantRoleStmt);
|
||||
n->is_grant = true;
|
||||
@ -5695,7 +5695,7 @@ GrantRoleStmt:
|
||||
;
|
||||
|
||||
RevokeRoleStmt:
|
||||
REVOKE privilege_list FROM name_list opt_granted_by opt_drop_behavior
|
||||
REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior
|
||||
{
|
||||
GrantRoleStmt *n = makeNode(GrantRoleStmt);
|
||||
n->is_grant = false;
|
||||
@ -5705,7 +5705,7 @@ RevokeRoleStmt:
|
||||
n->behavior = $6;
|
||||
$$ = (Node*)n;
|
||||
}
|
||||
| REVOKE ADMIN OPTION FOR privilege_list FROM name_list opt_granted_by opt_drop_behavior
|
||||
| REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior
|
||||
{
|
||||
GrantRoleStmt *n = makeNode(GrantRoleStmt);
|
||||
n->is_grant = false;
|
||||
@ -5751,11 +5751,11 @@ DefACLOption:
|
||||
{
|
||||
$$ = makeDefElem("schemas", (Node *)$3);
|
||||
}
|
||||
| FOR ROLE name_list
|
||||
| FOR ROLE role_list
|
||||
{
|
||||
$$ = makeDefElem("roles", (Node *)$3);
|
||||
}
|
||||
| FOR USER name_list
|
||||
| FOR USER role_list
|
||||
{
|
||||
$$ = makeDefElem("roles", (Node *)$3);
|
||||
}
|
||||
@ -12204,6 +12204,12 @@ Iconst: ICONST { $$ = $1; };
|
||||
Sconst: SCONST { $$ = $1; };
|
||||
RoleId: NonReservedWord { $$ = $1; };
|
||||
|
||||
role_list: RoleId
|
||||
{ $$ = list_make1(makeString($1)); }
|
||||
| role_list ',' RoleId
|
||||
{ $$ = lappend($1, makeString($3)); }
|
||||
;
|
||||
|
||||
SignedIconst: Iconst { $$ = $1; }
|
||||
| '+' Iconst { $$ = + $2; }
|
||||
| '-' Iconst { $$ = - $2; }
|
||||
|
Reference in New Issue
Block a user