@@ -172,5 +172,130 @@ impl RTransaction {
172172 }
173173 }
174174 }
175+
176+ debug ! ( "Finished run for transaction!" ) ;
177+ }
178+ }
179+
180+ #[ cfg( test) ]
181+ mod tests {
182+ use super :: * ;
183+ use crate :: database:: RDatabase ;
184+
185+ #[ test]
186+ fn add_query_test ( ) {
187+ let mut t = RTransaction :: new ( ) ;
188+ let mut db = RDatabase :: new ( ) ;
189+
190+ let table_ref = db. create_table ( "Scores" . to_string ( ) , 3 , 0 ) ;
191+ let mut query = RQuery :: new ( table_ref. clone ( ) ) ;
192+
193+ t. add_query (
194+ "insert" ,
195+ table_ref. clone ( ) ,
196+ vec ! [ Some ( 0 ) , Some ( 234 ) , Some ( 345 ) ] ,
197+ ) ;
198+
199+ let mut v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
200+
201+ // We haven't run the transaction yet so nothing is returned
202+ assert_eq ! ( v. clone( ) . unwrap( ) . len( ) , 0 ) ;
203+
204+ // Usually this is done by the transaction_worker but we are doing it manually here
205+ t. run ( ) ;
206+
207+ v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
208+
209+ assert_eq ! (
210+ v. unwrap( ) [ 0 ] . as_ref( ) . unwrap( ) . columns,
211+ vec![ Some ( 0 ) , Some ( 234 ) , Some ( 345 ) ]
212+ ) ;
213+ }
214+
215+ #[ test]
216+ fn add_many_query_test ( ) {
217+ let mut t = RTransaction :: new ( ) ;
218+ let mut db = RDatabase :: new ( ) ;
219+
220+ let table_ref = db. create_table ( "Scores" . to_string ( ) , 3 , 0 ) ;
221+ let mut query = RQuery :: new ( table_ref. clone ( ) ) ;
222+
223+ for x in 0 ..100 {
224+ t. add_query (
225+ "insert" ,
226+ table_ref. clone ( ) ,
227+ vec ! [ Some ( x) , Some ( x * x) , Some ( 345 + x) ] ,
228+ ) ;
229+ }
230+
231+ let mut v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
232+
233+ // We haven't run the transaction yet so nothing is returned
234+ assert_eq ! ( v. clone( ) . unwrap( ) . len( ) , 0 ) ;
235+
236+ // Usually this is done by the transaction_worker but we are doing it manually here
237+ t. run ( ) ;
238+
239+ // Test selecting on different columns
240+ v = query. select ( 4 , 1 , vec ! [ 1 , 1 , 1 ] ) ;
241+
242+ assert_eq ! (
243+ v. unwrap( ) [ 0 ] . as_ref( ) . unwrap( ) . columns,
244+ vec![ Some ( 2 ) , Some ( 4 ) , Some ( 345 + 2 ) ]
245+ ) ;
246+
247+ v = query. select ( 16 , 1 , vec ! [ 1 , 1 , 1 ] ) ;
248+
249+ assert_eq ! (
250+ v. unwrap( ) [ 0 ] . as_ref( ) . unwrap( ) . columns,
251+ vec![ Some ( 4 ) , Some ( 16 ) , Some ( 345 + 4 ) ]
252+ ) ;
253+
254+ v = query. select ( 1024 , 1 , vec ! [ 1 , 1 , 1 ] ) ;
255+
256+ assert_eq ! (
257+ v. unwrap( ) [ 0 ] . as_ref( ) . unwrap( ) . columns,
258+ vec![ Some ( 32 ) , Some ( 1024 ) , Some ( 345 + 32 ) ]
259+ ) ;
260+ }
261+
262+ #[ test]
263+ fn add_query_insert_and_delete_test ( ) {
264+ let mut t = RTransaction :: new ( ) ;
265+ let mut db = RDatabase :: new ( ) ;
266+
267+ let table_ref = db. create_table ( "Scores" . to_string ( ) , 3 , 0 ) ;
268+ let mut query = RQuery :: new ( table_ref. clone ( ) ) ;
269+
270+ t. add_query (
271+ "insert" ,
272+ table_ref. clone ( ) ,
273+ vec ! [ Some ( 0 ) , Some ( 234 ) , Some ( 345 ) ] ,
274+ ) ;
275+
276+ let mut v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
277+
278+ // We haven't run the transaction yet so nothing is returned
279+ assert_eq ! ( v. clone( ) . unwrap( ) . len( ) , 0 ) ;
280+
281+ // Usually this is done by the transaction_worker but we are doing it manually here
282+ t. run ( ) ;
283+
284+ v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
285+
286+ assert_eq ! (
287+ v. unwrap( ) [ 0 ] . as_ref( ) . unwrap( ) . columns,
288+ vec![ Some ( 0 ) , Some ( 234 ) , Some ( 345 ) ]
289+ ) ;
290+
291+ t. add_query ( "delete" , table_ref, vec ! [ Some ( 0 ) ] ) ;
292+
293+ // Usually this is done by the transaction_worker but we are doing it manually here
294+ t. run ( ) ;
295+
296+ v = query. select ( 0 , 0 , vec ! [ 1 , 1 , 1 ] ) ;
297+
298+ // We haven't run the transaction yet so nothing is returned
299+ assert_eq ! ( v. clone( ) . unwrap( ) . len( ) , 0 ) ;
175300 }
176301}
0 commit comments