1 USING: accessors assocs classes.mixin classes.tuple
2 classes.tuple.parser compiler.units fry kernel sequences mongodb.driver
3 mongodb.msg mongodb.tuple.collection
4 mongodb.tuple.persistent mongodb.tuple.state strings ;
8 SINGLETONS: +fieldindex+ +compoundindex+ +deepindex+ +unique+ ;
11 parse-tuple-definition
15 : define-persistent ( class collection slot-options index -- )
16 [ [ <mdb-tuple-collection> dupd link-collection ] when* ] 2dip
17 [ dup '[ _ mdb-persistent add-mixin-instance ] with-compilation-unit ] 2dip
19 [ nip set-index-map ] 3bi ; inline
21 : ensure-table ( class -- )
24 [ [ mdb-index-map values ] keep
25 '[ _ name>> >>ns ensure-index ] each
28 : ensure-tables ( classes -- )
29 [ ensure-table ] each ;
31 : drop-table ( class -- )
33 [ [ mdb-index-map values ] keep
34 '[ _ name>> swap name>> drop-index ] each ]
35 [ name>> drop-collection ] bi ;
37 : recreate-table ( class -- )
43 GENERIC: id-selector ( object -- selector )
46 [ value>> ] [ key>> ] bi H{ } clone [ set-at ] keep ; inline
48 M: mdb-persistent id-selector
51 : (save-tuples) ( collection assoc -- )
54 <update> >upsert update ] assoc-each ; inline
57 : save-tuple-deep ( tuple -- )
58 tuple>storable [ (save-tuples) ] assoc-each ;
60 : update-tuple ( tuple -- )
61 [ tuple-collection name>> ]
66 : save-tuple ( tuple -- )
69 : insert-tuple ( tuple -- )
70 [ tuple-collection name>> ]
74 : delete-tuple ( tuple -- )
75 [ tuple-collection name>> ] keep
78 : delete-tuples ( seq -- )
79 [ delete-tuple ] each ;
81 : tuple>query ( tuple -- query )
82 [ tuple-collection name>> ] keep
83 tuple>selector <query> ;
85 : select-tuple ( tuple/query -- tuple/f )
86 dup mdb-query-msg? [ tuple>query ] unless
87 find-one [ assoc>tuple ] [ f ] if* ;
89 : select-tuples ( tuple/query -- cursor tuples/f )
90 dup mdb-query-msg? [ tuple>query ] unless
91 find [ assoc>tuple ] map ;
93 : count-tuples ( tuple/query -- n )
94 dup mdb-query-msg? [ tuple>query ] unless count ;