sea_query/backend/
foreign_key_builder.rs

1use crate::*;
2
3#[derive(Debug, PartialEq, Eq)]
4pub enum Mode {
5    Creation,
6    Alter,
7    TableAlter,
8}
9
10pub trait ForeignKeyBuilder: QuotedBuilder + TableRefBuilder {
11    /// Translate [`ForeignKeyCreateStatement`] into SQL statement.
12    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    /// Translate [`ForeignKeyDropStatement`] into SQL statement.
21    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    /// Translate [`ForeignKeyAction`] into SQL statement.
30    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    /// Translate [`TableRef`] into SQL statement.
50    fn prepare_table_ref_fk_stmt(&self, table_ref: &TableRef, sql: &mut dyn SqlWriter);
51
52    #[doc(hidden)]
53    /// Internal function to factor foreign key drop in table and outside.
54    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    /// Internal function to factor foreign key creation in table and outside.
63    fn prepare_foreign_key_create_statement_internal(
64        &self,
65        create: &ForeignKeyCreateStatement,
66        sql: &mut dyn SqlWriter,
67        mode: Mode,
68    );
69}