surql_parser/upstream/sql/statements/define/
database.rs1use 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}