use serde::{Deserialize, Serialize};
use crate::kernel::DataType;
use crate::table::DataCheck;
use std::any::Any;
#[derive(Eq, PartialEq, Debug, Default, Clone, Serialize, Deserialize)]
pub struct Constraint {
pub name: String,
pub expr: String,
}
impl Constraint {
pub fn new(field_name: &str, invariant_sql: &str) -> Self {
Self {
name: field_name.to_string(),
expr: invariant_sql.to_string(),
}
}
}
impl DataCheck for Constraint {
fn get_name(&self) -> &str {
&self.name
}
fn get_expression(&self) -> &str {
&self.expr
}
fn as_any(&self) -> &dyn Any {
self
}
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub struct GeneratedColumn {
pub name: String,
pub generation_expr: String,
pub validation_expr: String,
pub data_type: DataType,
}
impl GeneratedColumn {
pub fn new(field_name: &str, sql_generation: &str, data_type: &DataType) -> Self {
Self {
name: field_name.to_string(),
generation_expr: sql_generation.to_string(),
validation_expr: format!("{field_name} <=> {sql_generation}"), data_type: data_type.clone(),
}
}
pub fn get_generation_expression(&self) -> &str {
&self.generation_expr
}
}
impl DataCheck for GeneratedColumn {
fn get_name(&self) -> &str {
&self.name
}
fn get_expression(&self) -> &str {
&self.validation_expr
}
fn as_any(&self) -> &dyn Any {
self
}
}