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>
This commit is contained in:
parent
3eb9a5e7c4
commit
b374481221
3 changed files with 44 additions and 81 deletions
|
@ -38,10 +38,10 @@ ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> [ WIT
|
||||||
|
|
||||||
ALTER USER <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
|
ALTER USER <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
|
||||||
|
|
||||||
ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
|
ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
|
||||||
ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
|
ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
|
||||||
ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> RESET <replaceable>configuration_parameter</replaceable>
|
ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable>
|
||||||
ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> RESET ALL
|
ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] RESET ALL
|
||||||
|
|
||||||
<phrase>where <replaceable class="PARAMETER">role_specification</replaceable> can be:</phrase>
|
<phrase>where <replaceable class="PARAMETER">role_specification</replaceable> can be:</phrase>
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
||||||
AlterObjectDependsStmt AlterObjectSchemaStmt AlterOwnerStmt
|
AlterObjectDependsStmt AlterObjectSchemaStmt AlterOwnerStmt
|
||||||
AlterOperatorStmt AlterSeqStmt AlterSystemStmt AlterTableStmt
|
AlterOperatorStmt AlterSeqStmt AlterSystemStmt AlterTableStmt
|
||||||
AlterTblSpcStmt AlterExtensionStmt AlterExtensionContentsStmt AlterForeignTableStmt
|
AlterTblSpcStmt AlterExtensionStmt AlterExtensionContentsStmt AlterForeignTableStmt
|
||||||
AlterCompositeTypeStmt AlterUserStmt AlterUserMappingStmt AlterUserSetStmt
|
AlterCompositeTypeStmt AlterUserMappingStmt
|
||||||
AlterRoleStmt AlterRoleSetStmt AlterPolicyStmt
|
AlterRoleStmt AlterRoleSetStmt AlterPolicyStmt
|
||||||
AlterDefaultPrivilegesStmt DefACLAction
|
AlterDefaultPrivilegesStmt DefACLAction
|
||||||
AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt
|
AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt
|
||||||
|
@ -262,9 +262,9 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
||||||
CreateAssertStmt CreateTransformStmt CreateTrigStmt CreateEventTrigStmt
|
CreateAssertStmt CreateTransformStmt CreateTrigStmt CreateEventTrigStmt
|
||||||
CreateUserStmt CreateUserMappingStmt CreateRoleStmt CreatePolicyStmt
|
CreateUserStmt CreateUserMappingStmt CreateRoleStmt CreatePolicyStmt
|
||||||
CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt DoStmt
|
CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt DoStmt
|
||||||
DropGroupStmt DropOpClassStmt DropOpFamilyStmt DropPLangStmt DropStmt
|
DropOpClassStmt DropOpFamilyStmt DropPLangStmt DropStmt
|
||||||
DropAssertStmt DropCastStmt DropRoleStmt
|
DropAssertStmt DropCastStmt DropRoleStmt
|
||||||
DropUserStmt DropdbStmt DropTableSpaceStmt
|
DropdbStmt DropTableSpaceStmt
|
||||||
DropTransformStmt
|
DropTransformStmt
|
||||||
DropUserMappingStmt ExplainStmt FetchStmt
|
DropUserMappingStmt ExplainStmt FetchStmt
|
||||||
GrantStmt GrantRoleStmt ImportForeignSchemaStmt IndexStmt InsertStmt
|
GrantStmt GrantRoleStmt ImportForeignSchemaStmt IndexStmt InsertStmt
|
||||||
|
@ -841,8 +841,6 @@ stmt :
|
||||||
| AlterTSConfigurationStmt
|
| AlterTSConfigurationStmt
|
||||||
| AlterTSDictionaryStmt
|
| AlterTSDictionaryStmt
|
||||||
| AlterUserMappingStmt
|
| AlterUserMappingStmt
|
||||||
| AlterUserSetStmt
|
|
||||||
| AlterUserStmt
|
|
||||||
| AnalyzeStmt
|
| AnalyzeStmt
|
||||||
| CheckPointStmt
|
| CheckPointStmt
|
||||||
| ClosePortalStmt
|
| ClosePortalStmt
|
||||||
|
@ -890,7 +888,6 @@ stmt :
|
||||||
| DoStmt
|
| DoStmt
|
||||||
| DropAssertStmt
|
| DropAssertStmt
|
||||||
| DropCastStmt
|
| DropCastStmt
|
||||||
| DropGroupStmt
|
|
||||||
| DropOpClassStmt
|
| DropOpClassStmt
|
||||||
| DropOpFamilyStmt
|
| DropOpFamilyStmt
|
||||||
| DropOwnedStmt
|
| DropOwnedStmt
|
||||||
|
@ -900,7 +897,6 @@ stmt :
|
||||||
| DropTableSpaceStmt
|
| DropTableSpaceStmt
|
||||||
| DropTransformStmt
|
| DropTransformStmt
|
||||||
| DropRoleStmt
|
| DropRoleStmt
|
||||||
| DropUserStmt
|
|
||||||
| DropUserMappingStmt
|
| DropUserMappingStmt
|
||||||
| DropdbStmt
|
| DropdbStmt
|
||||||
| ExecuteStmt
|
| ExecuteStmt
|
||||||
|
@ -1130,6 +1126,14 @@ AlterRoleStmt:
|
||||||
n->options = $5;
|
n->options = $5;
|
||||||
$$ = (Node *)n;
|
$$ = (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:
|
opt_in_database:
|
||||||
|
@ -1154,37 +1158,23 @@ AlterRoleSetStmt:
|
||||||
n->setstmt = $5;
|
n->setstmt = $5;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
;
|
| ALTER USER RoleSpec opt_in_database SetResetClause
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Alter a postgresql DBMS user
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
AlterUserStmt:
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
AlterUserSetStmt:
|
|
||||||
ALTER USER RoleSpec SetResetClause
|
|
||||||
{
|
{
|
||||||
AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);
|
AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);
|
||||||
n->role = $3;
|
n->role = $3;
|
||||||
n->database = NULL;
|
n->database = $4;
|
||||||
n->setstmt = $4;
|
n->setstmt = $5;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
;
|
| ALTER USER ALL opt_in_database SetResetClause
|
||||||
|
{
|
||||||
|
AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);
|
||||||
|
n->role = NULL;
|
||||||
|
n->database = $4;
|
||||||
|
n->setstmt = $5;
|
||||||
|
$$ = (Node *)n;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -1211,17 +1201,7 @@ DropRoleStmt:
|
||||||
n->roles = $5;
|
n->roles = $5;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
;
|
| DROP USER role_list
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Drop a postgresql DBMS user
|
|
||||||
*
|
|
||||||
* XXX As with DROP ROLE, no CASCADE/RESTRICT here.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
DropUserStmt:
|
|
||||||
DROP USER role_list
|
|
||||||
{
|
{
|
||||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||||
n->missing_ok = FALSE;
|
n->missing_ok = FALSE;
|
||||||
|
@ -1235,6 +1215,20 @@ DropUserStmt:
|
||||||
n->missing_ok = TRUE;
|
n->missing_ok = TRUE;
|
||||||
$$ = (Node *)n;
|
$$ = (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;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1279,31 +1273,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
|
* Manipulate a schema
|
||||||
|
|
|
@ -310,9 +310,9 @@ ERROR: syntax error at or near "CURRENT_ROLE"
|
||||||
LINE 1: ALTER USER CURRENT_ROLE WITH LOGIN;
|
LINE 1: ALTER USER CURRENT_ROLE WITH LOGIN;
|
||||||
^
|
^
|
||||||
ALTER USER ALL WITH REPLICATION; -- error
|
ALTER USER ALL WITH REPLICATION; -- error
|
||||||
ERROR: syntax error at or near "ALL"
|
ERROR: syntax error at or near "WITH"
|
||||||
LINE 1: ALTER USER ALL WITH REPLICATION;
|
LINE 1: ALTER USER ALL WITH REPLICATION;
|
||||||
^
|
^
|
||||||
ALTER USER SESSION_ROLE WITH NOREPLICATION; -- error
|
ALTER USER SESSION_ROLE WITH NOREPLICATION; -- error
|
||||||
ERROR: role "session_role" does not exist
|
ERROR: role "session_role" does not exist
|
||||||
ALTER USER PUBLIC WITH NOREPLICATION; -- error
|
ALTER USER PUBLIC WITH NOREPLICATION; -- error
|
||||||
|
@ -392,9 +392,6 @@ ALTER USER SESSION_USER SET application_name to 'BAR';
|
||||||
ALTER USER "current_user" SET application_name to 'FOOFOO';
|
ALTER USER "current_user" SET application_name to 'FOOFOO';
|
||||||
ALTER USER "Public" SET application_name to 'BARBAR';
|
ALTER USER "Public" SET application_name to 'BARBAR';
|
||||||
ALTER USER ALL SET application_name to 'SLAP';
|
ALTER USER ALL SET application_name to 'SLAP';
|
||||||
ERROR: syntax error at or near "ALL"
|
|
||||||
LINE 1: ALTER USER ALL SET application_name to 'SLAP';
|
|
||||||
^
|
|
||||||
SELECT * FROM chksetconfig();
|
SELECT * FROM chksetconfig();
|
||||||
db | role | rolkeyword | setconfig
|
db | role | rolkeyword | setconfig
|
||||||
-----+------------------+--------------+---------------------------
|
-----+------------------+--------------+---------------------------
|
||||||
|
@ -419,9 +416,6 @@ ALTER USER SESSION_USER RESET application_name;
|
||||||
ALTER USER "current_user" RESET application_name;
|
ALTER USER "current_user" RESET application_name;
|
||||||
ALTER USER "Public" RESET application_name;
|
ALTER USER "Public" RESET application_name;
|
||||||
ALTER USER ALL RESET application_name;
|
ALTER USER ALL RESET application_name;
|
||||||
ERROR: syntax error at or near "ALL"
|
|
||||||
LINE 1: ALTER USER ALL RESET application_name;
|
|
||||||
^
|
|
||||||
SELECT * FROM chksetconfig();
|
SELECT * FROM chksetconfig();
|
||||||
db | role | rolkeyword | setconfig
|
db | role | rolkeyword | setconfig
|
||||||
----+------+------------+-----------
|
----+------+------------+-----------
|
||||||
|
|
Loading…
Reference in a new issue