1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use chrono::{NaiveTime, Timelike};
use repr::adt::interval::Interval;
use repr::strconv;
use crate::EvalError;
sqlfunc!(
#[sqlname = "timetostr"]
#[preserves_uniqueness = true]
fn cast_time_to_string(a: NaiveTime) -> String {
let mut buf = String::new();
strconv::format_time(&mut buf, a);
buf
}
);
sqlfunc!(
#[sqlname = "timetoiv"]
#[preserves_uniqueness = true]
fn cast_time_to_interval<'a>(t: NaiveTime) -> Result<Interval, EvalError> {
Interval::new(
0,
t.num_seconds_from_midnight() as i64,
t.nanosecond() as i64,
)
.map_err(|_| EvalError::IntervalOutOfRange)
}
);