surql_parser/upstream/sql/
reference.rs1use 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}