Skip to main content

reifydb_engine/expression/
eval.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_core::value::column::ColumnWithName;
5use reifydb_rql::expression::Expression;
6
7use crate::{
8	Result,
9	expression::{
10		cast::cast_column_data,
11		compile::compile_expression,
12		context::{CompileContext, EvalContext},
13	},
14};
15
16pub fn evaluate(ctx: &EvalContext, expr: &Expression) -> Result<ColumnWithName> {
17	let compile_ctx = CompileContext {
18		symbols: ctx.symbols,
19	};
20	let compiled = compile_expression(&compile_ctx, expr)?;
21	let column = compiled.execute(ctx)?;
22
23	if let Some(ty) = ctx.target.as_ref().map(|c| c.column_type()) {
24		let data = cast_column_data(ctx, column.data(), ty, &expr.lazy_fragment())?;
25		Ok(ColumnWithName {
26			name: column.name,
27			data,
28		})
29	} else {
30		Ok(column)
31	}
32}