From 6296134eb552be578e8bb67b3db0fbe728319410 Mon Sep 17 00:00:00 2001 From: EmirVildanov <reddog201030@gmail.com> Date: Fri, 15 Mar 2024 13:05:02 +0300 Subject: [PATCH] feat: add support of user renaming --- doc/sql/query.ebnf | 2 +- sbroad-core/src/frontend/sql.rs | 10 ++++++++++ sbroad-core/src/frontend/sql/query.pest | 3 ++- sbroad-core/src/ir/acl.rs | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/sql/query.ebnf b/doc/sql/query.ebnf index cd02b46b6f..309fef2cd2 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 e96d8c1ccb..771c0b1376 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 c394039a90..6ad8fb4555 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 1bfb77377e..4d3d73e3e3 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)] -- GitLab