1use crate::util::SqlExtension;
2use crate::{Dialect, Expr, ToSql};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum GenerationTime {
7 Always,
8 ByDefault,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub enum GenerationValue {
14 Identity,
15 Expr(Expr),
16}
17
18#[derive(Debug, Clone, PartialEq, Eq)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct Generated {
21 pub time: GenerationTime,
22 pub value: GenerationValue,
23}
24
25impl ToSql for Generated {
26 fn write_sql(&self, buf: &mut String, dialect: Dialect) {
27 buf.push_str("GENERATED ");
28 match self.time {
29 GenerationTime::Always => buf.push_str("ALWAYS "),
30 GenerationTime::ByDefault => buf.push_str("BY DEFAULT "),
31 }
32 buf.push_str("AS ");
33 match self.value {
34 GenerationValue::Identity => buf.push_str("IDENTITY"),
35 GenerationValue::Expr(ref expr) => {
36 buf.push_sql(expr, dialect);
37 buf.push_str(" STORED");
38 }
39 }
40 }
41}