use datafusion::common::ScalarValue;
use datafusion::logical_expr::Expr as DFExpr;
use datafusion_functions::core::expr_fn as core_fn;
use hamelin_lib::func::defs::{UnaryMinus, UnaryPlus, UnaryRangePostfix, UnaryRangePrefix};
use super::DataFusionTranslationRegistry;
pub fn register(registry: &mut DataFusionTranslationRegistry) {
registry.register::<UnaryMinus>(|mut params| {
let x = params.take()?.expr;
Ok(DFExpr::Negative(Box::new(x)))
});
registry.register::<UnaryPlus>(|mut params| Ok(params.take()?.expr));
registry.register::<UnaryRangePrefix>(|mut params| {
let x = params.take()?.expr;
Ok(core_fn::named_struct(vec![
datafusion::logical_expr::lit("begin"),
datafusion::logical_expr::lit(ScalarValue::Null),
datafusion::logical_expr::lit("end"),
x,
]))
});
registry.register::<UnaryRangePostfix>(|mut params| {
let x = params.take()?.expr;
Ok(core_fn::named_struct(vec![
datafusion::logical_expr::lit("begin"),
x,
datafusion::logical_expr::lit("end"),
datafusion::logical_expr::lit(ScalarValue::Null),
]))
});
}