M: mdb-cursor find
get-more ;
+: each-chunk ( selector quot: ( seq -- ) -- )
+ swap find
+ [ pick call( seq -- ) ] when*
+ [ swap each-chunk ] [ drop ] if* ;
+
+: find-all ( selector -- seq )
+ [ V{ } clone ] dip
+ over '[ _ push-all ] each-chunk >array ;
+
: explain. ( mdb-query-msg -- )
t >>explain find nip . ;
[ drop-table ]
[ ensure-table ] bi ;
+DEFER: tuple>query
+
<PRIVATE
GENERIC: id-selector ( object -- selector )
swap '[ [ _ ] 2dip
[ id-selector ] dip
<update> >upsert update ] assoc-each ; inline
+
+: prepare-tuple-query ( tuple/query -- query )
+ dup mdb-query-msg? [ tuple>query ] unless ;
+
PRIVATE>
: save-tuple-deep ( tuple -- )
tuple>selector <query> ;
: select-tuple ( tuple/query -- tuple/f )
- dup mdb-query-msg? [ tuple>query ] unless
+ prepare-tuple-query
find-one [ assoc>tuple ] [ f ] if* ;
: select-tuples ( tuple/query -- cursor tuples/f )
- dup mdb-query-msg? [ tuple>query ] unless
+ prepare-tuple-query
find [ assoc>tuple ] map ;
+: select-all-tuples ( tuple/query -- tuples )
+ prepare-tuple-query
+ find-all [ assoc>tuple ] map ;
+
: count-tuples ( tuple/query -- n )
dup mdb-query-msg? [ tuple>query ] unless count ;