sea_schema/mysql/writer/
foreign_key.rs

1use crate::mysql::def::{ForeignKeyAction, ForeignKeyInfo};
2use sea_query::{Alias, ForeignKey, ForeignKeyCreateStatement};
3
4impl ForeignKeyInfo {
5    pub fn write(&self) -> ForeignKeyCreateStatement {
6        let mut key = ForeignKey::create();
7        key.name(&self.name)
8            .to_tbl(Alias::new(&self.referenced_table));
9        for column in self.columns.iter() {
10            key.from_col(Alias::new(column.as_str()));
11        }
12        for ref_col in self.referenced_columns.iter() {
13            key.to_col(Alias::new(ref_col.as_str()));
14        }
15        key.on_update(match self.on_update {
16            ForeignKeyAction::Cascade => sea_query::ForeignKeyAction::Cascade,
17            ForeignKeyAction::SetNull => sea_query::ForeignKeyAction::SetNull,
18            ForeignKeyAction::SetDefault => sea_query::ForeignKeyAction::SetDefault,
19            ForeignKeyAction::Restrict => sea_query::ForeignKeyAction::Restrict,
20            ForeignKeyAction::NoAction => sea_query::ForeignKeyAction::NoAction,
21        });
22        key.on_delete(match self.on_delete {
23            ForeignKeyAction::Cascade => sea_query::ForeignKeyAction::Cascade,
24            ForeignKeyAction::SetNull => sea_query::ForeignKeyAction::SetNull,
25            ForeignKeyAction::SetDefault => sea_query::ForeignKeyAction::SetDefault,
26            ForeignKeyAction::Restrict => sea_query::ForeignKeyAction::Restrict,
27            ForeignKeyAction::NoAction => sea_query::ForeignKeyAction::NoAction,
28        });
29        key.to_owned()
30    }
31}