]> gitweb.factorcode.org Git - factor.git/commitdiff
some renaming
authorSascha Matzke <sascha.matzke@didolo.org>
Sun, 5 Apr 2009 18:11:35 +0000 (20:11 +0200)
committerSascha Matzke <sascha.matzke@didolo.org>
Sun, 5 Apr 2009 18:11:35 +0000 (20:11 +0200)
now adding an advice for marking a tuple dirty

bson/writer/writer.factor
mongodb/tuple/persistent/persistent.factor
mongodb/tuple/state/state.factor
mongodb/tuple/tuple.factor

index 2b1fc54537a5d452e027920fa64bccfa0cd7a938..4ad1d7fdccc7c235c83c82da6a1fb65db3b162bb 100644 (file)
@@ -4,7 +4,7 @@ USING: accessors assocs bson.constants byte-arrays byte-vectors
 calendar fry io io.binary io.encodings io.encodings.binary
 io.encodings.utf8 io.streams.byte-array kernel math math.parser
 namespaces quotations sequences sequences.private serialize strings
-words ;
+words combinators.short-circuit ;
 
 
 IN: bson.writer
@@ -164,3 +164,6 @@ PRIVATE>
 : assoc>stream ( assoc -- )
     bson-write ; inline
 
+: mdb-special-value? ( value -- ? )
+   { [ timestamp? ] [ quotation? ] [ mdbregexp? ]
+     [ oid? ] [ byte-array? ] } 1|| ;
\ No newline at end of file
index 6d5e1837a79503613148a5e82c0b10242fa884dc..329d9cb0c7da5678f17f374e1c3644f901263b18 100644 (file)
@@ -1,10 +1,11 @@
-USING: accessors assocs classes fry kernel linked-assocs math mirrors
-namespaces sequences strings vectors words bson.constants 
-continuations mongodb.driver mongodb.tuple.collection mongodb.tuple.state ;
+USING: accessors assocs bson.constants combinators.short-circuit
+constructors continuations fry kernel mirrors mongodb.tuple.collection
+mongodb.tuple.state namespaces sequences words bson.writer combinators
+hashtables linked-assocs ;
 
 IN: mongodb.tuple.persistent
 
-SYMBOL: mdb-store-list
+SYMBOLS: object-map ;
 
 GENERIC: tuple>assoc ( tuple -- assoc )
 
@@ -15,7 +16,7 @@ DEFER: assoc>tuple
 <PRIVATE
 
 : mdbinfo>tuple-class ( tuple-info -- class )
-    [ first ] keep second lookup ; inline
+   [ first ] keep second lookup ; inline
 
 : tuple-instance ( tuple-info -- instance )
     mdbinfo>tuple-class new ; inline 
@@ -27,7 +28,7 @@ DEFER: assoc>tuple
 : make-tuple ( assoc -- tuple )
    prepare-assoc>tuple
    '[ dup _ at assoc>tuple swap _ set-at ] each
-   [ set-persistent ] keep ; inline recursive
+   [ mark-persistent ] keep ; inline recursive
 
 : at+ ( value key assoc -- value )
     2dup key?
@@ -38,21 +39,43 @@ DEFER: assoc>tuple
     [ assoc? not ] [ drop f ] if  ; inline
 
 : add-storable ( assoc ns -- )
-   [ H{ } clone ] dip mdb-store-list get at+
+   [ H{ } clone ] dip object-map get at+
    [ dup [ MDB_OID_FIELD ] dip at ] dip set-at ; inline
 
 : write-field? ( tuple key value -- ? )
-   [ [ 2drop ] dip not ] [ drop transient-slot? ] 3bi or not ; inline
+   pick mdb-persistent? [ 
+      { [ [ 2drop ] dip not ]
+        [ drop transient-slot? ] } 3|| not ] [ 3drop t ] if ; inline
+
+TUPLE: cond-value value quot ;
+
+CONSTRUCTOR: cond-value ( value quot -- cond-value ) ;
+
+: write-mdb-persistent ( value quot: ( tuple -- assoc ) -- value' )
+   over needs-store?
+   [ over [ (( tuple -- assoc )) call-effect ] dip 
+     [ tuple-collection name>> ] keep
+     [ add-storable ] dip
+   ] [ drop ] if 
+   [ tuple-collection name>> ] [ _id>> ] bi <objref> ; inline
+
+: write-field ( value quot: ( tuple -- assoc ) -- value' )
+   <cond-value> {
+      { [ dup value>> mdb-special-value? ] [ value>> ]  }
+      { [ dup value>> mdb-persistent? ]
+        [ [ value>> ] [ quot>> ] bi write-mdb-persistent ] }
+      { [ dup value>> data-tuple? ]
+        [ [ value>> ] [ quot>> ] bi (( tuple -- assoc )) call-effect ]  }
+      { [ dup value>> [ hashtable? ] [ linked-assoc? ] bi or ]
+        [ [ value>> ] [ quot>> ] bi '[ _ write-field ] assoc-map ] }
+      [ value>> ]
+   } cond ; inline recursive
 
 : write-tuple-fields ( mirror tuple assoc quot: ( tuple -- assoc ) -- )
-   swap dupd ! m t q q a 
+   swap ! 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 swap _ set-at ] [ 2drop ] if
+      [ _ write-field swap _ set-at ]
+      [ 2drop ] if
    ] assoc-each ; 
 
 : prepare-assoc ( tuple -- assoc mirror tuple assoc )
@@ -60,20 +83,21 @@ DEFER: assoc>tuple
 
 : ensure-mdb-info ( tuple -- tuple )    
    dup _id>> [ <objid> >>_id ] unless
-   [ set-persistent ] keep ; inline
+   [ mark-persistent ] keep ; inline
 
-: with-store-list ( quot: ( -- ) -- store-assoc )
-   [ H{ } clone dup mdb-store-list ] dip with-variable ; inline
+: with-object-map ( quot: ( -- ) -- store-assoc )
+   [ H{ } clone dup object-map ] dip with-variable ; inline
 
 : (tuple>assoc) ( tuple -- assoc )
    [ prepare-assoc [ tuple>assoc ] write-tuple-fields ] keep
-   over set-tuple-info ;
+   over set-tuple-info ; inline
 
 PRIVATE>
 
-GENERIC: tuple>storable ( tuple -- storable ) 
-M: mdb-persistent tuple>storable ( mdb-persistent -- store-list )
-   '[ _ [ tuple>assoc ] keep tuple-collection add-storable ] with-store-list ; inline
+GENERIC: tuple>storable ( tuple -- storable )
+
+M: mdb-persistent tuple>storable ( mdb-persistent -- object-map )
+   '[ _ [ tuple>assoc ] write-mdb-persistent drop ] with-object-map ; inline
 
 M: mdb-persistent tuple>assoc ( tuple -- assoc )
    ensure-mdb-info (tuple>assoc) ;
index e0e045e31d3d17e2de3c0989f85d2402761bf331..ace7b16c8f1b383c33af1b634301c6882618fccd 100644 (file)
@@ -1,4 +1,5 @@
-USING: classes kernel accessors sequences assocs mongodb.tuple.collection ;
+USING: classes kernel accessors sequences fry assocs mongodb.tuple.collection
+advice words classes.tuple slots ;
 
 IN: mongodb.tuple.state
 
@@ -7,9 +8,13 @@ IN: mongodb.tuple.state
 CONSTANT: MDB_TUPLE_INFO       "_mfd_t_info"
 CONSTANT: MDB_DIRTY_FLAG       "d?"
 CONSTANT: MDB_PERSISTENT_FLAG  "p?"
+CONSTANT: MDB_DIRTY_ADVICE     "mdb-dirty-set"
 
 PRIVATE>
 
+: advised-with? ( name word loc -- ? )
+   word-prop key? ; inline
+
 : <tuple-info> ( tuple -- tuple-info )
     class V{ } clone tuck  
     [ [ name>> ] dip push ]
@@ -28,17 +33,35 @@ PRIVATE>
    dup _mfd>> [ ] [ H{ } clone [ >>_mfd ] keep ] if* nip ; inline
 
 : dirty? ( tuple -- ? )
-    MDB_DIRTY_FLAG tuple-meta at ;
+   [ MDB_DIRTY_FLAG ] dip tuple-meta at ;
 
-: set-dirty ( tuple -- )
-    [ t MDB_DIRTY_FLAG ] dip tuple-meta set-at ;
+: mark-dirty ( tuple -- )
+   [ t MDB_DIRTY_FLAG ] dip tuple-meta set-at ;
 
 : persistent? ( tuple -- ? )
-    MDB_PERSISTENT_FLAG tuple-meta at ;
+   [ MDB_PERSISTENT_FLAG ] dip tuple-meta at ;
 
-: set-persistent ( tuple -- )
-    [ t MDB_PERSISTENT_FLAG ] dip tuple-meta set-at ;
+: mark-persistent ( tuple -- )
+   [ t MDB_PERSISTENT_FLAG ] dip tuple-meta [ set-at ] keep
+   [ f MDB_DIRTY_FLAG ] dip set-at ;
 
 : needs-store? ( tuple -- ? )
-    [ persistent? not ] [ dirty? ] bi or ;
+   [ persistent? not ] [ dirty? ] bi or ;
+
+<PRIVATE
+
+: create-advice ( word -- )
+   MDB_DIRTY_ADVICE over after advised-with?
+   [ drop ]
+   [ [ [ dup mark-dirty ] MDB_DIRTY_ADVICE ] dip advise-after ] if ;
+
+: (annotate-writer) ( class name -- )
+   writer-word "methods" word-prop at
+   [ create-advice ] when* ;
+
+PRIVATE>
 
+: annotate-writers ( class -- )
+   dup all-slots [ name>> ] map
+   MDB_ADDON_SLOTS '[ _ memq? not ] filter
+   [ (annotate-writer) ] with each ;
\ No newline at end of file
index 089a3ec12137ed028ea27a4588446e0a28752ad6..f99e32aaf1938a47be25e9e4232b8e712f127278 100644 (file)
@@ -1,7 +1,7 @@
 USING: accessors assocs classes.mixin classes.tuple
-classes.tuple.parser compiler.units fry kernel mongodb.driver
+classes.tuple.parser compiler.units fry kernel sequences mongodb.driver
 mongodb.msg mongodb.tuple.collection mongodb.tuple.index
-mongodb.tuple.persistent mongodb.tuple.state sequences strings ;
+mongodb.tuple.persistent mongodb.tuple.state strings ;
 
 IN: mongodb.tuple
 
@@ -13,7 +13,8 @@ SYNTAX: MDBTUPLE:
 : 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 
+    [ dup '[ _ mdb-persistent add-mixin-instance ] with-compilation-unit ] dip
+    [ dup annotate-writers ] dip 
     set-slot-map ;
 
 : ensure-table ( class -- )
@@ -39,8 +40,10 @@ SYNTAX: MDBTUPLE:
 <PRIVATE
 
 GENERIC: id-selector ( object -- 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 ;