gluesql_test_suite/function/
greatest.rs1use {
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});