1 USING: accessors assocs classes.mixin classes.tuple
2 classes.tuple.parser compiler.units fry kernel sequences
5 mongodb.msg mongodb.tuple.collection
6 mongodb.tuple.persistent mongodb.tuple.state strings ;
7 FROM: mongodb.driver => update delete find count ;
8 FROM: mongodb.tuple.persistent => assoc>tuple ;
13 parse-tuple-definition
17 : define-persistent ( class collection slot-options index -- )
18 [ [ <mdb-tuple-collection> dupd link-collection ] when* ] 2dip
19 [ dup '[ _ mdb-persistent add-mixin-instance ] with-compilation-unit ] 2dip
21 [ nip set-index-map ] 3bi ; inline
23 : ensure-table ( class -- )
26 [ [ mdb-index-map values ] keep
27 '[ _ name>> >>ns ensure-index ] each
30 : ensure-tables ( classes -- )
31 [ ensure-table ] each ;
33 : drop-table ( class -- )
35 [ [ mdb-index-map values ] keep
36 '[ _ name>> swap name>> drop-index ] each ]
37 [ name>> drop-collection ] bi ;
39 : recreate-table ( class -- )
47 GENERIC: id-selector ( object -- selector )
50 [ value>> ] [ key>> ] bi associate ; inline
52 M: mdb-persistent id-selector
55 : (save-tuples) ( collection assoc -- )
58 <update> >upsert update ] assoc-each ; inline
60 : prepare-tuple-query ( tuple/query -- query )
61 dup mdb-query-msg? [ tuple>query ] unless ;
65 : save-tuple-deep ( tuple -- )
66 tuple>storable [ (save-tuples) ] assoc-each ;
68 : update-tuple ( tuple -- )
69 [ tuple-collection name>> ]
70 [ ensure-oid id-selector ]
72 <update> >upsert update ;
74 : save-tuple ( tuple -- )
77 : insert-tuple ( tuple -- )
78 [ tuple-collection name>> ]
82 : delete-tuple ( tuple -- )
83 [ tuple-collection name>> ] keep
84 id-selector <delete> delete ;
86 : delete-tuples ( seq -- )
87 [ delete-tuple ] each ;
89 : tuple>query ( tuple -- query )
90 [ tuple-collection name>> ] keep
91 tuple>selector <query> ;
93 : select-tuple ( tuple/query -- tuple/f )
95 find-one [ assoc>tuple ] [ f ] if* ;
97 : select-tuples ( tuple/query -- cursor tuples/f )
99 find [ assoc>tuple ] map ;
101 : select-all-tuples ( tuple/query -- tuples )
103 find-all [ assoc>tuple ] map ;
105 : count-tuples ( tuple/query -- n )
106 dup mdb-query-msg? [ tuple>query ] unless count ;