diff --git a/core/lib.rs b/core/lib.rs index 255575fb..c7b7e42b 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -1,4 +1,3 @@ -mod datetime; mod error; mod function; mod io; diff --git a/core/datetime.rs b/core/vdbe/datetime.rs similarity index 98% rename from core/datetime.rs rename to core/vdbe/datetime.rs index afa2ae72..2e414ced 100644 --- a/core/datetime.rs +++ b/core/vdbe/datetime.rs @@ -2,7 +2,8 @@ use crate::types::OwnedValue; use crate::Result; use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; -pub fn get_date_from_time_value(time_value: &OwnedValue) -> Result { +/// Implementation of the date() SQL function. +pub fn exec_date(time_value: &OwnedValue) -> Result { let dt = parse_naive_date_time(time_value); match dt { Some(dt) => Ok(get_date_from_naive_datetime(dt)), @@ -10,7 +11,8 @@ pub fn get_date_from_time_value(time_value: &OwnedValue) -> Result { } } -pub fn get_time_from_datetime_value(time_value: &OwnedValue) -> Result { +/// Implementation of the time() SQL function. +pub fn exec_time(time_value: &OwnedValue) -> Result { let dt = parse_naive_date_time(time_value); match dt { Some(dt) => Ok(get_time_from_naive_datetime(dt)), @@ -363,7 +365,7 @@ mod tests { for (input, expected) in test_cases { assert_eq!( - get_date_from_time_value(&input).unwrap(), + exec_date(&input).unwrap(), expected, "Failed for input: {:?}", input @@ -402,7 +404,7 @@ mod tests { ]; for case in invalid_cases.iter() { - let result = get_date_from_time_value(case); + let result = exec_date(case); assert!( result.is_ok(), "Error encountered while parsing time value {}: {}", @@ -589,7 +591,7 @@ mod tests { for (input, expected) in test_cases { assert_eq!( - get_time_from_datetime_value(&input).unwrap(), + exec_time(&input).unwrap(), expected, "Failed for input: {:?}", input @@ -628,7 +630,7 @@ mod tests { ]; for case in invalid_cases.iter() { - let result = get_time_from_datetime_value(case); + let result = exec_time(case); assert!( result.is_ok(), "Error encountered while parsing time value {}: {}", diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index 4fa6c6d7..8f807d03 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -21,7 +21,8 @@ pub mod builder; pub mod explain; pub mod sorter; -use crate::datetime::{get_date_from_time_value, get_time_from_datetime_value}; +mod datetime; + use crate::error::LimboError; use crate::function::{AggFunc, ScalarFunc}; use crate::pseudo::PseudoCursor; @@ -31,6 +32,8 @@ use crate::storage::{btree::BTreeCursor, pager::Pager}; use crate::types::{AggContext, Cursor, CursorResult, OwnedRecord, OwnedValue, Record}; use crate::Result; +use datetime::{exec_date, exec_time}; + use regex::Regex; use std::borrow::BorrowMut; use std::cell::RefCell; @@ -1277,13 +1280,12 @@ impl Program { } ScalarFunc::Date => { if *start_reg == 0 { - let date_str = get_date_from_time_value(&OwnedValue::Text(Rc::new( - "now".to_string(), - )))?; + let date_str = + exec_date(&OwnedValue::Text(Rc::new("now".to_string())))?; state.registers[*dest] = OwnedValue::Text(Rc::new(date_str)); } else { let time_value = &state.registers[*start_reg]; - let date_str = get_date_from_time_value(time_value); + let date_str = exec_date(time_value); match date_str { Ok(date) => { state.registers[*dest] = OwnedValue::Text(Rc::new(date)) @@ -1300,13 +1302,12 @@ impl Program { } ScalarFunc::Time => { if *start_reg == 0 { - let time_str = get_time_from_datetime_value(&OwnedValue::Text( - Rc::new("now".to_string()), - ))?; + let time_str = + exec_time(&OwnedValue::Text(Rc::new("now".to_string())))?; state.registers[*dest] = OwnedValue::Text(Rc::new(time_str)); } else { let datetime_value = &state.registers[*start_reg]; - let time_str = get_time_from_datetime_value(datetime_value); + let time_str = exec_time(datetime_value); match time_str { Ok(time) => { state.registers[*dest] = OwnedValue::Text(Rc::new(time))