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