1use serde::{Deserialize, Serialize};
10
11use super::{ColumnType, ConstraintCatalogIdentity, Expr};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct CreateDomain {
15 pub name: String,
16 pub base: ColumnType,
17 pub collation: Option<String>,
18 pub default: Option<Expr>,
19 pub not_null: Option<DomainNotNull>,
20 pub checks: Vec<DomainCheck>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct DomainNotNull {
25 pub name: Option<String>,
26 #[serde(default)]
27 pub catalog_identity: Option<ConstraintCatalogIdentity>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct DomainCheck {
32 pub name: Option<String>,
33 #[serde(default)]
34 pub catalog_identity: Option<ConstraintCatalogIdentity>,
35 pub expression: Expr,
36 #[serde(default = "super::default_true")]
37 pub validated: bool,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct AlterDomain {
42 pub name: String,
43 pub action: AlterDomainAction,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub enum AlterDomainAction {
48 AddCheck {
49 constraint: Box<DomainCheck>,
50 },
51 AddNotNull {
52 constraint: DomainNotNull,
53 },
54 DropConstraint {
55 name: String,
56 if_exists: bool,
57 cascade: bool,
58 },
59 ValidateConstraint {
60 name: String,
61 },
62}