Skip to main content

surql_parser/upstream/sql/statements/
create.rs

1use crate::upstream::fmt::{CoverStmts, Fmt};
2use crate::upstream::sql::{Data, Expr, Literal, Output};
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4#[derive(Clone, Debug, Eq, PartialEq)]
5#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6pub struct CreateStatement {
7	pub only: bool,
8	#[cfg_attr(
9        feature = "arbitrary",
10        arbitrary(with = crate::upstream::sql::arbitrary::atleast_one)
11    )]
12	pub what: Vec<Expr>,
13	pub data: Option<Data>,
14	pub output: Option<Output>,
15	pub timeout: Expr,
16}
17impl Default for CreateStatement {
18	fn default() -> Self {
19		Self {
20			only: Default::default(),
21			what: Default::default(),
22			data: Default::default(),
23			output: Default::default(),
24			timeout: Expr::Literal(Literal::None),
25		}
26	}
27}
28impl ToSql for CreateStatement {
29	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
30		write_sql!(f, fmt, "CREATE");
31		if self.only {
32			write_sql!(f, fmt, " ONLY");
33		}
34		write_sql!(
35			f,
36			fmt,
37			" {}",
38			Fmt::comma_separated(self.what.iter().map(CoverStmts))
39		);
40		if let Some(ref v) = self.data {
41			write_sql!(f, fmt, " {v}");
42		}
43		if let Some(ref v) = self.output {
44			write_sql!(f, fmt, " {v}");
45		}
46		if !matches!(self.timeout, Expr::Literal(Literal::None)) {
47			write_sql!(f, fmt, " TIMEOUT {}", CoverStmts(&self.timeout));
48		}
49	}
50}