Skip to main content

reifydb_routine/function/identity/
id.rs

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