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