gluesql_test_suite/function/
greatest.rs

1use {
2    crate::*,
3    gluesql_core::{
4        error::{EvaluateError, TranslateError},
5        prelude::Value::*,
6    },
7};
8
9test_case!(greatest, {
10    let g = get_tester!();
11
12    g.test(
13        "SELECT GREATEST(1,6,9,7,0,10) AS goat;",
14        Ok(select!(
15            "goat"; I64; 10
16        )),
17    )
18    .await;
19
20    g.test(
21        "SELECT GREATEST(1.2,6.8,9.6,7.4,0.1,10.5) AS goat;",
22        Ok(select!(
23            "goat" ; F64; 10.5
24        )),
25    )
26    .await;
27
28    g.test(
29        "SELECT GREATEST('bibibik', 'babamba', 'melona') AS goat;",
30        Ok(select!(
31            "goat"; Str; "melona".to_owned()
32        )),
33    )
34    .await;
35
36    macro_rules! date {
37        ($date: expr) => {
38            $date.parse().unwrap()
39        };
40    }
41
42    g.test(
43        "SELECT GREATEST(
44            DATE '2023-07-17', 
45            DATE '2022-07-17', 
46            DATE '2023-06-17', 
47            DATE '2024-07-17',
48            DATE '2024-07-18') AS goat;",
49        Ok(select!(
50            "goat"; Date; date!("2024-07-18")
51        )),
52    )
53    .await;
54
55    g.test(
56        "SELECT GREATEST() AS goat;",
57        Err(TranslateError::FunctionArgsLengthNotMatchingMin {
58            name: "GREATEST".to_owned(),
59            expected_minimum: 2,
60            found: 0,
61        }
62        .into()),
63    )
64    .await;
65
66    g.test(
67        "SELECT GREATEST(1, 2, 'bibibik') AS goat;",
68        Err(EvaluateError::NonComparableArgumentError("GREATEST".to_owned()).into()),
69    )
70    .await;
71
72    g.test(
73        "SELECT GREATEST(NULL, 'bibibik', 'babamba', 'melona') AS goat;",
74        Err(EvaluateError::NonComparableArgumentError("GREATEST".to_owned()).into()),
75    )
76    .await;
77
78    g.test(
79        "SELECT GREATEST(NULL, NULL, NULL) AS goat;",
80        Err(EvaluateError::NonComparableArgumentError("GREATEST".to_owned()).into()),
81    )
82    .await;
83
84    g.test(
85        "SELECT GREATEST(true, false) AS goat;",
86        Ok(select!(
87            "goat"; Bool; true
88        )),
89    )
90    .await;
91});