reifydb_function/identity/
id.rs1use reifydb_core::value::column::data::ColumnData;
5use reifydb_type::value::r#type::Type;
6
7use crate::{ScalarFunction, ScalarFunctionContext, ScalarFunctionResult, error::ScalarFunctionError};
8
9pub struct Id;
10
11impl Id {
12 pub fn new() -> Self {
13 Self {}
14 }
15}
16
17impl ScalarFunction for Id {
18 fn scalar(&self, ctx: ScalarFunctionContext) -> ScalarFunctionResult<ColumnData> {
19 if ctx.columns.len() != 0 {
20 return Err(ScalarFunctionError::ArityMismatch {
21 function: ctx.fragment.clone(),
22 expected: 0,
23 actual: ctx.columns.len(),
24 });
25 }
26
27 let identity = ctx.identity;
28 if identity.is_anonymous() {
29 return Ok(ColumnData::none_typed(Type::IdentityId, ctx.row_count));
30 }
31
32 Ok(ColumnData::identity_id(vec![identity; ctx.row_count]))
33 }
34
35 fn return_type(&self, _input_types: &[Type]) -> Type {
36 Type::IdentityId
37 }
38}