gluesql_test_suite/function/
reverse.rs

1use {
2    crate::*,
3    gluesql_core::{
4        error::EvaluateError,
5        prelude::{Payload, Value},
6    },
7};
8
9test_case!(reverse, {
10    let g = get_tester!();
11
12    let test_cases = [
13        (
14            "CREATE TABLE Item (name TEXT DEFAULT REVERSE('world'))",
15            Ok(Payload::Create),
16        ),
17        (
18            "INSERT INTO Item VALUES ('Let''s meet')",
19            Ok(Payload::Insert(1)),
20        ),
21        (
22            "SELECT REVERSE(name) AS test FROM Item;",
23            Ok(select!(
24                "test"
25                Value::Str;
26                "teem s'teL".to_owned()
27            )),
28        ),
29        (
30            "SELECT REVERSE(1) AS test FROM Item",
31            Err(EvaluateError::FunctionRequiresStringValue("REVERSE".to_owned()).into()),
32        ),
33        (
34            "CREATE TABLE NullTest (name TEXT null)",
35            Ok(Payload::Create),
36        ),
37        ("INSERT INTO NullTest VALUES (null)", Ok(Payload::Insert(1))),
38        (
39            "SELECT REVERSE(name) AS test FROM NullTest",
40            Ok(select_with_null!(test; Value::Null)),
41        ),
42    ];
43    for (sql, expected) in test_cases {
44        g.test(sql, expected).await;
45    }
46});