sql/schema/
generated.rs

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}