sea_schema/mysql/writer/
foreign_key.rs1use 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}