use std::marker::PhantomData;
pub use avg_column::*;
pub use count_column::*;
pub use max_column::*;
pub use min_column::*;
pub use round_column::*;
pub use sqrt_column::*;
pub use string_column::*;
pub use sum_column::*;
pub use text_cast_column::*;
use crate::prelude::{BoxedSql, ColumnType, Entity};
mod string_column;
mod round_column;
mod sqrt_column;
mod text_cast_column;
mod count_column;
mod avg_column;
mod sum_column;
mod min_column;
mod max_column;
pub struct VirtualColumn<T: ColumnType, U: Entity> {
sql: BoxedSql,
phantom_1: PhantomData<T>,
phantom_2: PhantomData<U>,
}
impl<T: ColumnType, U: Entity> VirtualColumn<T, U> {
pub fn new(sql: BoxedSql) -> VirtualColumn<T, U> {
VirtualColumn {
sql,
phantom_1: PhantomData,
phantom_2: PhantomData,
}
}
pub(crate) fn get_sql(&self) -> BoxedSql {
self.sql.clone()
}
pub fn pi() -> VirtualColumn<f64, U> {
VirtualColumn::new(BoxedSql::new(String::from("PI()"), vec![]))
}
pub fn random() -> VirtualColumn<f64, U> {
VirtualColumn::new(BoxedSql::new(String::from("RANDOM()"), vec![]))
}
}