1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use crate::postgres::def::{ForeignKeyAction, PrimaryKey, References, Unique}; use sea_query::{Alias, ForeignKey, ForeignKeyCreateStatement, Index, IndexCreateStatement}; impl PrimaryKey { pub fn write(&self) -> IndexCreateStatement { let mut idx = Index::create().primary().name(&self.name); for col in self.columns.iter() { idx = idx.col(Alias::new(col)); } idx } } impl Unique { pub fn write(&self) -> IndexCreateStatement { let mut idx = Index::create().unique().name(&self.name); for col in self.columns.iter() { idx = idx.col(Alias::new(col)); } idx } } impl References { pub fn write(&self) -> ForeignKeyCreateStatement { let mut key = ForeignKey::create().name(&self.name); key = key.to_tbl(Alias::new(&self.table)); for column in self.columns.iter() { key = key.from_col(Alias::new(&column)); } for ref_col in self.foreign_columns.iter() { key = key.to_col(Alias::new(&ref_col)); } if let Some(on_update) = &self.on_update { key = key.on_update(match on_update { ForeignKeyAction::Cascade => sea_query::ForeignKeyAction::Cascade, ForeignKeyAction::SetNull => sea_query::ForeignKeyAction::SetNull, ForeignKeyAction::SetDefault => sea_query::ForeignKeyAction::SetDefault, ForeignKeyAction::Restrict => sea_query::ForeignKeyAction::Restrict, ForeignKeyAction::NoAction => sea_query::ForeignKeyAction::NoAction, }); } if let Some(on_delete) = &self.on_delete { key = key.on_delete(match on_delete { ForeignKeyAction::Cascade => sea_query::ForeignKeyAction::Cascade, ForeignKeyAction::SetNull => sea_query::ForeignKeyAction::SetNull, ForeignKeyAction::SetDefault => sea_query::ForeignKeyAction::SetDefault, ForeignKeyAction::Restrict => sea_query::ForeignKeyAction::Restrict, ForeignKeyAction::NoAction => sea_query::ForeignKeyAction::NoAction, }); } key } }