gluesql_test_suite/function/
position.rs

1use {
2    crate::*,
3    gluesql_core::{
4        error::ValueError,
5        prelude::{
6            Payload,
7            Value::{self, *},
8        },
9    },
10};
11
12test_case!(position, {
13    let g = get_tester!();
14
15    let test_cases = [
16        ("CREATE TABLE Food (name Text null)", Ok(Payload::Create)),
17        ("INSERT INTO Food VALUES ('pork')", Ok(Payload::Insert(1))),
18        ("INSERT INTO Food VALUES ('burger')", Ok(Payload::Insert(1))),
19        (
20            "SELECT POSITION('e' IN name) AS test FROM Food",
21            Ok(select!(test; I64; 0; 5)),
22        ),
23        (
24            "SELECT POSITION('s' IN 'cheese') AS test",
25            Ok(select!(test; I64; 5)),
26        ),
27        (
28            "SELECT POSITION(NULL IN 'cheese') AS test",
29            Ok(select_with_null!(test; Null)),
30        ),
31        (
32            "SELECT POSITION(1 IN 'cheese') AS test",
33            Err(ValueError::NonStringParameterInPosition {
34                from: Value::Str("cheese".to_owned()),
35                sub: Value::I64(1),
36            }
37            .into()),
38        ),
39    ];
40    for (sql, expected) in test_cases {
41        g.test(sql, expected).await;
42    }
43});