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