surql_parser/upstream/sql/statements/
delete.rs1use crate::upstream::fmt::{CoverStmts, Fmt};
2use crate::upstream::sql::{Cond, Explain, Expr, Literal, Output, With};
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4#[derive(Clone, Debug, Eq, PartialEq)]
5#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6pub struct DeleteStatement {
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 with: Option<With>,
14 pub cond: Option<Cond>,
15 pub output: Option<Output>,
16 pub timeout: Expr,
17 pub explain: Option<Explain>,
18}
19impl Default for DeleteStatement {
20 fn default() -> Self {
21 Self {
22 only: Default::default(),
23 what: Default::default(),
24 with: Default::default(),
25 cond: Default::default(),
26 output: Default::default(),
27 timeout: Expr::Literal(Literal::None),
28 explain: Default::default(),
29 }
30 }
31}
32impl ToSql for DeleteStatement {
33 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
34 write_sql!(f, fmt, "DELETE");
35 if self.only {
36 f.push_str(" ONLY")
37 }
38 write_sql!(
39 f,
40 fmt,
41 " {}",
42 Fmt::comma_separated(self.what.iter().map(CoverStmts))
43 );
44 if let Some(ref v) = self.with {
45 write_sql!(f, fmt, " {v}");
46 }
47 if let Some(ref v) = self.cond {
48 write_sql!(f, fmt, " {v}");
49 }
50 if let Some(ref v) = self.output {
51 write_sql!(f, fmt, " {v}");
52 }
53 if !matches!(self.timeout, Expr::Literal(Literal::None)) {
54 write_sql!(f, fmt, " TIMEOUT {}", CoverStmts(&self.timeout));
55 }
56 if let Some(ref v) = self.explain {
57 write_sql!(f, fmt, " {v}");
58 }
59 }
60}