: prepare-assoc ( tuple -- assoc mirror tuple assoc )
H{ } clone swap [ <mirror> ] keep pick ; inline
-: ensure-mdb-info ( tuple -- tuple )
- dup id>> [ <oid> >>id ] unless ; inline
-
: with-object-map ( quot: ( -- ) -- store-assoc )
[ H{ } clone dup object-map ] dip with-variable ; inline
GENERIC: tuple>storable ( tuple -- storable )
+: ensure-oid ( tuple -- tuple )
+ dup id>> [ <oid> >>id ] unless ; inline
+
M: mdb-persistent tuple>storable ( mdb-persistent -- object-map )
'[ _ [ tuple>assoc ] write-mdb-persistent drop ] with-object-map ; inline
M: mdb-persistent tuple>assoc ( tuple -- assoc )
- ensure-mdb-info (tuple>assoc) ;
+ ensure-oid (tuple>assoc) ;
M: tuple tuple>assoc ( tuple -- assoc )
(tuple>assoc) ;
: update-tuple ( tuple -- )
[ tuple-collection name>> ]
- [ id-selector ]
+ [ ensure-oid id-selector ]
[ tuple>assoc ] tri
<update> >upsert update ;