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