sea_schema/postgres/writer/
constraints.rs

1use 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}