@@ -131,7 +131,7 @@ pub struct EntityStorage {
131
131
data : Database < OwnedType < DataItemId > , SerdeBincode < DataItem > > ,
132
132
indices : Database < Str , SerdeBincode < Index > > ,
133
133
documents : Database < Str , SerdeBincode < RoaringBitmap > > ,
134
- deltas : Database < OwnedType < u64 > , SerdeBincode < BTreeMap < i64 , StoredDelta > > > ,
134
+ deltas : Database < OwnedType < u64 > , SerdeBincode < BTreeMap < i64 , HashMap < String , StoredDelta > > > > ,
135
135
index_descriptors : HashMap < String , TypeDescriptor > ,
136
136
}
137
137
@@ -441,14 +441,16 @@ impl EntityStorage {
441
441
. range ( ( Bound :: Unbounded , Bound :: Included ( scope. timestamp ) ) )
442
442
. fold (
443
443
HashMap :: < String , StoredDelta > :: new ( ) ,
444
- |mut acc, ( _, stored_delta) | {
445
- if let Some ( aggregated_delta) = acc. get_mut ( & stored_delta. field_name ) {
446
- aggregated_delta. before . plus ( & stored_delta. before ) ;
447
- aggregated_delta. after . plus ( & stored_delta. after ) ;
448
- aggregated_delta. affected |= & stored_delta. affected ;
449
- } else {
450
- acc. insert ( stored_delta. field_name . clone ( ) , stored_delta. clone ( ) ) ;
451
- } ;
444
+ |mut acc, ( _, stored_deltas) | {
445
+ for ( field_name, stored_delta) in stored_deltas {
446
+ if let Some ( aggregated_delta) = acc. get_mut ( field_name) {
447
+ aggregated_delta. before . plus ( & stored_delta. before ) ;
448
+ aggregated_delta. after . plus ( & stored_delta. after ) ;
449
+ aggregated_delta. affected |= & stored_delta. affected ;
450
+ } else {
451
+ acc. insert ( stored_delta. field_name . clone ( ) , stored_delta. clone ( ) ) ;
452
+ } ;
453
+ }
452
454
453
455
acc
454
456
} ,
@@ -539,6 +541,8 @@ impl EntityStorage {
539
541
let scope_id = scope. get_id ( ) ;
540
542
let mut current = self . deltas . get ( & txn, & scope_id) ?. unwrap_or_default ( ) ;
541
543
544
+ let stored_deltas = current. entry ( scope. timestamp ) . or_default ( ) ;
545
+
542
546
// Iterate over the deltas to create for each field name the before and after index
543
547
for delta in deltas {
544
548
let type_descriptor = self
@@ -551,12 +555,13 @@ impl EntityStorage {
551
555
)
552
556
} ) ;
553
557
554
- let stored_delta = current
555
- . entry ( scope. timestamp )
556
- . or_insert ( StoredDelta :: from_type (
557
- delta. field_name . clone ( ) ,
558
- type_descriptor,
559
- ) ) ;
558
+ let stored_delta =
559
+ stored_deltas
560
+ . entry ( delta. field_name . clone ( ) )
561
+ . or_insert ( StoredDelta :: from_type (
562
+ delta. field_name . clone ( ) ,
563
+ type_descriptor,
564
+ ) ) ;
560
565
561
566
let position = id_to_position ( delta. id ) ;
562
567
0 commit comments