sea_query/backend/
foreign_key_builder.rs

1use 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    /// Translate [`ForeignKeyCreateStatement`] into SQL statement.
13    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    /// Translate [`ForeignKeyDropStatement`] into SQL statement.
22    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    /// Translate [`ForeignKeyAction`] into SQL statement.
31    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    /// Translate [`TableRef`] into SQL statement.
47    fn prepare_table_ref_fk_stmt(&self, table_ref: &TableRef, sql: &mut dyn SqlWriter);
48
49    #[doc(hidden)]
50    /// Internal function to factor foreign key drop in table and outside.
51    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    /// Internal function to factor foreign key creation in table and outside.
60    fn prepare_foreign_key_create_statement_internal(
61        &self,
62        create: &ForeignKeyCreateStatement,
63        sql: &mut dyn SqlWriter,
64        mode: Mode,
65    );
66}