use crate::database::introspection::{Column, Table};
pub(super) fn clock(table: &Table) -> Option<&Column> {
table.column("updated_at").filter(|column| {
timestamp(column) && !column.auto_increment
&& !table.primary_key.contains(&column.name)
})
}
fn timestamp(column: &Column) -> bool {
column.sql_type.trim().starts_with("timestamp")
}
pub(super) fn payload<'a>(table: &'a Table, key: &[String]) -> Vec<&'a Column> {
table.columns.iter().filter(|column| {
!column.auto_increment && !table.primary_key.contains(&column.name)
&& !key.contains(&column.name)
&& column.name != "created_at" && column.name != "updated_at"
&& !(timestamp(column) && column.default.is_some())
}).collect()
}
pub(super) fn text(column: &Column) -> bool {
let kind = column.sql_type.trim();
kind == "text" || kind.starts_with("character varying") || kind.starts_with("varchar")
}