Skip to main content

reifydb_function/identity/
id.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4use 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}