gluesql_test_suite/transaction/
basic.rs1use {crate::*, Value::*, gluesql_core::prelude::*};
2
3test_case!(basic, {
4 let g = get_tester!();
5
6 for query in [
7 "
8 CREATE TABLE TxTest (
9 id INTEGER,
10 name TEXT
11 );
12 ",
13 "
14 INSERT INTO TxTest VALUES
15 (1, 'Friday'),
16 (2, 'Phone');
17 ",
18 ] {
19 g.run(query).await;
20 }
21
22 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
23 g.test(
24 "INSERT INTO TxTest VALUES (3, 'New one');",
25 Ok(Payload::Insert(1)),
26 )
27 .await;
28 g.test("ROLLBACK;", Ok(Payload::Rollback)).await;
29 g.test(
30 "SELECT id, name FROM TxTest",
31 Ok(select!(
32 id | name
33 I64 | Str;
34 1 "Friday".to_owned();
35 2 "Phone".to_owned()
36 )),
37 )
38 .await;
39
40 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
41 g.test(
42 "INSERT INTO TxTest VALUES (3, 'Vienna');",
43 Ok(Payload::Insert(1)),
44 )
45 .await;
46 g.test(
47 "SELECT id, name FROM TxTest",
48 Ok(select!(
49 id | name
50 I64 | Str;
51 1 "Friday".to_owned();
52 2 "Phone".to_owned();
53 3 "Vienna".to_owned()
54 )),
55 )
56 .await;
57
58 g.test("COMMIT;", Ok(Payload::Commit)).await;
59 g.test(
60 "SELECT id, name FROM TxTest",
61 Ok(select!(
62 id | name
63 I64 | Str;
64 1 "Friday".to_owned();
65 2 "Phone".to_owned();
66 3 "Vienna".to_owned()
67 )),
68 )
69 .await;
70
71 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
73 g.test("DELETE FROM TxTest WHERE id = 3;", Ok(Payload::Delete(1)))
74 .await;
75 g.test(
76 "SELECT id, name FROM TxTest",
77 Ok(select!(
78 id | name
79 I64 | Str;
80 1 "Friday".to_owned();
81 2 "Phone".to_owned()
82 )),
83 )
84 .await;
85 g.test("ROLLBACK;", Ok(Payload::Rollback)).await;
86 g.test(
87 "SELECT id, name FROM TxTest",
88 Ok(select!(
89 id | name
90 I64 | Str;
91 1 "Friday".to_owned();
92 2 "Phone".to_owned();
93 3 "Vienna".to_owned()
94 )),
95 )
96 .await;
97 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
98 g.test("DELETE FROM TxTest WHERE id = 3;", Ok(Payload::Delete(1)))
99 .await;
100 g.test(
101 "SELECT id, name FROM TxTest",
102 Ok(select!(
103 id | name
104 I64 | Str;
105 1 "Friday".to_owned();
106 2 "Phone".to_owned()
107 )),
108 )
109 .await;
110 g.test("COMMIT;", Ok(Payload::Commit)).await;
111 g.test(
112 "SELECT id, name FROM TxTest",
113 Ok(select!(
114 id | name
115 I64 | Str;
116 1 "Friday".to_owned();
117 2 "Phone".to_owned()
118 )),
119 )
120 .await;
121
122 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
124 g.test(
125 "UPDATE TxTest SET name = 'Sunday' WHERE id = 1;",
126 Ok(Payload::Update(1)),
127 )
128 .await;
129 g.test(
130 "SELECT id, name FROM TxTest",
131 Ok(select!(
132 id | name
133 I64 | Str;
134 1 "Sunday".to_owned();
135 2 "Phone".to_owned()
136 )),
137 )
138 .await;
139 g.test("ROLLBACK;", Ok(Payload::Rollback)).await;
140 g.test(
141 "SELECT id, name FROM TxTest",
142 Ok(select!(
143 id | name
144 I64 | Str;
145 1 "Friday".to_owned();
146 2 "Phone".to_owned()
147 )),
148 )
149 .await;
150 g.test("BEGIN;", Ok(Payload::StartTransaction)).await;
151 g.test(
152 "UPDATE TxTest SET name = 'Sunday' WHERE id = 1;",
153 Ok(Payload::Update(1)),
154 )
155 .await;
156 g.test(
157 "SELECT id, name FROM TxTest",
158 Ok(select!(
159 id | name
160 I64 | Str;
161 1 "Sunday".to_owned();
162 2 "Phone".to_owned()
163 )),
164 )
165 .await;
166 g.test("COMMIT;", Ok(Payload::Commit)).await;
167 g.test(
168 "SELECT id, name FROM TxTest",
169 Ok(select!(
170 id | name
171 I64 | Str;
172 1 "Sunday".to_owned();
173 2 "Phone".to_owned()
174 )),
175 )
176 .await;
177
178 for query in [
179 "BEGIN;",
180 "SELECT * FROM TxTest;",
181 "ROLLBACK;",
182 "BEGIN;",
183 "SELECT * FROM TxTest;",
184 "COMMIT;",
185 "BEGIN;",
186 "COMMIT;",
187 ] {
188 g.run(query).await;
189 }
190});