pub struct CreateUserStatement {
pub user_name: String,
pub if_not_exists: bool,
pub attributes: Vec<RoleAttribute>,
pub default_roles: Vec<String>,
pub options: Vec<UserOption>,
}Expand description
CREATE USER statement builder
This struct provides a fluent API for building CREATE USER statements.
§PostgreSQL
PostgreSQL CREATE USER is an alias for CREATE ROLE WITH LOGIN.
Use the `attribute()` method to add role attributes.
§MySQL
MySQL CREATE USER supports:
- IF NOT EXISTS clause
- User@host specification
- DEFAULT ROLE clause
- User options
§Examples
Create a simple user:
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user");Create a user with password (PostgreSQL):
use reinhardt_query::dcl::{CreateUserStatement, RoleAttribute};
let stmt = CreateUserStatement::new()
.user("app_user")
.attribute(RoleAttribute::Password("password123".to_string()))
.attribute(RoleAttribute::ConnectionLimit(5));Create a user with default role (MySQL):
use reinhardt_query::dcl::{CreateUserStatement, UserOption};
let stmt = CreateUserStatement::new()
.user("app_user@localhost")
.if_not_exists(true)
.default_role(vec!["app_role".to_string()])
.option(UserOption::Comment("My application user".to_string()));Fields§
§user_name: StringUser name (with optional @host for MySQL)
if_not_exists: boolIF NOT EXISTS clause (MySQL only)
attributes: Vec<RoleAttribute>PostgreSQL role attributes (PostgreSQL only)
default_roles: Vec<String>MySQL DEFAULT ROLE clause (MySQL only)
options: Vec<UserOption>MySQL user options
Implementations§
Source§impl CreateUserStatement
impl CreateUserStatement
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new CREATE USER statement
§Examples
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new();Sourcepub fn user(self, name: impl Into<String>) -> Self
pub fn user(self, name: impl Into<String>) -> Self
Set the user name
§Examples
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user");MySQL with host:
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user@localhost");Sourcepub fn if_not_exists(self, flag: bool) -> Self
pub fn if_not_exists(self, flag: bool) -> Self
Set IF NOT EXISTS flag (MySQL only)
§Examples
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user")
.if_not_exists(true);Sourcepub fn attribute(self, attr: RoleAttribute) -> Self
pub fn attribute(self, attr: RoleAttribute) -> Self
Add a single PostgreSQL role attribute
§Examples
use reinhardt_query::dcl::{CreateUserStatement, RoleAttribute};
let stmt = CreateUserStatement::new()
.user("app_user")
.attribute(RoleAttribute::Password("secret".to_string()))
.attribute(RoleAttribute::CreateDb);Sourcepub fn attributes(self, attrs: Vec<RoleAttribute>) -> Self
pub fn attributes(self, attrs: Vec<RoleAttribute>) -> Self
Set all PostgreSQL role attributes at once
§Examples
use reinhardt_query::dcl::{CreateUserStatement, RoleAttribute};
let stmt = CreateUserStatement::new()
.user("app_user")
.attributes(vec![
RoleAttribute::Password("secret".to_string()),
RoleAttribute::CreateDb,
RoleAttribute::ConnectionLimit(10),
]);Sourcepub fn default_role(self, roles: Vec<String>) -> Self
pub fn default_role(self, roles: Vec<String>) -> Self
Set DEFAULT ROLE clause (MySQL only)
§Examples
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user@localhost")
.default_role(vec!["app_role".to_string(), "admin_role".to_string()]);Sourcepub fn option(self, opt: UserOption) -> Self
pub fn option(self, opt: UserOption) -> Self
Add a single MySQL user option
§Examples
use reinhardt_query::dcl::{CreateUserStatement, UserOption};
let stmt = CreateUserStatement::new()
.user("app_user")
.option(UserOption::Comment("Application user".to_string()));Sourcepub fn options(self, opts: Vec<UserOption>) -> Self
pub fn options(self, opts: Vec<UserOption>) -> Self
Set all MySQL user options at once
§Examples
use reinhardt_query::dcl::{CreateUserStatement, UserOption};
let stmt = CreateUserStatement::new()
.user("app_user")
.options(vec![
UserOption::Comment("Application user".to_string()),
UserOption::AccountLock,
]);Sourcepub fn validate(&self) -> Result<(), String>
pub fn validate(&self) -> Result<(), String>
Validate the CREATE USER statement
§Validation Rules
- User name cannot be empty
§Examples
use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new()
.user("app_user");
assert!(stmt.validate().is_ok());use reinhardt_query::dcl::CreateUserStatement;
let stmt = CreateUserStatement::new();
assert!(stmt.validate().is_err());Trait Implementations§
Source§impl Clone for CreateUserStatement
impl Clone for CreateUserStatement
Source§fn clone(&self) -> CreateUserStatement
fn clone(&self) -> CreateUserStatement
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more