gluesql_test_suite/
basic.rs1use {
2 crate::*,
3 gluesql_core::{
4 error::TranslateError,
5 prelude::{Payload, Value::*},
6 },
7};
8
9test_case!(basic, {
10 let g = get_tester!();
11
12 let queries = [
13 r"
14 CREATE TABLE Test (
15 id INTEGER,
16 num INTEGER,
17 name TEXT
18 )
19 ",
20 r"
21 CREATE TABLE TestA (
22 id INTEGER,
23 num INTEGER,
24 name TEXT
25 )
26 ",
27 "CREATE TABLE EmptyTest",
28 "INSERT INTO Test (id, num, name) VALUES (1, 2, 'Hello')",
29 "INSERT INTO Test (id, num, name) VALUES (1, 9, 'World')",
30 "INSERT INTO Test (id, num, name) VALUES (3, 4, 'Great'), (4, 7, 'Job')",
31 "INSERT INTO TestA (id, num, name) SELECT id, num, name FROM Test",
32 "CREATE TABLE TestB (id INTEGER);",
33 "INSERT INTO TestB (id) SELECT id FROM Test",
34 ];
35
36 for query in queries {
37 g.run(query).await;
38 }
39
40 g.named_test(
41 "select all from table",
42 "SELECT * FROM TestB",
43 Ok(select!(
44 id I64;
45 1; 1; 3; 4
46 )),
47 )
48 .await;
49
50 g.test(
51 "SELECT id, num, name FROM TestA",
52 Ok(select!(
53 id | num | name
54 I64 | I64 | Str;
55 1 2 "Hello".to_owned();
56 1 9 "World".to_owned();
57 3 4 "Great".to_owned();
58 4 7 "Job".to_owned()
59 )),
60 )
61 .await;
62
63 g.test("SELECT * FROM EmptyTest", Ok(Payload::SelectMap(vec![])))
64 .await;
65
66 g.test(
67 "SELECT * FROM (SELECT * FROM EmptyTest) AS Empty",
68 Ok(Payload::SelectMap(vec![])),
69 )
70 .await;
71
72 g.count("SELECT * FROM Test", 4).await;
73
74 g.run("UPDATE Test SET id = 2").await;
75
76 g.test(
77 "SELECT id FROM Test",
78 Ok(select!(
79 id I64;
80 2; 2; 2; 2
81 )),
82 )
83 .await;
84
85 g.test(
86 "SELECT id, num FROM Test",
87 Ok(select!(
88 id | num;
89 I64 | I64;
90 2 2;
91 2 9;
92 2 4;
93 2 7
94 )),
95 )
96 .await;
97
98 g.test(
99 "SELECT id FROM FOO.Test",
100 Err(TranslateError::CompoundObjectNotSupported("FOO.Test".to_owned()).into()),
101 )
102 .await;
103});