Skip to main content

surrealdb_expr/expr/statements/alter/
user.rs

1use std::time::Duration;
2
3use surrealdb_types::{SqlFormat, ToSql};
4
5use super::AlterKind;
6use crate::expr::{Base, Expr, Literal};
7use crate::iam::ScramCredential;
8
9#[derive(Clone, Debug, Eq, PartialEq, Hash)]
10pub struct AlterUserStatement {
11	pub name: Expr,
12	pub base: Base,
13	pub if_exists: bool,
14	pub hash: Option<String>,
15	/// SCRAM verifier change. Outer `Option`: whether the SCRAM field is being
16	/// changed at all; inner `Option`: the new value (`None` clears it — e.g.
17	/// when the password is set via `PASSHASH`, invalidating any prior verifier).
18	pub scram: Option<Option<ScramCredential>>,
19	pub roles: AlterKind<Vec<String>>,
20	pub token_duration: AlterKind<Option<Duration>>,
21	pub session_duration: AlterKind<Option<Duration>>,
22	pub comment: AlterKind<String>,
23}
24
25impl Default for AlterUserStatement {
26	fn default() -> Self {
27		Self {
28			name: Expr::Literal(Literal::None),
29			base: Base::Root,
30			if_exists: false,
31			hash: None,
32			scram: None,
33			roles: AlterKind::None,
34			token_duration: AlterKind::None,
35			session_duration: AlterKind::None,
36			comment: AlterKind::None,
37		}
38	}
39}
40
41impl ToSql for AlterUserStatement {
42	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
43		let stmt: crate::sql::statements::alter::AlterUserStatement = self.clone().into();
44		stmt.fmt_sql(f, fmt);
45	}
46}