Skip to main content

surrealdb_sql/
reference.rs

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