Skip to main content

surrealdb_expr/expr/
reference.rs

1use surrealdb_types::{SqlFormat, ToSql};
2
3use super::Value;
4use super::statements::info::InfoStructure;
5use crate::expr::Expr;
6
7#[derive(Clone, Debug, Eq, PartialEq, Hash)]
8pub struct Reference {
9	pub on_delete: ReferenceDeleteStrategy,
10}
11
12impl ToSql for Reference {
13	fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
14		let sql_reference: crate::sql::reference::Reference = self.clone().into();
15		sql_reference.fmt_sql(f, sql_fmt);
16	}
17}
18
19impl InfoStructure for Reference {
20	fn structure(self) -> Value {
21		map! {
22			"on_delete" => self.on_delete.structure(),
23		}
24		.into()
25	}
26}
27
28#[derive(Clone, Debug, Eq, PartialEq, Hash)]
29pub enum ReferenceDeleteStrategy {
30	Reject,
31	Ignore,
32	Cascade,
33	Unset,
34	Custom(Expr),
35}
36
37impl ToSql for ReferenceDeleteStrategy {
38	fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
39		let sql_reference_delete_strategy: crate::sql::reference::ReferenceDeleteStrategy =
40			self.clone().into();
41		sql_reference_delete_strategy.fmt_sql(f, sql_fmt);
42	}
43}
44
45impl InfoStructure for ReferenceDeleteStrategy {
46	fn structure(self) -> Value {
47		self.to_sql().into()
48	}
49}