use crate::utils::direct_function_translation;
use crate::TranslationRegistry;
use hamelin_lib::{
func::defs::{
AggAll, AggAny, AggMax, AggMin, AnyValue, ApproxDistinct, ApproxPercentile, ArrayAgg, Avg,
CountAny, CountDistinct, CountIf, CountStar, MapAgg, MultimapAgg, Stddev, Sum,
},
sql::expression::apply::FunctionCallApply,
};
pub fn register(registry: &mut TranslationRegistry) {
registry.register::<CountStar>(direct_function_translation);
registry.register::<CountAny>(direct_function_translation);
registry.register::<CountDistinct>(|_, mut bindings| {
let what = bindings.take()?;
Ok(FunctionCallApply::with_one("count", what.sql)
.with_distinct()
.into())
});
registry.register::<ApproxDistinct>(direct_function_translation);
registry.register::<CountIf>(direct_function_translation);
registry.register::<Sum>(direct_function_translation);
registry.register::<Avg>(direct_function_translation);
registry.register::<Stddev>(direct_function_translation);
registry.register::<ApproxPercentile>(direct_function_translation);
registry.register::<AggMin>(direct_function_translation);
registry.register::<AggMax>(direct_function_translation);
registry.register::<AnyValue>(direct_function_translation);
registry.register::<ArrayAgg>(direct_function_translation);
registry.register::<MapAgg>(direct_function_translation);
registry.register::<MultimapAgg>(direct_function_translation);
registry.register::<AggAny>(|_, mut bindings| {
let x = bindings.take()?;
Ok(FunctionCallApply::with_one("bool_or", x.sql).into())
});
registry.register::<AggAll>(|_, mut bindings| {
let x = bindings.take()?;
Ok(FunctionCallApply::with_one("bool_and", x.sql).into())
});
}