reifydb_engine/expression/
eval.rs1use reifydb_core::value::column::Column;
5use reifydb_function::registry::Functions;
6use reifydb_rql::expression::Expression;
7use reifydb_runtime::clock::Clock;
8
9use crate::{
10 Result,
11 expression::{
12 cast::cast_column_data,
13 compile::compile_expression,
14 context::{CompileContext, EvalContext},
15 },
16};
17
18pub fn evaluate(ctx: &EvalContext, expr: &Expression, _functions: &Functions, _clock: &Clock) -> Result<Column> {
19 let compile_ctx = CompileContext {
20 functions: ctx.functions,
21 symbol_table: ctx.symbol_table,
22 };
23 let compiled = compile_expression(&compile_ctx, expr)?;
24 let column = compiled.execute(ctx)?;
25
26 if let Some(ty) = ctx.target.as_ref().map(|c| c.column_type()) {
28 let data = cast_column_data(ctx, &column.data(), ty, &expr.lazy_fragment())?;
29 Ok(Column {
30 name: column.name,
31 data,
32 })
33 } else {
34 Ok(column)
35 }
36}