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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use {
    crate::*,
    gluesql_core::{error::EvaluateError, prelude::Value::*},
};

test_case!(format, async move {
    let test_cases = vec![
        (
            "VALUES(FORMAT(DATE '2017-06-15', '%Y-%m'))",
            Ok(select!(
                column1
                Str;
                "2017-06".to_owned()
            )),
        ),
        (
            "SELECT FORMAT(DATE '2017-06-15','%Y-%m') AS date",
            Ok(select!(
                date
                Str;
                "2017-06".to_owned()
            )),
        ),
        (
            "SELECT FORMAT(TIMESTAMP '2015-09-05 23:56:04', '%Y-%m-%d %H:%M:%S') AS timestamp",
            Ok(select!(
                timestamp
                Str;
                "2015-09-05 23:56:04".to_owned()
            )),
        ),
        (
            "SELECT FORMAT(TIME '23:56:04','%H:%M') AS time",
            Ok(select!(
                time
                Str;
                "23:56".to_owned()
            )),
        ),
        (
            "SELECT 
                FORMAT(TIMESTAMP '2015-09-05 23:56:04', '%Y') AS year
               ,FORMAT(TIMESTAMP '2015-09-05 23:56:04', '%m') AS month
               ,FORMAT(TIMESTAMP '2015-09-05 23:56:04', '%d') AS day
            ",
            Ok(select!(
            year              | month           | day;
            Str               | Str             | Str;
            "2015".to_owned()   "09".to_owned()   "05".to_owned()
            )),
        ),
        (
            "SELECT FORMAT('2015-09-05 23:56:04', '%Y-%m-%d %H') AS timestamp",
            Err(
                EvaluateError::UnsupportedExprForFormatFunction("2015-09-05 23:56:04".to_owned())
                    .into(),
            ),
        ),
    ];
    for (sql, expected) in test_cases {
        test!(sql, expected);
    }
});