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