Skip to main content

surql_parser/upstream/sql/statements/
delete.rs

1use 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}