diff --git a/doc/sql/query.ebnf b/doc/sql/query.ebnf index cd02b46b6fb1654ffe8b0f194ea44ce5f1388f0a..309fef2cd2587babe3432d3c01b7817781f75b7a 100644 --- a/doc/sql/query.ebnf +++ b/doc/sql/query.ebnf @@ -22,7 +22,7 @@ body ::= (insert | update | delete) create_role ::= 'CREATE ROLE' role ('OPTION' '(' ('TIMEOUT' '=' double)')')? create_table ::= 'CREATE TABLE' table '(' column (',' column)* ',' primary_key ')' ('USING' ('MEMTX' | 'VINYL'))? distribution ('OPTION' '(' ('TIMEOUT' '=' double)')')? create_user ::= 'CREATE USER' user 'WITH'? 'PASSWORD' "'" password "'" ('USING' ('CHAP-SHA1' | 'LDAP' | 'MD5'))? ('OPTION' '(' ('TIMEOUT' '=' double)')')? -alter_user ::= 'ALTER USER' user 'WITH'? ('LOGIN' | 'NOLOGIN' | 'PASSWORD' "'" password "'" ('USING' ('CHAP-SHA1' | 'LDAP' | 'MD5'))?) ('OPTION' '(' ('TIMEOUT' '=' double)')')? +alter_user ::= 'ALTER USER' user 'WITH'? ('LOGIN' | 'NOLOGIN' | 'PASSWORD' "'" password "'" ('USING' ('CHAP-SHA1' | 'LDAP' | 'MD5'))? | 'RENAME TO' user) ('OPTION' '(' ('TIMEOUT' '=' double)')')? column ::= name ('BOOL' | 'DECIMAL' | 'DOUBLE' | 'INT' | 'NUMBER' | 'SCALAR' | 'STRING' | 'TEXT' | 'UNSIGNED' | 'VARCHAR') (('NOT'?) 'NULL')? primary_key ::= 'PRIMARY KEY' '(' name (',' name)* ')' distribution ::= 'GLOBAL' | ('DISTRIBUTED BY' '(' name (',' name)* ')') diff --git a/sbroad-core/src/frontend/sql.rs b/sbroad-core/src/frontend/sql.rs index e96d8c1ccb9aaf04dc9a9d4ea1f5e96dc755375d..771c0b1376e17b6f0bc4024d46b1851201c07316 100644 --- a/sbroad-core/src/frontend/sql.rs +++ b/sbroad-core/src/frontend/sql.rs @@ -2567,6 +2567,16 @@ impl AbstractSyntaxTree { auth_method, } } + Rule::AlterRename => { + let identifier_node_id = alter_option_node + .children + .first() + .expect("Expected to see an identifier node under AlterRename"); + let identifier = parse_identifier(self, *identifier_node_id)?; + AlterOption::Rename { + new_name: identifier, + } + } _ => { return Err(SbroadError::Invalid( Entity::ParseNode, diff --git a/sbroad-core/src/frontend/sql/query.pest b/sbroad-core/src/frontend/sql/query.pest index c394039a908d8d7f8b6152cab1e19e25ceb0eef7..6ad8fb4555f237897c33f43ec8902a7afe22988e 100644 --- a/sbroad-core/src/frontend/sql/query.pest +++ b/sbroad-core/src/frontend/sql/query.pest @@ -15,10 +15,11 @@ ACL = _{ DropRole | DropUser | CreateRole | CreateUser | AlterUser | GrantPrivil AlterUser = { ^"alter" ~ ^"user" ~ Identifier ~ (^"with")? ~ AlterOption ~ TimeoutOption? } - AlterOption = _{ AlterLogin | AlterNoLogin | AlterPassword } + AlterOption = _{ AlterLogin | AlterNoLogin | AlterPassword | AlterRename } AlterLogin = { ^"login" } AlterNoLogin = { ^"nologin" } AlterPassword = { ^"password" ~ SingleQuotedString ~ AuthMethod? } + AlterRename = { ^"rename" ~ ^"to" ~ Identifier } AuthMethod = { ^"using" ~ (ChapSha1 | Md5 | Ldap) } ChapSha1 = { ^"chap-sha1" } Md5 = { ^"md5" } diff --git a/sbroad-core/src/ir/acl.rs b/sbroad-core/src/ir/acl.rs index 1bfb77377ec332664af239e3388b5dac04a56a14..4d3d73e3e38c40356eb00c0e87465e16e56d0215 100644 --- a/sbroad-core/src/ir/acl.rs +++ b/sbroad-core/src/ir/acl.rs @@ -181,6 +181,9 @@ pub enum AlterOption { password: String, auth_method: String, }, + Rename { + new_name: String, + }, } #[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]