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 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub collation_oid: Option<u32>,
20 pub default: Option<Expr>,
21 pub not_null: Option<DomainNotNull>,
22 pub checks: Vec<DomainCheck>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct DomainNotNull {
27 pub name: Option<String>,
28 #[serde(default)]
29 pub catalog_identity: Option<ConstraintCatalogIdentity>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct DomainCheck {
34 pub name: Option<String>,
35 #[serde(default)]
36 pub catalog_identity: Option<ConstraintCatalogIdentity>,
37 pub expression: Expr,
38 #[serde(default = "super::default_true")]
39 pub validated: bool,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct AlterDomain {
44 pub name: String,
45 pub action: AlterDomainAction,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub enum AlterDomainAction {
50 AddCheck {
51 constraint: Box<DomainCheck>,
52 },
53 AddNotNull {
54 constraint: DomainNotNull,
55 },
56 DropConstraint {
57 name: String,
58 if_exists: bool,
59 cascade: bool,
60 },
61 ValidateConstraint {
62 name: String,
63 },
64}