Skip to main content

surrealdb_core/sql/statements/define/
database.rs

1use std::fmt::{self, Display};
2
3use super::DefineKind;
4use crate::sql::Ident;
5use crate::sql::changefeed::ChangeFeed;
6use crate::val::Strand;
7
8#[derive(Clone, Debug, Default, PartialEq, Eq)]
9#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10pub struct DefineDatabaseStatement {
11	pub kind: DefineKind,
12	pub id: Option<u32>,
13	pub name: Ident,
14	pub comment: Option<Strand>,
15	pub changefeed: Option<ChangeFeed>,
16}
17
18impl Display for DefineDatabaseStatement {
19	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20		write!(f, "DEFINE DATABASE")?;
21		match self.kind {
22			DefineKind::Default => {}
23			DefineKind::Overwrite => write!(f, " OVERWRITE")?,
24			DefineKind::IfNotExists => write!(f, " IF NOT EXISTS")?,
25		}
26		write!(f, " {}", self.name)?;
27		if let Some(ref v) = self.comment {
28			write!(f, " COMMENT {v}")?
29		}
30		if let Some(ref v) = self.changefeed {
31			write!(f, " {v}")?;
32		}
33		Ok(())
34	}
35}
36
37impl From<DefineDatabaseStatement> for crate::expr::statements::DefineDatabaseStatement {
38	fn from(v: DefineDatabaseStatement) -> Self {
39		crate::expr::statements::DefineDatabaseStatement {
40			kind: v.kind.into(),
41			id: v.id,
42			name: v.name.into(),
43			comment: v.comment,
44			changefeed: v.changefeed.map(Into::into),
45		}
46	}
47}
48
49impl From<crate::expr::statements::DefineDatabaseStatement> for DefineDatabaseStatement {
50	fn from(v: crate::expr::statements::DefineDatabaseStatement) -> Self {
51		DefineDatabaseStatement {
52			kind: v.kind.into(),
53			id: v.id,
54			name: v.name.into(),
55			comment: v.comment,
56			changefeed: v.changefeed.map(Into::into),
57		}
58	}
59}