@@ -218,6 +218,20 @@ impl<'conn> DeleteEpochSettingProvider<'conn> {
218
218
Self { connection }
219
219
}
220
220
221
+ /// Create the SQL condition to delete a record given the Epoch.
222
+ fn get_delete_condition_by_epoch ( & self , epoch : Epoch ) -> WhereCondition {
223
+ let epoch_setting_id_value = Value :: Integer ( i64:: try_from ( epoch. 0 ) . unwrap ( ) ) ;
224
+
225
+ WhereCondition :: new ( "epoch_setting_id = ?*" , vec ! [ epoch_setting_id_value] )
226
+ }
227
+
228
+ /// Delete the epoch setting data given the Epoch
229
+ pub fn delete ( & self , epoch : Epoch ) -> Result < EntityCursor < EpochSettingRecord > , StdError > {
230
+ let filters = self . get_delete_condition_by_epoch ( epoch) ;
231
+
232
+ self . find ( filters)
233
+ }
234
+
221
235
/// Create the SQL condition to prune data older than the given Epoch.
222
236
fn get_prune_condition ( & self , epoch_threshold : Epoch ) -> WhereCondition {
223
237
let epoch_setting_id_value = Value :: Integer ( i64:: try_from ( epoch_threshold. 0 ) . unwrap ( ) ) ;
@@ -312,8 +326,15 @@ impl StoreAdapter for EpochSettingStore {
312
326
Ok ( protocol_parameters)
313
327
}
314
328
315
- async fn remove ( & mut self , _key : & Self :: Key ) -> Result < Option < Self :: Record > , AdapterError > {
316
- unimplemented ! ( )
329
+ async fn remove ( & mut self , key : & Self :: Key ) -> Result < Option < Self :: Record > , AdapterError > {
330
+ let connection = & * self . connection . lock ( ) . await ;
331
+ let provider = DeleteEpochSettingProvider :: new ( connection) ;
332
+ let mut cursor = provider
333
+ . delete ( * key)
334
+ . map_err ( |e| AdapterError :: GeneralError ( format ! ( "{e}" ) ) ) ?;
335
+ let epoch_setting_record = cursor. next ( ) ;
336
+
337
+ Ok ( epoch_setting_record. map ( |es| es. protocol_parameters ) )
317
338
}
318
339
319
340
async fn get_iter ( & self ) -> Result < Box < dyn Iterator < Item = Self :: Record > + ' _ > , AdapterError > {
@@ -461,6 +482,17 @@ mod tests {
461
482
) ;
462
483
}
463
484
485
+ #[ test]
486
+ fn delete ( ) {
487
+ let connection = Connection :: open ( ":memory:" ) . unwrap ( ) ;
488
+ let provider = DeleteEpochSettingProvider :: new ( & connection) ;
489
+ let condition = provider. get_delete_condition_by_epoch ( Epoch ( 5 ) ) ;
490
+ let ( condition, params) = condition. expand ( ) ;
491
+
492
+ assert_eq ! ( "epoch_setting_id = ?1" . to_string( ) , condition) ;
493
+ assert_eq ! ( vec![ Value :: Integer ( 5 ) ] , params) ;
494
+ }
495
+
464
496
#[ test]
465
497
fn prune ( ) {
466
498
let connection = Connection :: open ( ":memory:" ) . unwrap ( ) ;
@@ -533,6 +565,26 @@ mod tests {
533
565
assert_eq ! ( 0 , cursor. count( ) ) ;
534
566
}
535
567
568
+ #[ test]
569
+ fn test_delete ( ) {
570
+ let connection = Connection :: open ( ":memory:" ) . unwrap ( ) ;
571
+ setup_epoch_setting_db ( & connection) . unwrap ( ) ;
572
+
573
+ let provider = DeleteEpochSettingProvider :: new ( & connection) ;
574
+ let cursor = provider. delete ( Epoch ( 2 ) ) . unwrap ( ) ;
575
+
576
+ assert_eq ! ( 1 , cursor. count( ) ) ;
577
+
578
+ let provider = EpochSettingProvider :: new ( & connection) ;
579
+ let cursor = provider. get_by_epoch ( & Epoch ( 1 ) ) . unwrap ( ) ;
580
+
581
+ assert_eq ! ( 1 , cursor. count( ) ) ;
582
+
583
+ let cursor = provider. get_by_epoch ( & Epoch ( 2 ) ) . unwrap ( ) ;
584
+
585
+ assert_eq ! ( 0 , cursor. count( ) ) ;
586
+ }
587
+
536
588
#[ test]
537
589
fn test_prune ( ) {
538
590
let connection = Connection :: open ( ":memory:" ) . unwrap ( ) ;
@@ -599,6 +651,23 @@ mod tests {
599
651
. into_iter( )
600
652
. rev( )
601
653
. collect:: <Vec <( Epoch , ProtocolParameters ) >>( )
602
- )
654
+ ) ;
655
+
656
+ for epoch_setting in & epoch_settings {
657
+ assert ! ( epoch_setting_store_adapter
658
+ . remove( & epoch_setting. 0 )
659
+ . await
660
+ . is_ok( ) ) ;
661
+ }
662
+
663
+ assert_eq ! (
664
+ 0 ,
665
+ epoch_setting_store_adapter
666
+ . get_last_n_records( epoch_settings. len( ) )
667
+ . await
668
+ . unwrap( )
669
+ . into_iter( )
670
+ . len( )
671
+ ) ;
603
672
}
604
673
}
0 commit comments