]> gitweb.factorcode.org Git - factor.git/commitdiff
another checkpoint - tuple integration seems to work
authorSascha Matzke <sascha.matzke@didolo.org>
Sat, 4 Apr 2009 14:13:56 +0000 (16:13 +0200)
committerSascha Matzke <sascha.matzke@didolo.org>
Sat, 4 Apr 2009 14:13:56 +0000 (16:13 +0200)
bson/constants/constants.factor
bson/reader/reader.factor
bson/writer/writer.factor
mongodb/driver/driver.factor
mongodb/tuple/collection/collection.factor
mongodb/tuple/index/index.factor
mongodb/tuple/persistent/persistent.factor
mongodb/tuple/state/state.factor
mongodb/tuple/tuple.factor

index aa852bbff8aa9cf61189e4e90eb3a3806c6ca728..5148413b6104851f9a525f944f0820f96982507e 100644 (file)
@@ -2,10 +2,8 @@ USING: accessors constructors kernel strings uuid ;
 
 IN: bson.constants
 
-TUPLE: objid id ;
-
 : <objid> ( -- objid )
-   objid new uuid1 >>id ; inline
+   uuid1 ; inline
 
 TUPLE: oid { a initial: 0 } { b initial: 0 } ;
 
index 595ca59544f25384915435306a66786a76e227d5..94728b2622b90e68fb4ebb2e26b44239af3ecf86 100644 (file)
@@ -186,11 +186,6 @@ M: bson-binary-custom element-binary-read ( size type -- dbref )
     read-cstring
     read-cstring objref boa ;
 
-M: bson-binary-uuid element-binary-read ( size type -- object )
-    2drop
-    read-cstring
-    objid boa ;
-
 M: bson-binary-bytes element-binary-read ( size type -- bytes )
     drop read ;
 
index 441bc182de2bb795f32c5d2dc840f8d873500aa7..2b1fc54537a5d452e027920fa64bccfa0cd7a938 100644 (file)
@@ -77,7 +77,6 @@ M: timestamp bson-type? ( timestamp -- type ) drop T_Date ;
 M: mdbregexp bson-type? ( regexp -- type ) drop T_Regexp ;
 
 M: oid bson-type? ( word -- type ) drop T_OID ;
-M: objid bson-type? ( objid -- type ) drop T_Binary ;
 M: objref bson-type? ( objref -- type ) drop T_Binary ;
 M: quotation bson-type? ( quotation -- type ) drop T_Binary ; 
 M: byte-array bson-type? ( byte-array -- type ) drop T_Binary ; 
@@ -126,16 +125,11 @@ M: quotation bson-write ( quotation -- )
 M: oid bson-write ( oid -- )
     [ a>> write-longlong ] [ b>> write-int32 ] bi ;
 
-M: objid bson-write ( oid -- )
-    id>> [ binary ] dip '[ _ write-cstring ] with-byte-writer
-    [ length write-int32 ] keep
-    T_Binary_UUID write-byte write ;
-
 M: objref bson-write ( objref -- )
     [ binary ] dip
     '[ _
        [ ns>> write-cstring ]
-       [ objid>> id>> write-cstring ] bi ] with-byte-writer
+       [ objid>> write-cstring ] bi ] with-byte-writer
     [ length write-int32 ] keep
     T_Binary_Custom write-byte write ;
        
index 1853beb81f3c6494fb2f0fef23c0a65af620cb59..e15fe9b6797cb5b6520b9b551c047371f33281ed 100644 (file)
@@ -195,6 +195,7 @@ MEMO: reserved-namespace? ( name -- ? )
 PRIVATE>
 
 MEMO: ensure-collection ( collection -- fq-collection )
+    dup mdb-collection? [ name>> ] when
     "." split1 over mdb name>> =
     [ nip ] [ drop ] if
     [ ] [ reserved-namespace? ] bi
index e5dedf19676b59c9fcf315b28f6cf8e3a1408642..d75e143b7b297c89e88daec13f56aeb3c645f30b 100644 (file)
@@ -1,10 +1,16 @@
 
 USING: accessors arrays assocs bson.constants classes classes.tuple
-continuations fry kernel mongodb.driver sequences
+combinators continuations fry kernel mongodb.driver sequences strings
 vectors words ;
 
+IN: mongodb.tuple
+
+SINGLETONS: +transient+ +load+ ;
+
 IN: mongodb.tuple.collection
 
+FROM: mongodb.tuple => +transient+ +load+ ;
+
 MIXIN: mdb-persistent
 
 SLOT: _id
@@ -14,7 +20,7 @@ TUPLE: mdb-tuple-collection < mdb-collection { classes } ;
 
 GENERIC: tuple-collection ( object -- mdb-collection )
 
-GENERIC: mdb-slot-list  ( tuple -- string )
+GENERIC: mdb-slot-map  ( tuple -- string )
 
 <PRIVATE
 
@@ -27,7 +33,7 @@ CONSTANT: MDB_COLLECTION_MAP "_mdb_col_map"
     [ nip ]
     [ superclass [ (mdb-collection) ] [ f ] if* ] if* ; inline recursive
 
-: (mdb-slot-list) ( class -- slot-defs )
+: (mdb-slot-map) ( class -- slot-defs )
     superclasses [ MDB_SLOTDEF_LIST word-prop ] map assoc-combine  ; inline 
 
 : split-optl ( seq -- key options )
@@ -59,8 +65,8 @@ PRIVATE>
     over all-slots [ name>> ] map [ MDB_OID_FIELD ] dip member?
     [  ] [ MDB_ADDON_SLOTS prepend ] if ; inline
 
-: set-slot-options ( class options -- )
-    '[ MDB_SLOTDEF_LIST _ optl>map set-word-prop ] keep
+: set-slot-map ( class options -- )
+    '[ _ optl>map MDB_SLOTDEF_LIST set-word-prop ] keep
     dup tuple-collection link-collection ; inline
   
 M: tuple-class tuple-collection ( tuple -- mdb-collection )
@@ -69,22 +75,44 @@ M: tuple-class tuple-collection ( tuple -- mdb-collection )
 M: mdb-persistent tuple-collection ( tuple -- mdb-collection )
     class (mdb-collection) ;
  
-M: mdb-persistent mdb-slot-list ( tuple -- string )
-    class (mdb-slot-list) ;
+M: mdb-persistent mdb-slot-map ( tuple -- string )
+    class (mdb-slot-map) ;
 
-M: tuple-class mdb-slot-list ( class -- assoc )
-    (mdb-slot-list) ;
+M: tuple-class mdb-slot-map ( class -- assoc )
+    (mdb-slot-map) ;
 
-M: mdb-collection mdb-slot-list ( collection -- assoc )
-    classes>> [ mdb-slot-list ] map assoc-combine ;
+M: mdb-collection mdb-slot-map ( collection -- assoc )
+    classes>> [ mdb-slot-map ] map assoc-combine ;
+
+<PRIVATE
 
 : collection-map ( -- assoc )
-    MDB_COLLECTION_MAP mdb-persistent word-prop
+    mdb-persistent MDB_COLLECTION_MAP word-prop
     [ mdb-persistent MDB_COLLECTION_MAP H{ } clone
       [ set-word-prop ] keep ] unless* ; inline
+
+: slot-option? ( tuple slot option -- ? )
+    [ swap mdb-slot-map at ] dip
+    '[ _ swap key? ] [ f ] if* ;
   
-: <mdb-tuple-collection> ( name -- mdb-tuple-collection )
+PRIVATE>
+
+GENERIC: <mdb-tuple-collection> ( name -- mdb-tuple-collection )
+M: string <mdb-tuple-collection> ( name -- mdb-tuple-collection )
     collection-map [ ] [ key? ] 2bi 
     [ at ] [ [ mdb-tuple-collection new dup ] 2dip 
              [ [ >>name ] keep ] dip set-at ] if ; inline
-
+M: mdb-tuple-collection <mdb-tuple-collection> ( mdb-tuple-collection -- mdb-tuple-collection ) ;
+M: mdb-collection <mdb-tuple-collection> ( mdb-collection -- mdb-tuple-collection )
+    [ name>> <mdb-tuple-collection> ] keep
+    {
+        [ capped>> >>capped ]
+        [ size>> >>size ]
+        [ max>> >>max ]
+    } cleave ;
+
+: transient-slot? ( tuple slot -- ? )
+    +transient+ slot-option? ;
+
+: load-slot? ( tuple slot -- ? )
+    +load+ slot-option? ;
index 466c36f719ecb45859aad0a9ea50d13684055df8..270fecfd3849c0d4ba1ca6d603928bfa41ea59e6 100644 (file)
@@ -1,11 +1,15 @@
 USING: kernel fry accessors formatting linked-assocs assocs sequences sequences.deep
 mongodb.tuple.collection combinators mongodb.tuple.collection ; 
 
+IN: mongodb.tuple
+
+SINGLETONS: +fieldindex+ +compoundindex+ +deepindex+ ;
+
 IN: mongodb.tuple.index
 
-TUPLE: tuple-index name spec ;
+FROM: mongodb.tuple => +fieldindex+ +compoundindex+ +deepindex+ ;
 
-SYMBOLS: +transient+ +load+ +fieldindex+ +compoundindex+ +deepindex+ ;
+TUPLE: tuple-index name spec ;
 
 <PRIVATE
 
@@ -47,7 +51,7 @@ SYMBOLS: +transient+ +load+ +fieldindex+ +compoundindex+ +deepindex+ ;
 PRIVATE>
 
 : tuple-index-list ( mdb-collection/class -- seq )
-    mdb-slot-list V{ } clone tuck
+    mdb-slot-map V{ } clone tuck
     '[ [ is-index-declaration? ] filter
        build-index-seq _ push 
     ] assoc-each flatten ;
index 5dfb418c0db050765516e5d8da66eec2a16b2f62..6d5e1837a79503613148a5e82c0b10242fa884dc 100644 (file)
@@ -11,7 +11,6 @@ GENERIC: tuple>assoc ( tuple -- assoc )
 GENERIC: tuple>selector ( tuple -- selector )
 
 DEFER: assoc>tuple
-DEFER: mdb-persistent?
 
 <PRIVATE
 
@@ -41,19 +40,23 @@ DEFER: mdb-persistent?
 : add-storable ( assoc ns -- )
    [ H{ } clone ] dip mdb-store-list get at+
    [ dup [ MDB_OID_FIELD ] dip at ] dip set-at ; inline
-: write-tuple-fields ( mirror assoc conv-quot -- )
-   swap [ dup ] dip ! m a a q
-   '[ [ dup mdb-persistent?
+
+: write-field? ( tuple key value -- ? )
+   [ [ 2drop ] dip not ] [ drop transient-slot? ] 3bi or not ; inline
+
+: write-tuple-fields ( mirror tuple assoc quot: ( tuple -- assoc ) -- )
+   swap dupd ! m t q q a 
+   '[ _ 2over write-field?
+      [ dup mdb-persistent?
         [ _ keep
           [ tuple-collection ] keep
           [ add-storable ] dip
           [ tuple-collection ] [ _id>> ] bi <objref> ]
-        [ dup data-tuple? _ [ ] if ] if _ set-at ] [ drop ] if*
+        [ dup data-tuple? _ [ ] if ] if swap _ set-at ] [ 2drop ] if
    ] assoc-each ; 
 
-: prepare-assoc ( tuple -- assoc mirror assoc )
-   <mirror> H{ } clone tuck ; inline
+: prepare-assoc ( tuple -- assoc mirror tuple assoc )
+   H{ } clone swap [ <mirror> ] keep pick ; inline
 
 : ensure-mdb-info ( tuple -- tuple )    
    dup _id>> [ <objid> >>_id ] unless
index 1d6dde3654c50fedc3fad4927e0da12a448fef84..e0e045e31d3d17e2de3c0989f85d2402761bf331 100644 (file)
@@ -28,17 +28,17 @@ PRIVATE>
    dup _mfd>> [ ] [ H{ } clone [ >>_mfd ] keep ] if* nip ; inline
 
 : dirty? ( tuple -- ? )
-   MDB_DIRTY_FLAG tuple-meta at ;
+    MDB_DIRTY_FLAG tuple-meta at ;
 
 : set-dirty ( tuple -- )
-   t MDB_DIRTY_FLAG tuple-meta set-at ;
+    [ t MDB_DIRTY_FLAG ] dip tuple-meta set-at ;
 
 : persistent? ( tuple -- ? )
-   MDB_PERSISTENT_FLAG tuple-meta at ;
+    MDB_PERSISTENT_FLAG tuple-meta at ;
 
 : set-persistent ( tuple -- )
-   t MDB_PERSISTENT_FLAG tuple-meta set-at ;
+    [ t MDB_PERSISTENT_FLAG ] dip tuple-meta set-at ;
 
 : needs-store? ( tuple -- ? )
-   [ persistent? not ] [ dirty? ] bi or ;
+    [ persistent? not ] [ dirty? ] bi or ;
 
index 9b4f462f2ee6df0258673d9c8f8f6dafdfd97636..089a3ec12137ed028ea27a4588446e0a28752ad6 100644 (file)
@@ -1,28 +1,26 @@
-USING: accessors assocs classes classes.mixin classes.tuple vectors math
-classes.tuple.parser formatting generalizations kernel sequences fry combinators
-linked-assocs sequences.deep mongodb.driver continuations memoize bson.constants
-prettyprint strings compiler.units slots tools.walker words arrays ;
+USING: accessors assocs classes.mixin classes.tuple
+classes.tuple.parser compiler.units fry kernel mongodb.driver
+mongodb.msg mongodb.tuple.collection mongodb.tuple.index
+mongodb.tuple.persistent mongodb.tuple.state sequences strings ;
 
 IN: mongodb.tuple
 
-USING: mongodb.tuple.state mongodb.tuple.persistent mongodb.tuple.collection
-mongodb.tuple.index mongodb.msg ; 
-
 SYNTAX: MDBTUPLE:
     parse-tuple-definition
     mdb-check-slots
     define-tuple-class ; 
 
 : define-persistent ( class collection options -- )
+    [ <mdb-tuple-collection> ] dip
     [ [ dup ] dip link-collection ] dip ! cl options
     [ dup '[ _ mdb-persistent add-mixin-instance ] with-compilation-unit ] dip 
-    set-slot-options ;
+    set-slot-map ;
 
 : ensure-table ( class -- )
     tuple-collection
     [ create-collection ]
     [ [ tuple-index-list ] keep
-      '[ _ swap [ name>> ] [ spec>> ] bi ensure-index ] each
+      '[ _ name>> swap [ name>> ] [ spec>> ] bi ensure-index ] each
     ] bi ;
 
 : ensure-tables ( classes -- )
@@ -31,7 +29,7 @@ SYNTAX: MDBTUPLE:
 : drop-table ( class -- )
       tuple-collection
       [ [ tuple-index-list ] keep
-        '[ _ swap name>> drop-index ] each ]
+        '[ _ name>> swap name>> drop-index ] each ]
       [ name>> drop-collection ] bi ;
 
 : recreate-table ( class -- )
@@ -41,19 +39,19 @@ SYNTAX: MDBTUPLE:
 <PRIVATE
 
 GENERIC: id-selector ( object -- selector )
-M: objid id-selector ( objid -- selector )
+M: string id-selector ( objid -- selector )
    "_id" H{ } clone [ set-at ] keep ; inline
 M: mdb-persistent id-selector ( mdb-persistent -- selector )
-   id>> id-selector ;
+   _id>> id-selector ;
 
 : (save-tuples) ( collection assoc -- )
    swap '[ [ _ ] 2dip
            [ id-selector ] dip
-           <update> update ] assoc-each ; inline
+           <update> >upsert update ] assoc-each ; inline
 PRIVATE>
  
 : save-tuple ( tuple -- )
-   tuple>assoc [ (save-tuples) ] assoc-each ;
+   tuple>storable [ (save-tuples) ] assoc-each ;
  
 : update-tuple ( tuple -- )
    save-tuple ;