gluesql_test_suite/transaction/
basic.rs

1use {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    // DELETE
72    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    // UPDATE
123    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});