@@ -4,7 +4,8 @@ use sha2::{Digest, Sha256};
4
4
use sqlite:: { Connection , State , Statement } ;
5
5
use tokio:: sync:: Mutex ;
6
6
7
- use std:: { marker:: PhantomData , ops:: Deref , sync:: Arc , thread:: sleep, time:: Duration } ;
7
+ use lazy_static:: __Deref;
8
+ use std:: { marker:: PhantomData , sync:: Arc , thread:: sleep, time:: Duration } ;
8
9
9
10
use super :: { AdapterError , StoreAdapter } ;
10
11
54
55
. next ( )
55
56
. map_err ( |e| AdapterError :: QueryError ( e. into ( ) ) ) ?;
56
57
let table_exists = statement
57
- . read :: < i64 > ( 0 )
58
+ . read :: < i64 , _ > ( 0 )
58
59
. map_err ( |e| AdapterError :: ParsingDataError ( e. into ( ) ) ) ?;
59
60
60
61
if table_exists != 1 {
@@ -103,7 +104,7 @@ where
103
104
. prepare ( sql)
104
105
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
105
106
statement
106
- . bind :: < & str > ( 1 , self . get_hash_from_key ( key) ?. as_str ( ) )
107
+ . bind ( ( 1 , self . get_hash_from_key ( key) ?. as_str ( ) ) )
107
108
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
108
109
109
110
Ok ( statement)
@@ -131,7 +132,7 @@ where
131
132
return Ok ( None ) ;
132
133
}
133
134
let maybe_value: Option < V > = statement
134
- . read :: < String > ( 0 )
135
+ . read :: < String , _ > ( 0 )
135
136
. map_err ( |e| AdapterError :: QueryError ( e. into ( ) ) )
136
137
. and_then ( |v| {
137
138
serde_json:: from_str ( & v) . map_err ( |e| AdapterError :: ParsingDataError ( e. into ( ) ) )
@@ -166,13 +167,13 @@ where
166
167
. prepare ( sql)
167
168
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
168
169
statement
169
- . bind :: < & str > ( 1 , self . get_hash_from_key ( key) ?. as_str ( ) )
170
+ . bind ( ( 1 , self . get_hash_from_key ( key) ?. as_str ( ) ) )
170
171
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
171
172
statement
172
- . bind :: < & str > ( 2 , self . serialize_key ( key) ?. as_str ( ) )
173
+ . bind ( ( 2 , self . serialize_key ( key) ?. as_str ( ) ) )
173
174
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
174
175
statement
175
- . bind :: < & str > ( 3 , value. as_str ( ) )
176
+ . bind ( ( 3 , value. as_str ( ) ) )
176
177
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
177
178
let _ = statement
178
179
. next ( )
@@ -203,7 +204,7 @@ where
203
204
. map_err ( |e| AdapterError :: QueryError ( e. into ( ) ) ) ?;
204
205
205
206
statement
206
- . read :: < i64 > ( 0 )
207
+ . read :: < i64 , _ > ( 0 )
207
208
. map_err ( |e| {
208
209
AdapterError :: GeneralError ( format ! ( "There should be a result in this case ! {e:?}" ) )
209
210
} )
@@ -221,15 +222,15 @@ where
221
222
. prepare ( sql)
222
223
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
223
224
statement
224
- . bind :: < i64 > ( 1 , how_many as i64 )
225
+ . bind ( ( 1 , how_many as i64 ) )
225
226
. map_err ( |e| AdapterError :: InitializationError ( e. into ( ) ) ) ?;
226
- let cursor = statement. into_cursor ( ) ;
227
+ let cursor = statement. iter ( ) ;
227
228
228
229
let results = cursor
229
230
. map ( |row| {
230
231
let row = row. unwrap ( ) ;
231
- let key: K = serde_json:: from_str ( & row. get :: < String , _ > ( 0 ) ) . unwrap ( ) ;
232
- let value: V = serde_json:: from_str ( & row. get :: < String , _ > ( 1 ) ) . unwrap ( ) ;
232
+ let key: K = serde_json:: from_str ( row. read :: < & str , _ > ( 0 ) ) . unwrap ( ) ;
233
+ let value: V = serde_json:: from_str ( row. read :: < & str , _ > ( 1 ) ) . unwrap ( ) ;
233
234
234
235
( key, value)
235
236
} )
@@ -278,12 +279,12 @@ where
278
279
let cursor = connection
279
280
. prepare ( sql)
280
281
. map_err ( |e| AdapterError :: QueryError ( e. into ( ) ) ) ?
281
- . into_cursor ( ) ;
282
+ . into_iter ( ) ;
282
283
283
284
let results = cursor
284
285
. map ( |row| {
285
286
let row = row. unwrap ( ) ;
286
- let res: V = serde_json:: from_str ( & row. get :: < String , _ > ( 0 ) ) . unwrap ( ) ;
287
+ let res: V = serde_json:: from_str ( row. read :: < & str , _ > ( 0 ) ) . unwrap ( ) ;
287
288
288
289
res
289
290
} )
@@ -304,8 +305,8 @@ impl<V> Iterator for SQLiteResultIterator<V> {
304
305
#[ cfg( test) ]
305
306
mod tests {
306
307
308
+ use sqlite:: Value ;
307
309
use std:: {
308
- borrow:: Borrow ,
309
310
fs:: { create_dir_all, remove_file} ,
310
311
path:: PathBuf ,
311
312
} ;
@@ -351,71 +352,48 @@ mod tests {
351
352
async fn test_store_record ( ) {
352
353
let test_name = "test_store_record" ;
353
354
let mut adapter = init_db ( test_name, None ) ;
354
- adapter
355
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
356
- . await
357
- . unwrap ( ) ;
355
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
358
356
let filepath = get_file_path ( test_name) ;
359
357
let connection = Connection :: open ( & filepath) . unwrap_or_else ( |_| {
360
358
panic ! (
361
359
"Expecting to be able to open SQLite file '{}'." ,
362
360
filepath. display( )
363
361
)
364
362
} ) ;
365
- let mut statement = connection
363
+ let mut cursor = connection
366
364
. prepare ( format ! ( "select key_hash, key, value from {TABLE_NAME}" ) )
367
365
. unwrap ( )
368
- . into_cursor ( ) ;
369
- let row = statement
366
+ . into_iter ( ) ;
367
+ let row = cursor
370
368
. try_next ( )
371
369
. unwrap ( )
372
370
. expect ( "Expecting at least one row in the result set." ) ;
373
- assert_eq ! (
374
- 1 ,
375
- row[ 1 ]
376
- . as_integer( )
377
- . expect( "expecting field 1 to be an integer" )
378
- ) ;
379
- assert_eq ! (
380
- "\" one\" " . to_string( ) ,
381
- row[ 2 ]
382
- . as_string( )
383
- . expect( "expecting field 2 to be a string" )
384
- ) ;
385
- adapter
386
- . store_record ( & 1 , "zwei" . to_string ( ) . borrow ( ) )
387
- . await
388
- . unwrap ( ) ;
371
+ assert_eq ! ( Value :: Integer ( 1 ) , row[ 1 ] ) ;
372
+ assert_eq ! ( Value :: String ( "\" one\" " . to_string( ) ) , row[ 2 ] ) ;
373
+
374
+ // We must drop the cursor else the db will be locked
375
+ drop ( cursor) ;
376
+
377
+ adapter. store_record ( & 1 , & "zwei" . to_string ( ) ) . await . unwrap ( ) ;
389
378
let mut statement = connection
390
379
. prepare ( format ! ( "select key_hash, key, value from {TABLE_NAME}" ) )
391
- . unwrap ( )
392
- . into_cursor ( ) ;
393
- let row = statement
380
+ . unwrap ( ) ;
381
+ let mut cursor = statement . iter ( ) ;
382
+ let row = cursor
394
383
. try_next ( )
395
384
. unwrap ( )
396
385
. expect ( "Expecting at least one row in the result set." ) ;
397
- assert_eq ! (
398
- "\" zwei\" " . to_string( ) ,
399
- row[ 2 ]
400
- . as_string( )
401
- . expect( "expecting field 2 to be a string" )
402
- ) ;
386
+ assert_eq ! ( Value :: String ( "\" zwei\" " . to_string( ) ) , row[ 2 ] ) ;
403
387
}
404
388
405
389
#[ tokio:: test]
406
390
async fn test_get_record ( ) {
407
391
let test_name = "test_get_record" ;
408
392
let mut adapter = init_db ( test_name, None ) ;
393
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
394
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
409
395
adapter
410
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
411
- . await
412
- . unwrap ( ) ;
413
- adapter
414
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
415
- . await
416
- . unwrap ( ) ;
417
- adapter
418
- . store_record ( & 3 , "three" . to_string ( ) . borrow ( ) )
396
+ . store_record ( & 3 , & "three" . to_string ( ) )
419
397
. await
420
398
. unwrap ( ) ;
421
399
assert_eq ! (
@@ -437,16 +415,10 @@ mod tests {
437
415
async fn test_get_iterator ( ) {
438
416
let test_name = "test_get_iterator" ;
439
417
let mut adapter = init_db ( test_name, None ) ;
418
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
419
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
440
420
adapter
441
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
442
- . await
443
- . unwrap ( ) ;
444
- adapter
445
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
446
- . await
447
- . unwrap ( ) ;
448
- adapter
449
- . store_record ( & 3 , "three" . to_string ( ) . borrow ( ) )
421
+ . store_record ( & 3 , & "three" . to_string ( ) )
450
422
. await
451
423
. unwrap ( ) ;
452
424
let collection: Vec < ( usize , String ) > =
@@ -465,14 +437,8 @@ mod tests {
465
437
async fn test_record_exists ( ) {
466
438
let test_name = "test_record_exists" ;
467
439
let mut adapter = init_db ( test_name, None ) ;
468
- adapter
469
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
470
- . await
471
- . unwrap ( ) ;
472
- adapter
473
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
474
- . await
475
- . unwrap ( ) ;
440
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
441
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
476
442
477
443
assert ! ( adapter. record_exists( & 1 ) . await . unwrap( ) ) ;
478
444
assert ! ( adapter. record_exists( & 2 ) . await . unwrap( ) ) ;
@@ -483,14 +449,8 @@ mod tests {
483
449
async fn test_remove ( ) {
484
450
let test_name = "test_remove" ;
485
451
let mut adapter = init_db ( test_name, None ) ;
486
- adapter
487
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
488
- . await
489
- . unwrap ( ) ;
490
- adapter
491
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
492
- . await
493
- . unwrap ( ) ;
452
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
453
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
494
454
let record = adapter
495
455
. remove ( & 1 )
496
456
. await
@@ -508,16 +468,10 @@ mod tests {
508
468
async fn test_get_last_n_records ( ) {
509
469
let test_name = "test_get_last_n_records" ;
510
470
let mut adapter = init_db ( test_name, None ) ;
471
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
472
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
511
473
adapter
512
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
513
- . await
514
- . unwrap ( ) ;
515
- adapter
516
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
517
- . await
518
- . unwrap ( ) ;
519
- adapter
520
- . store_record ( & 3 , "three" . to_string ( ) . borrow ( ) )
474
+ . store_record ( & 3 , & "three" . to_string ( ) )
521
475
. await
522
476
. unwrap ( ) ;
523
477
assert_eq ! (
@@ -544,20 +498,14 @@ mod tests {
544
498
async fn check_get_last_n_modified_records ( ) {
545
499
let test_name = "check_get_last_n_modified_records" ;
546
500
let mut adapter = init_db ( test_name, None ) ;
501
+ adapter. store_record ( & 1 , & "one" . to_string ( ) ) . await . unwrap ( ) ;
502
+ adapter. store_record ( & 2 , & "two" . to_string ( ) ) . await . unwrap ( ) ;
547
503
adapter
548
- . store_record ( & 1 , "one" . to_string ( ) . borrow ( ) )
549
- . await
550
- . unwrap ( ) ;
551
- adapter
552
- . store_record ( & 2 , "two" . to_string ( ) . borrow ( ) )
553
- . await
554
- . unwrap ( ) ;
555
- adapter
556
- . store_record ( & 3 , "three" . to_string ( ) . borrow ( ) )
504
+ . store_record ( & 3 , & "three" . to_string ( ) )
557
505
. await
558
506
. unwrap ( ) ;
559
507
adapter
560
- . store_record ( & 1 , "updated record" . to_string ( ) . borrow ( ) )
508
+ . store_record ( & 1 , & "updated record" . to_string ( ) )
561
509
. await
562
510
. unwrap ( ) ;
563
511
let values = adapter. get_last_n_records ( 2 ) . await . unwrap ( ) ;
0 commit comments