reifydb-evaluate 0.10.0

Runtime expression evaluator and variable environment for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2026 ReifyDB

use reifydb_core::value::column::factory;
use reifydb_value::value::value_type::{ValueType, field::from_field};

use crate::common::{Env, Frozen, alias, arith, batch, column, strings};

#[test]
fn an_alias_over_a_column_lowers_to_the_column_renamed() {
	// A map output column is named by its alias, so keeping the inner name would rename the user's column.
	let mut frozen = Frozen::inline(&["Field { name: \"x\", data_type: Int32 } [\"1\", \"2\"]"]);
	let env = Env::new();
	let input = batch(vec![factory::int4("a", [1, 2])]);
	let expression = alias("x", column("a"));

	let lowered = env.lowered(&expression, input.clone()).unwrap();
	let old = frozen.old(&env, &expression, input).unwrap();

	assert_eq!(lowered, old);
	assert_eq!(lowered.0.name(), "x");
	assert_eq!(strings(&lowered), vec!["1", "2"]);
}

#[test]
fn an_alias_over_arithmetic_keeps_the_arith_type_and_takes_the_alias_name() {
	// The rename must touch only the name, never the promoted type or nullability of the node below it.
	let mut frozen = Frozen::inline(&["Field { name: \"total\", data_type: Int64 } [\"3\"]"]);
	let env = Env::new();
	let input = batch(vec![factory::int4("l", [1]), factory::int4("r", [2])]);
	let expression = alias("total", arith("+", column("l"), column("r")));

	let lowered = env.lowered(&expression, input.clone()).unwrap();
	let old = frozen.old(&env, &expression, input).unwrap();

	assert_eq!(lowered, old);
	assert_eq!(lowered.0.name(), "total");
	assert_eq!(from_field(&lowered.0).unwrap().value_type, Some(ValueType::Int8));
	assert_eq!(strings(&lowered), vec!["3"]);
}