@@ -7,7 +7,7 @@ use std::sync::Arc;
77use crate :: cheap_clone:: CheapClone ;
88use crate :: components:: store:: write:: EntityModification ;
99use crate :: components:: store:: { self as s, Entity , EntityOperation } ;
10- use crate :: data:: store:: { EntityV , EntityValidationError , Id , IdType , IntoEntityIterator } ;
10+ use crate :: data:: store:: { EntityValidationError , Id , IdType , IntoEntityIterator } ;
1111use crate :: prelude:: ENV_VARS ;
1212use crate :: schema:: { EntityKey , InputSchema } ;
1313use crate :: util:: intern:: Error as InternError ;
@@ -33,8 +33,8 @@ pub enum GetScope {
3333#[ derive( Debug , Clone ) ]
3434enum EntityOp {
3535 Remove ,
36- Update ( EntityV ) ,
37- Overwrite ( EntityV ) ,
36+ Update ( Entity ) ,
37+ Overwrite ( Entity ) ,
3838}
3939
4040impl EntityOp {
@@ -45,7 +45,7 @@ impl EntityOp {
4545 use EntityOp :: * ;
4646 match ( self , entity) {
4747 ( Remove , _) => Ok ( None ) ,
48- ( Overwrite ( new) , _) | ( Update ( new) , None ) => Ok ( Some ( new. e ) ) ,
48+ ( Overwrite ( new) , _) | ( Update ( new) , None ) => Ok ( Some ( new) ) ,
4949 ( Update ( updates) , Some ( entity) ) => {
5050 let mut e = entity. borrow ( ) . clone ( ) ;
5151 e. merge_remove_null_fields ( updates) ?;
@@ -69,7 +69,7 @@ impl EntityOp {
6969 match self {
7070 // This is how `Overwrite` is constructed, by accumulating `Update` onto `Remove`.
7171 Remove => * self = Overwrite ( update) ,
72- Update ( current) | Overwrite ( current) => current. e . merge ( update. e ) ,
72+ Update ( current) | Overwrite ( current) => current. merge ( update) ,
7373 }
7474 }
7575}
@@ -288,9 +288,9 @@ impl EntityCache {
288288 ) -> Result < Option < Entity > , anyhow:: Error > {
289289 match op {
290290 EntityOp :: Update ( entity) | EntityOp :: Overwrite ( entity)
291- if query. matches ( key, & entity. e ) =>
291+ if query. matches ( key, & entity) =>
292292 {
293- Ok ( Some ( entity. e . clone ( ) ) )
293+ Ok ( Some ( entity. clone ( ) ) )
294294 }
295295 EntityOp :: Remove => Ok ( None ) ,
296296 _ => Ok ( None ) ,
@@ -371,7 +371,10 @@ impl EntityCache {
371371 // The next VID is based on a block number and a sequence within the block
372372 let vid = ( ( block as i64 ) << 32 ) + self . vid_seq as i64 ;
373373 self . vid_seq += 1 ;
374- let entity = EntityV :: new ( entity, vid) ;
374+ let mut entity = entity;
375+ let old_vid = entity. set_vid ( vid) . expect ( "the vid should be set" ) ;
376+ // Make sure that there was no VID previously set for this entity.
377+ assert ! ( old_vid. is_none( ) ) ;
375378
376379 self . entity_op ( key. clone ( ) , EntityOp :: Update ( entity) ) ;
377380
@@ -478,22 +481,19 @@ impl EntityCache {
478481 // Entity was created
479482 ( None , EntityOp :: Update ( mut updates) )
480483 | ( None , EntityOp :: Overwrite ( mut updates) ) => {
481- let vid = updates. vid ;
482- updates. e . remove_null_fields ( ) ;
483- let data = Arc :: new ( updates. e . clone ( ) ) ;
484+ updates. remove_null_fields ( ) ;
485+ let data = Arc :: new ( updates) ;
484486 self . current . insert ( key. clone ( ) , Some ( data. cheap_clone ( ) ) ) ;
485487 Some ( Insert {
486488 key,
487489 data,
488490 block,
489491 end : None ,
490- vid,
491492 } )
492493 }
493494 // Entity may have been changed
494495 ( Some ( current) , EntityOp :: Update ( updates) ) => {
495496 let mut data = current. as_ref ( ) . clone ( ) ;
496- let vid = updates. vid ;
497497 data. merge_remove_null_fields ( updates)
498498 . map_err ( |e| key. unknown_attribute ( e) ) ?;
499499 let data = Arc :: new ( data) ;
@@ -504,24 +504,21 @@ impl EntityCache {
504504 data,
505505 block,
506506 end : None ,
507- vid,
508507 } )
509508 } else {
510509 None
511510 }
512511 }
513512 // Entity was removed and then updated, so it will be overwritten
514513 ( Some ( current) , EntityOp :: Overwrite ( data) ) => {
515- let vid = data. vid ;
516- let data = Arc :: new ( data. e . clone ( ) ) ;
514+ let data = Arc :: new ( data) ;
517515 self . current . insert ( key. clone ( ) , Some ( data. cheap_clone ( ) ) ) ;
518516 if current != data {
519517 Some ( Overwrite {
520518 key,
521519 data,
522520 block,
523521 end : None ,
524- vid,
525522 } )
526523 } else {
527524 None
0 commit comments