Skip to main content

surql_parser/upstream/sql/statements/define/
database.rs

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