sea_query/backend/
foreign_key_builder.rs1use crate::*;
2
3#[derive(Debug, PartialEq, Eq)]
4pub enum Mode {
5 Creation,
6 Alter,
7 TableAlter,
8}
9
10pub trait ForeignKeyBuilder: QuotedBuilder + TableRefBuilder {
11 fn prepare_foreign_key_create_statement(
13 &self,
14 create: &ForeignKeyCreateStatement,
15 sql: &mut dyn SqlWriter,
16 ) {
17 self.prepare_foreign_key_create_statement_internal(create, sql, Mode::Alter)
18 }
19
20 fn prepare_foreign_key_drop_statement(
22 &self,
23 drop: &ForeignKeyDropStatement,
24 sql: &mut dyn SqlWriter,
25 ) {
26 self.prepare_foreign_key_drop_statement_internal(drop, sql, Mode::Alter)
27 }
28
29 fn prepare_foreign_key_action(
31 &self,
32 foreign_key_action: &ForeignKeyAction,
33 sql: &mut dyn SqlWriter,
34 ) {
35 write!(
36 sql,
37 "{}",
38 match foreign_key_action {
39 ForeignKeyAction::Restrict => "RESTRICT",
40 ForeignKeyAction::Cascade => "CASCADE",
41 ForeignKeyAction::SetNull => "SET NULL",
42 ForeignKeyAction::NoAction => "NO ACTION",
43 ForeignKeyAction::SetDefault => "SET DEFAULT",
44 }
45 )
46 .unwrap()
47 }
48
49 fn prepare_table_ref_fk_stmt(&self, table_ref: &TableRef, sql: &mut dyn SqlWriter);
51
52 #[doc(hidden)]
53 fn prepare_foreign_key_drop_statement_internal(
55 &self,
56 drop: &ForeignKeyDropStatement,
57 sql: &mut dyn SqlWriter,
58 mode: Mode,
59 );
60
61 #[doc(hidden)]
62 fn prepare_foreign_key_create_statement_internal(
64 &self,
65 create: &ForeignKeyCreateStatement,
66 sql: &mut dyn SqlWriter,
67 mode: Mode,
68 );
69}