1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2pub enum DatabaseType {
3 Postgresql,
4 Sqlite,
5 SqlServer,
6}
7
8impl DatabaseType {
9 pub fn statement_separator(&self) -> &'static str {
10 match self {
11 DatabaseType::Postgresql => ";",
12 DatabaseType::Sqlite => ";",
13 DatabaseType::SqlServer => "\nGO",
14 }
15 }
16
17 pub fn max_key_name_length(&self) -> usize {
18 match self {
19 DatabaseType::Postgresql => 63,
20 DatabaseType::Sqlite => 128,
21 DatabaseType::SqlServer => 128,
22 }
23 }
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
27pub enum RelationType {
28 Cascade,
29 Enforce,
30 SetNull,
31 DoNothing,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
35pub enum BooleanMode {
36 Native,
37 YesNo,
38 YN,
39}
40
41impl Default for BooleanMode {
42 fn default() -> Self {
43 BooleanMode::Native
44 }
45}
46
47impl FromStr for BooleanMode {
48 type Err = String;
49
50 fn from_str(s: &str) -> Result<Self, Self::Err> {
51 match s.to_lowercase().as_str() {
52 "native" => Ok(BooleanMode::Native),
53 "yesno" => Ok(BooleanMode::YesNo),
54 "yn" => Ok(BooleanMode::YN),
55 _ => Err(format!("Unknown boolean mode: {}", s)),
56 }
57 }
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
61pub enum ForeignKeyMode {
62 None,
63 Relations,
64 Triggers,
65}
66
67impl Default for ForeignKeyMode {
68 fn default() -> Self {
69 ForeignKeyMode::Relations
70 }
71}
72
73impl FromStr for ForeignKeyMode {
74 type Err = String;
75
76 fn from_str(s: &str) -> Result<Self, Self::Err> {
77 match s.to_lowercase().as_str() {
78 "none" => Ok(ForeignKeyMode::None),
79 "relations" => Ok(ForeignKeyMode::Relations),
80 "triggers" => Ok(ForeignKeyMode::Triggers),
81 _ => Err(format!("Unknown foreign key mode: {}", s)),
82 }
83 }
84}
85
86#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
87pub enum OtherSqlOrder {
88 Bottom,
89 Top,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Hash)]
93pub enum TableOption {
94 Data,
95 NoExport,
96 Compress,
97}
98
99#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
100pub enum TriggerType {
101 Update,
102 Delete,
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
106pub enum KeyType {
107 Primary,
108 Unique,
109 Index,
110}
111
112#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
113pub enum LockEscalation {
114 Auto,
115 Disable,
116 Table,
117}
118
119impl Default for LockEscalation {
120 fn default() -> Self {
121 LockEscalation::Auto
122 }
123}
124
125impl FromStr for LockEscalation {
126 type Err = String;
127
128 fn from_str(s: &str) -> Result<Self, Self::Err> {
129 match s.to_lowercase().as_str() {
130 "auto" => Ok(LockEscalation::Auto),
131 "disable" => Ok(LockEscalation::Disable),
132 "table" => Ok(LockEscalation::Table),
133 _ => Err(format!("Unknown lock escalation: {}", s)),
134 }
135 }
136}
137
138pub use crate::model::version::Version;
140use std::str::FromStr;
141
142#[cfg(test)]
143mod tests {
144 use super::*;
145
146 #[test]
147 fn boolean_mode_default_is_native() {
148 let bm = BooleanMode::default();
149 assert_eq!(bm, BooleanMode::Native);
150 }
151
152 #[test]
153 fn enums_equality_and_copy() {
154 let db: DatabaseType = DatabaseType::Postgresql;
155 let db2 = db;
156 assert_eq!(db, db2);
157
158 let t1 = TriggerType::Update;
159 let t2 = TriggerType::Update;
160 assert_eq!(t1, t2);
161
162 let rel = RelationType::Cascade;
163 assert_eq!(rel, RelationType::Cascade);
164
165 let k = KeyType::Primary;
166 assert_eq!(k, KeyType::Primary);
167
168 let fk = ForeignKeyMode::Relations;
169 assert_eq!(fk, ForeignKeyMode::Relations);
170
171 let ord = OtherSqlOrder::Top;
172 assert_eq!(ord, OtherSqlOrder::Top);
173
174 let le = LockEscalation::Auto;
175 assert_eq!(le, LockEscalation::Auto);
176 }
177
178 #[test]
179 fn table_option_equality() {
180 assert_eq!(TableOption::Compress, TableOption::Compress);
181 assert_ne!(TableOption::Data, TableOption::NoExport);
182 }
183}