use chrono::{Datelike, Timelike};
use vibesql_types::SqlValue;
use super::current::resolve_time_value;
use crate::{errors::ExecutorError, evaluator::SchemaExprContext};
pub fn date(args: &[SqlValue], ctx: SchemaExprContext) -> Result<SqlValue, ExecutorError> {
let dt = match resolve_time_value(args, "DATE", ctx)? {
Some(dt) => dt,
None => return Ok(SqlValue::Null),
};
let date = vibesql_types::Date::new(dt.year(), dt.month() as u8, dt.day() as u8)
.map_err(|e| ExecutorError::UnsupportedFeature(format!("Invalid date: {}", e)))?;
Ok(SqlValue::Date(date))
}
pub fn time(args: &[SqlValue], ctx: SchemaExprContext) -> Result<SqlValue, ExecutorError> {
let dt = match resolve_time_value(args, "TIME", ctx)? {
Some(dt) => dt,
None => return Ok(SqlValue::Null),
};
let time = vibesql_types::Time::new(dt.hour() as u8, dt.minute() as u8, dt.second() as u8, 0)
.map_err(|e| ExecutorError::UnsupportedFeature(format!("Invalid time: {}", e)))?;
Ok(SqlValue::Time(time))
}