use self::private::SqlOrdAggregate;
use crate::expression::functions::sql_function;
sql_function! {
#[aggregate]
fn max<ST: SqlOrdAggregate>(expr: ST) -> ST::Ret;
}
sql_function! {
#[aggregate]
fn min<ST: SqlOrdAggregate>(expr: ST) -> ST::Ret;
}
mod private {
use crate::sql_types::{IntoNullable, SingleValue, SqlOrd, SqlType};
pub trait SqlOrdAggregate: SingleValue {
type Ret: SqlType + SingleValue;
}
impl<T> SqlOrdAggregate for T
where
T: SqlOrd + IntoNullable + SingleValue,
T::Nullable: SqlType + SingleValue,
{
type Ret = T::Nullable;
}
}