sql/schema/
column.rs

1use crate::query::Expr;
2use crate::schema::constraint::Constraint;
3use crate::util::SqlExtension;
4use crate::{Dialect, Generated, ToSql, Type};
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct Column {
9    pub name: String,
10    pub typ: Type,
11    pub nullable: bool,
12    pub primary_key: bool,
13    #[cfg_attr(
14        feature = "serde",
15        serde(default, skip_serializing_if = "Option::is_none")
16    )]
17    pub default: Option<Expr>,
18    #[cfg_attr(
19        feature = "serde",
20        serde(default, skip_serializing_if = "Option::is_none")
21    )]
22    pub constraint: Option<Constraint>,
23    #[cfg_attr(
24        feature = "serde",
25        serde(default, skip_serializing_if = "Option::is_none")
26    )]
27    pub generated: Option<Generated>,
28}
29
30impl ToSql for Column {
31    fn write_sql(&self, buf: &mut String, dialect: Dialect) {
32        buf.push_quoted(&self.name);
33        buf.push(' ');
34        buf.push_str(&self.typ.to_sql(dialect));
35        if let Some(generated) = &self.generated {
36            buf.push(' ');
37            buf.push_sql(generated, dialect);
38        }
39        if !self.nullable {
40            buf.push_str(" NOT NULL");
41        }
42        if self.primary_key {
43            buf.push_str(" PRIMARY KEY");
44        }
45        if let Some(default) = &self.default {
46            buf.push_str(" DEFAULT ");
47            buf.push_sql(default, dialect);
48        }
49        if let Some(constraint) = &self.constraint {
50            buf.push(' ');
51            buf.push_sql(constraint, dialect);
52        }
53    }
54}