diff options
| author | Peter Eisentraut | 2017-08-01 00:36:32 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2017-08-04 00:34:45 +0000 |
| commit | b3744812215de458c80629c3a9c57f00833de8a9 (patch) | |
| tree | 1cca9dededf340790128c374e6f21f5dcacefde7 /src/backend/parser | |
| parent | 3eb9a5e7c4c9f10178815b569dbc0058eb50c05a (diff) | |
Further unify ROLE and USER command grammar rules
ALTER USER ... SET did not support all the syntax variants of ALTER ROLE
... SET. Fix that, and to avoid further deviations of this kind, unify
many the grammar rules for ROLE/USER/GROUP commands.
Reported-by: Pavel Golub <pavel@microolap.com>
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/gram.y | 105 |
1 files changed, 37 insertions, 68 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 62092ff7ec..7d0de99baf 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -250,7 +250,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); AlterObjectDependsStmt AlterObjectSchemaStmt AlterOwnerStmt AlterOperatorStmt AlterSeqStmt AlterSystemStmt AlterTableStmt AlterTblSpcStmt AlterExtensionStmt AlterExtensionContentsStmt AlterForeignTableStmt - AlterCompositeTypeStmt AlterUserStmt AlterUserMappingStmt AlterUserSetStmt + AlterCompositeTypeStmt AlterUserMappingStmt AlterRoleStmt AlterRoleSetStmt AlterPolicyStmt AlterDefaultPrivilegesStmt DefACLAction AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt @@ -262,9 +262,9 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); CreateAssertStmt CreateTransformStmt CreateTrigStmt CreateEventTrigStmt CreateUserStmt CreateUserMappingStmt CreateRoleStmt CreatePolicyStmt CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt DoStmt - DropGroupStmt DropOpClassStmt DropOpFamilyStmt DropPLangStmt DropStmt + DropOpClassStmt DropOpFamilyStmt DropPLangStmt DropStmt DropAssertStmt DropCastStmt DropRoleStmt - DropUserStmt DropdbStmt DropTableSpaceStmt + DropdbStmt DropTableSpaceStmt DropTransformStmt DropUserMappingStmt ExplainStmt FetchStmt GrantStmt GrantRoleStmt ImportForeignSchemaStmt IndexStmt InsertStmt @@ -841,8 +841,6 @@ stmt : | AlterTSConfigurationStmt | AlterTSDictionaryStmt | AlterUserMappingStmt - | AlterUserSetStmt - | AlterUserStmt | AnalyzeStmt | CheckPointStmt | ClosePortalStmt @@ -890,7 +888,6 @@ stmt : | DoStmt | DropAssertStmt | DropCastStmt - | DropGroupStmt | DropOpClassStmt | DropOpFamilyStmt | DropOwnedStmt @@ -900,7 +897,6 @@ stmt : | DropTableSpaceStmt | DropTransformStmt | DropRoleStmt - | DropUserStmt | DropUserMappingStmt | DropdbStmt | ExecuteStmt @@ -1130,6 +1126,14 @@ AlterRoleStmt: n->options = $5; $$ = (Node *)n; } + | ALTER USER RoleSpec opt_with AlterOptRoleList + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = $3; + n->action = +1; /* add, if there are members */ + n->options = $5; + $$ = (Node *)n; + } ; opt_in_database: @@ -1154,37 +1158,23 @@ AlterRoleSetStmt: n->setstmt = $5; $$ = (Node *)n; } - ; - - -/***************************************************************************** - * - * Alter a postgresql DBMS user - * - *****************************************************************************/ - -AlterUserStmt: - ALTER USER RoleSpec opt_with AlterOptRoleList - { - AlterRoleStmt *n = makeNode(AlterRoleStmt); + | ALTER USER RoleSpec opt_in_database SetResetClause + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); n->role = $3; - n->action = +1; /* add, if there are members */ - n->options = $5; + n->database = $4; + n->setstmt = $5; $$ = (Node *)n; - } - ; - - -AlterUserSetStmt: - ALTER USER RoleSpec SetResetClause + } + | ALTER USER ALL opt_in_database SetResetClause { AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); - n->role = $3; - n->database = NULL; - n->setstmt = $4; + n->role = NULL; + n->database = $4; + n->setstmt = $5; $$ = (Node *)n; } - ; + ; /***************************************************************************** @@ -1211,17 +1201,7 @@ DropRoleStmt: n->roles = $5; $$ = (Node *)n; } - ; - -/***************************************************************************** - * - * Drop a postgresql DBMS user - * - * XXX As with DROP ROLE, no CASCADE/RESTRICT here. - *****************************************************************************/ - -DropUserStmt: - DROP USER role_list + | DROP USER role_list { DropRoleStmt *n = makeNode(DropRoleStmt); n->missing_ok = FALSE; @@ -1235,6 +1215,20 @@ DropUserStmt: n->missing_ok = TRUE; $$ = (Node *)n; } + | DROP GROUP_P role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = FALSE; + n->roles = $3; + $$ = (Node *)n; + } + | DROP GROUP_P IF_P EXISTS role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = TRUE; + n->roles = $5; + $$ = (Node *)n; + } ; @@ -1281,31 +1275,6 @@ add_drop: ADD_P { $$ = +1; } /***************************************************************************** * - * Drop a postgresql group - * - * XXX As with DROP ROLE, no CASCADE/RESTRICT here. - *****************************************************************************/ - -DropGroupStmt: - DROP GROUP_P role_list - { - DropRoleStmt *n = makeNode(DropRoleStmt); - n->missing_ok = FALSE; - n->roles = $3; - $$ = (Node *)n; - } - | DROP GROUP_P IF_P EXISTS role_list - { - DropRoleStmt *n = makeNode(DropRoleStmt); - n->missing_ok = TRUE; - n->roles = $5; - $$ = (Node *)n; - } - ; - - -/***************************************************************************** - * * Manipulate a schema * *****************************************************************************/ |
