2009-04-04 10:13:56 -04:00
|
|
|
USING: accessors assocs classes.mixin classes.tuple
|
2009-04-05 14:11:35 -04:00
|
|
|
classes.tuple.parser compiler.units fry kernel sequences mongodb.driver
|
2009-05-04 08:16:42 -04:00
|
|
|
mongodb.msg mongodb.tuple.collection
|
2009-04-05 14:11:35 -04:00
|
|
|
mongodb.tuple.persistent mongodb.tuple.state strings ;
|
2009-04-04 05:10:13 -04:00
|
|
|
|
|
|
|
IN: mongodb.tuple
|
|
|
|
|
2009-05-03 07:46:37 -04:00
|
|
|
SINGLETONS: +fieldindex+ +compoundindex+ +deepindex+ +unique+ ;
|
|
|
|
|
2009-04-04 05:10:13 -04:00
|
|
|
SYNTAX: MDBTUPLE:
|
|
|
|
parse-tuple-definition
|
|
|
|
mdb-check-slots
|
|
|
|
define-tuple-class ;
|
|
|
|
|
2009-05-03 07:46:37 -04:00
|
|
|
: define-persistent ( class collection slot-options index -- )
|
|
|
|
[ [ <mdb-tuple-collection> dupd link-collection ] when* ] 2dip
|
|
|
|
[ dup '[ _ mdb-persistent add-mixin-instance ] with-compilation-unit ] 2dip
|
|
|
|
[ drop set-slot-map ]
|
|
|
|
[ nip set-index-map ] 3bi ; inline
|
2009-04-04 05:10:13 -04:00
|
|
|
|
|
|
|
: ensure-table ( class -- )
|
|
|
|
tuple-collection
|
|
|
|
[ create-collection ]
|
2009-05-03 07:46:37 -04:00
|
|
|
[ [ mdb-index-map values ] keep
|
|
|
|
'[ _ name>> >>ns ensure-index ] each
|
2009-04-04 05:10:13 -04:00
|
|
|
] bi ;
|
|
|
|
|
|
|
|
: ensure-tables ( classes -- )
|
|
|
|
[ ensure-table ] each ;
|
|
|
|
|
|
|
|
: drop-table ( class -- )
|
|
|
|
tuple-collection
|
2009-05-03 07:46:37 -04:00
|
|
|
[ [ mdb-index-map values ] keep
|
2009-04-04 10:13:56 -04:00
|
|
|
'[ _ name>> swap name>> drop-index ] each ]
|
2009-04-04 05:10:13 -04:00
|
|
|
[ name>> drop-collection ] bi ;
|
|
|
|
|
|
|
|
: recreate-table ( class -- )
|
|
|
|
[ drop-table ]
|
|
|
|
[ ensure-table ] bi ;
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
|
|
|
GENERIC: id-selector ( object -- selector )
|
2009-04-05 14:11:35 -04:00
|
|
|
|
2009-05-03 07:46:37 -04:00
|
|
|
M: toid id-selector
|
|
|
|
[ value>> ] [ key>> ] bi H{ } clone [ set-at ] keep ; inline
|
2009-04-05 14:11:35 -04:00
|
|
|
|
2009-05-03 07:46:37 -04:00
|
|
|
M: mdb-persistent id-selector
|
|
|
|
>toid id-selector ;
|
2009-04-04 05:10:13 -04:00
|
|
|
|
|
|
|
: (save-tuples) ( collection assoc -- )
|
|
|
|
swap '[ [ _ ] 2dip
|
|
|
|
[ id-selector ] dip
|
2009-04-04 10:13:56 -04:00
|
|
|
<update> >upsert update ] assoc-each ; inline
|
2009-04-04 05:10:13 -04:00
|
|
|
PRIVATE>
|
|
|
|
|
|
|
|
: save-tuple ( tuple -- )
|
2009-04-04 10:13:56 -04:00
|
|
|
tuple>storable [ (save-tuples) ] assoc-each ;
|
2009-04-04 05:10:13 -04:00
|
|
|
|
|
|
|
: update-tuple ( tuple -- )
|
|
|
|
save-tuple ;
|
|
|
|
|
|
|
|
: insert-tuple ( tuple -- )
|
|
|
|
save-tuple ;
|
|
|
|
|
|
|
|
: delete-tuple ( tuple -- )
|
2009-05-03 07:46:37 -04:00
|
|
|
[ tuple-collection name>> ] keep
|
|
|
|
id-selector delete ;
|
2009-04-04 05:10:13 -04:00
|
|
|
|
|
|
|
: tuple>query ( tuple -- query )
|
|
|
|
[ tuple-collection name>> ] keep
|
|
|
|
tuple>selector <query> ;
|
|
|
|
|
|
|
|
: select-tuple ( tuple/query -- tuple/f )
|
2009-05-01 10:22:48 -04:00
|
|
|
dup mdb-query-msg? [ tuple>query ] unless
|
2009-04-04 05:10:13 -04:00
|
|
|
find-one [ assoc>tuple ] [ f ] if* ;
|
|
|
|
|
|
|
|
: select-tuples ( tuple/query -- cursor tuples/f )
|
2009-05-01 10:22:48 -04:00
|
|
|
dup mdb-query-msg? [ tuple>query ] unless
|
2009-04-04 05:10:13 -04:00
|
|
|
find [ assoc>tuple ] map ;
|
|
|
|
|
|
|
|
: count-tuples ( tuple/query -- n )
|
2009-05-01 10:22:48 -04:00
|
|
|
dup mdb-query-msg? [ tuple>query ] unless count ;
|