aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/tests/sql/suites/datetime/date_implicit_casts.sql
blob: 0030b0811ddb09945da9a81cd26256f49cfdf51b (plain) (blame)
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
PRAGMA warning('disable', '4528');

$fromTypes = {
    "Date": "2025-03-19",
    "Datetime": "2025-03-19T01:02:03Z",
    "Timestamp": "2025-03-19T01:02:03.456789Z",
};

$toTypes = [
    "Date",     "Datetime",     "Timestamp",
    "TzDate",   "TzDatetime",   "TzTimestamp",
    "Date32",   "Datetime64",   "Timestamp64",
    "TzDate32", "TzDatetime64", "TzTimestamp64",
];

$allowed = {
    "Date": {
        /* - */     "Datetime",     "Timestamp",
        "TzDate",   "TzDatetime",   "TzTimestamp",
        "Date32",   "DateTime64",   "Timestamp64",
        "TzDate32", "TzDatetime64", "TzTimestamp64",
    },
    "Datetime": {
        /* - */ /* - */         "Timestamp",
        /* - */ "TzDatetime",   "TzTimestamp",
        /* - */ "DateTime64",   "Timestamp64",
        /* - */ "TzDatetime64", "TzTimestamp64",
    },
    "Timestamp": {
        /* - */ /* - */ /* - */
        /* - */ /* - */ "TzTimestamp",
        /* - */ /* - */ "Timestamp64",
        /* - */ /* - */ "TzTimestamp64",
    },
};

EVALUATE FOR $from IN DictItems($fromTypes) DO BEGIN
    EVALUATE FOR $to IN $toTypes DO BEGIN
        EVALUATE IF DictContains($allowed[$from.0], $to) DO BEGIN
            $callable = Callable(CallableType(0, String, DataType($to)), ($x)->(cast($x as String)));
            $srcType = DataType($from.0);
            SELECT $from.0 || " => " || $to,
                 $callable(Unwrap(CAST($from.1 as $srcType)))
        END DO;
    END DO;
END DO;