vespertide_core/schema/
constraint.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::schema::{
5    ReferenceAction,
6    names::{ColumnName, TableName},
7};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
10#[serde(rename_all = "snake_case", tag = "type")]
11pub enum TableConstraint {
12    PrimaryKey {
13        columns: Vec<ColumnName>,
14    },
15    Unique {
16        name: Option<String>,
17        columns: Vec<ColumnName>,
18    },
19    ForeignKey {
20        name: Option<String>,
21        columns: Vec<ColumnName>,
22        ref_table: TableName,
23        ref_columns: Vec<ColumnName>,
24        on_delete: Option<ReferenceAction>,
25        on_update: Option<ReferenceAction>,
26    },
27    Check {
28        name: Option<String>,
29        expr: String,
30    },
31}