use vibesql_ast::Expression;
use vibesql_types::SqlValue;
#[cfg(test)]
pub fn evaluate_expression(expr: &Expression, row: &vibesql_storage::Row) -> Result<SqlValue, String> {
match expr {
Expression::Literal(val) => Ok(val.clone()),
Expression::ColumnRef(col_id) => {
let column = col_id.column_canonical();
if let Ok(index) = column.parse::<usize>() {
row.get(index)
.cloned()
.ok_or_else(|| format!("Column index {} out of bounds", index))
} else {
row.get(0).cloned().ok_or_else(|| "Row has no columns".to_string())
}
}
_ => Err("Unsupported expression in test evaluator".to_string()),
}
}
pub fn evaluate_default_value(default: Option<&Expression>) -> Result<SqlValue, String> {
match default {
None => Ok(SqlValue::Null),
Some(expr) => match expr {
Expression::Literal(val) => Ok(val.clone()),
_ => Err("Default value must be a literal".to_string()),
},
}
}