surrealdb_sql/
reference.rs1use crate::{CoverStmts, Expr};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
5pub struct Reference {
6 pub on_delete: ReferenceDeleteStrategy,
7}
8
9impl surrealdb_types::ToSql for Reference {
10 fn fmt_sql(&self, f: &mut String, fmt: surrealdb_types::SqlFormat) {
11 f.push_str("ON DELETE ");
12 self.on_delete.fmt_sql(f, fmt);
13 }
14}
15
16impl surrealdb_types::ToSql for ReferenceDeleteStrategy {
17 fn fmt_sql(&self, f: &mut String, fmt: surrealdb_types::SqlFormat) {
18 match self {
19 ReferenceDeleteStrategy::Reject => f.push_str("REJECT"),
20 ReferenceDeleteStrategy::Ignore => f.push_str("IGNORE"),
21 ReferenceDeleteStrategy::Cascade => f.push_str("CASCADE"),
22 ReferenceDeleteStrategy::Unset => f.push_str("UNSET"),
23 ReferenceDeleteStrategy::Custom(v) => {
24 f.push_str("THEN ");
25 CoverStmts(v).fmt_sql(f, fmt);
26 }
27 }
28 }
29}
30
31#[derive(Clone, Debug, PartialEq, Eq)]
32#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
33pub enum ReferenceDeleteStrategy {
34 Reject,
35 Ignore,
36 Cascade,
37 Unset,
38 Custom(Expr),
39}