reifydb_routine/function/math/
pi.rs1use std::f64::consts::PI;
5
6use reifydb_core::value::column::{ColumnWithName, buffer::ColumnBuffer, columns::Columns};
7use reifydb_type::value::r#type::Type;
8
9use crate::routine::{Function, FunctionKind, Routine, RoutineInfo, context::FunctionContext, error::RoutineError};
10
11pub struct Pi {
12 info: RoutineInfo,
13}
14
15impl Default for Pi {
16 fn default() -> Self {
17 Self::new()
18 }
19}
20
21impl Pi {
22 pub fn new() -> Self {
23 Self {
24 info: RoutineInfo::new("math::pi"),
25 }
26 }
27}
28
29impl<'a> Routine<FunctionContext<'a>> for Pi {
30 fn info(&self) -> &RoutineInfo {
31 &self.info
32 }
33
34 fn return_type(&self, _input_types: &[Type]) -> Type {
35 Type::Float8
36 }
37
38 fn execute(&self, ctx: &mut FunctionContext<'a>, args: &Columns) -> Result<Columns, RoutineError> {
39 if !args.is_empty() {
40 return Err(RoutineError::FunctionArityMismatch {
41 function: ctx.fragment.clone(),
42 expected: 0,
43 actual: args.len(),
44 });
45 }
46
47 Ok(Columns::new(vec![ColumnWithName::new(ctx.fragment.clone(), ColumnBuffer::float8(vec![PI]))]))
48 }
49}
50
51impl Function for Pi {
52 fn kinds(&self) -> &[FunctionKind] {
53 &[FunctionKind::Scalar]
54 }
55}