]> gitweb.factorcode.org Git - factor.git/commitdiff
added each-chunk, find-all and select-all-tuples words
authorSascha Matzke <sascha.matzke@didolo.org>
Mon, 9 Aug 2010 13:22:51 +0000 (15:22 +0200)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 28 Sep 2010 20:15:54 +0000 (15:15 -0500)
extra/mongodb/driver/driver.factor
extra/mongodb/tuple/tuple.factor

index 28e6e2c0aa368754f8e267dfa1ac5470a4b177d0..0dd73aeda89921dbe51c213d366e6e2ced4c9974 100644 (file)
@@ -225,6 +225,15 @@ M: mdb-query-msg find
 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 . ;
 
index 3b0392b70d97053d325eab45b764650329deae09..1568572bfb94b19aca1f493bb70f36e394ae10e7 100644 (file)
@@ -38,6 +38,8 @@ SYNTAX: MDBTUPLE:
     [ drop-table ] 
     [ ensure-table ] bi ;
 
+DEFER: tuple>query
+
 <PRIVATE
 
 GENERIC: id-selector ( object -- selector )
@@ -52,6 +54,10 @@ M: mdb-persistent id-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 -- )
@@ -83,12 +89,16 @@ PRIVATE>
    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 ;