Skip to main content

surql_parser/upstream/sql/
reference.rs

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