Skip to main content

surrealdb_sql/statements/define/
database.rs

1use surrealdb_types::{SqlFormat, ToSql, write_sql};
2
3use super::DefineKind;
4use crate::changefeed::ChangeFeed;
5use crate::{CoverStmts, Expr, Literal};
6
7#[derive(Clone, Debug, PartialEq, Eq)]
8#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
9pub struct DefineDatabaseStatement {
10	pub kind: DefineKind,
11	pub id: Option<u32>,
12	pub name: Expr,
13	pub strict: bool,
14	pub comment: Expr,
15	pub changefeed: Option<ChangeFeed>,
16}
17
18impl Default for DefineDatabaseStatement {
19	fn default() -> Self {
20		Self {
21			kind: DefineKind::Default,
22			id: None,
23			name: Expr::Literal(Literal::None),
24			comment: Expr::Literal(Literal::None),
25			changefeed: None,
26			strict: false,
27		}
28	}
29}
30
31impl ToSql for DefineDatabaseStatement {
32	fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
33		write_sql!(f, sql_fmt, "DEFINE DATABASE");
34		match self.kind {
35			DefineKind::Default => {}
36			DefineKind::Overwrite => write_sql!(f, sql_fmt, " OVERWRITE"),
37			DefineKind::IfNotExists => write_sql!(f, sql_fmt, " IF NOT EXISTS"),
38		}
39		write_sql!(f, sql_fmt, " {}", CoverStmts(&self.name));
40		if self.strict {
41			f.push_str(" STRICT");
42		}
43		if !matches!(self.comment, Expr::Literal(Literal::None)) {
44			write_sql!(f, sql_fmt, " COMMENT {}", CoverStmts(&self.comment));
45		}
46		if let Some(ref v) = self.changefeed {
47			write_sql!(f, sql_fmt, " {v}");
48		}
49	}
50}