reifydb_engine/expression/
eval.rs1use 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()) {
25 let data = cast_column_data(ctx, column.data(), ty, &expr.lazy_fragment())?;
26 Ok(ColumnWithName {
27 name: column.name,
28 data,
29 })
30 } else {
31 Ok(column)
32 }
33}