gluesql_core/data/interval/
error.rs

1use {
2    super::Interval,
3    crate::ast::{Expr, ToSql},
4    chrono::NaiveTime,
5    serde::Serialize,
6    std::fmt::Debug,
7    thiserror::Error,
8};
9
10#[derive(Error, Serialize, Debug, PartialEq, Eq)]
11pub enum IntervalError {
12    #[error("unsupported interval range: {0} to {1}")]
13    UnsupportedRange(String, String),
14
15    #[error("cannot add between YEAR TO MONTH and HOUR TO SECOND")]
16    AddBetweenYearToMonthAndHourToSecond,
17
18    #[error("cannot subtract between YEAR TO MONTH and HOUR TO SECOND")]
19    SubtractBetweenYearToMonthAndHourToSecond,
20
21    #[error("cannot add year or month to TIME: {time} + {interval}", time = time.to_string(), interval = interval.to_sql_str())]
22    AddYearOrMonthToTime { time: NaiveTime, interval: Interval },
23
24    #[error("cannot subtract year or month to TIME: {time} - {interval}", time = time.to_string(), interval = interval.to_sql_str())]
25    SubtractYearOrMonthToTime { time: NaiveTime, interval: Interval },
26
27    #[error("failed to parse integer: {0}")]
28    FailedToParseInteger(String),
29
30    #[error("failed to parse decimal: {0}")]
31    FailedToParseDecimal(String),
32
33    #[error("failed to parse time: {0}")]
34    FailedToParseTime(String),
35
36    #[error("failed to parse YEAR TO MONTH (year-month, ex. 2-8): {0}")]
37    FailedToParseYearToMonth(String),
38
39    #[error("failed to parse DAY TO HOUR (day hour, ex. 1 23): {0}")]
40    FailedToParseDayToHour(String),
41
42    #[error("failed to parse DAY TO MINUTE (day hh:mm, ex. 1 12:34): {0}")]
43    FailedToParseDayToMinute(String),
44
45    #[error("failed to parse DAY TO SECOND (day hh:mm:ss, ex. 1 12:34:55): {0}")]
46    FailedToParseDayToSecond(String),
47
48    #[error("date overflow: {year}-{month}")]
49    DateOverflow { year: i32, month: i32 },
50
51    #[error("failed to get extract from interval")]
52    FailedToExtract,
53
54    #[error("parse supported only literal, expected: \"'1 1' DAY TO HOUR\", but got: {expr}", expr = expr.to_sql())]
55    ParseSupportedOnlyLiteral { expr: Box<Expr> },
56
57    #[error("unreachable")]
58    Unreachable,
59}