use super::super::naming::snake;
use crate::database::introspection::{Column, Table};
pub(super) fn new_columns(table: &Table) -> Vec<&Column> {
table
.columns
.iter()
.filter(|column| !column.auto_increment)
.collect()
}
pub(super) fn patch_columns(table: &Table) -> Vec<&Column> {
table
.columns
.iter()
.filter(|column| !table.primary_key.contains(&column.name))
.collect()
}
pub(super) fn optional(column: &Column) -> bool {
column.nullable || column.default.is_some()
}
pub(super) fn present(columns: &[&Column]) -> String {
present_from(columns, "input")
}
pub(super) fn present_from(columns: &[&Column], input: &str) -> String {
columns
.iter()
.map(|column| format!("{input}.{}.is_some()", snake(&column.name)))
.collect::<Vec<_>>()
.join(" || ")
}