uqa_sql/schema/columns/
publication.rs1use crate::ast::{ColumnDef, ColumnType, Expr, GeneratedColumn};
9
10pub enum ColumnProperty<'a> {
11 Default(Option<Expr>),
12 Generated(Option<GeneratedColumn>),
13 Type(&'a ColumnType),
14}
15pub fn column_mut<'a>(
16 columns: &'a mut [ColumnDef],
17 table: &str,
18 column: &str,
19) -> Result<&'a mut ColumnDef, String> {
20 columns
21 .iter_mut()
22 .find(|definition| definition.name == column)
23 .ok_or_else(|| format!("column `{column}` does not exist on table `{table}`"))
24}
25pub fn apply_property(
26 columns: &mut [ColumnDef],
27 table: &str,
28 column: &str,
29 property: ColumnProperty<'_>,
30) -> Result<(), String> {
31 let definition = column_mut(columns, table, column)?;
32 match property {
33 ColumnProperty::Default(default) => definition.default = default,
34 ColumnProperty::Generated(generated) => definition.generated = generated,
35 ColumnProperty::Type(ty) => definition.ty.clone_from(ty),
36 }
37 Ok(())
38}
39pub fn set_not_null(
40 columns: &mut [ColumnDef],
41 table: &str,
42 column: &str,
43 not_null: bool,
44) -> Result<(), String> {
45 let definition = column_mut(columns, table, column)?;
46 definition.not_null = not_null;
47 definition.not_null_explicit = not_null;
48 definition.not_null_is_local = true;
49 definition.not_null_validated = true;
50 definition.not_null_no_inherit = false;
51 if !not_null {
52 definition.not_null_name = None;
53 }
54 Ok(())
55}