| 
									
										
										
										
											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-05-15 00:23:06 -04:00
										 |  |  | FROM: mongodb.driver => update delete find count ;
 | 
					
						
							|  |  |  | FROM: mongodb.tuple.persistent => assoc>tuple ;
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | IN: mongodb.tuple | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 09:22:51 -04:00
										 |  |  | DEFER: tuple>query | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | <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
 | 
					
						
							| 
									
										
										
										
											2010-08-09 09:22:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : prepare-tuple-query ( tuple/query -- query )
 | 
					
						
							|  |  |  |     dup mdb-query-msg? [ tuple>query ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | PRIVATE>
 | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2009-05-07 04:32:32 -04:00
										 |  |  | : save-tuple-deep ( tuple -- )
 | 
					
						
							|  |  |  |     tuple>storable [ (save-tuples) ] assoc-each ;  | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  |   | 
					
						
							|  |  |  | : update-tuple ( tuple -- )
 | 
					
						
							| 
									
										
										
										
											2009-05-07 04:32:32 -04:00
										 |  |  |     [ tuple-collection name>> ] | 
					
						
							| 
									
										
										
										
											2010-06-05 06:59:50 -04:00
										 |  |  |     [ ensure-oid id-selector ] | 
					
						
							| 
									
										
										
										
											2009-05-07 04:32:32 -04:00
										 |  |  |     [ tuple>assoc ] tri
 | 
					
						
							| 
									
										
										
										
											2010-06-04 13:00:42 -04:00
										 |  |  |     <update> >upsert update ;
 | 
					
						
							| 
									
										
										
										
											2009-05-07 04:32:32 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : save-tuple ( tuple -- )
 | 
					
						
							|  |  |  |     update-tuple ;
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : insert-tuple ( tuple -- )
 | 
					
						
							| 
									
										
										
										
											2009-05-07 04:32:32 -04:00
										 |  |  |    [ tuple-collection name>> ] | 
					
						
							|  |  |  |    [ tuple>assoc ] bi
 | 
					
						
							| 
									
										
										
										
											2009-05-07 06:01:01 -04:00
										 |  |  |    save ;
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : delete-tuple ( tuple -- )
 | 
					
						
							| 
									
										
										
										
											2009-05-03 07:46:37 -04:00
										 |  |  |    [ tuple-collection name>> ] keep
 | 
					
						
							| 
									
										
										
										
											2010-07-31 05:41:07 -04:00
										 |  |  |    id-selector <delete> delete ;
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-10 05:54:42 -04:00
										 |  |  | : delete-tuples ( seq -- )
 | 
					
						
							|  |  |  |     [ delete-tuple ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 )
 | 
					
						
							| 
									
										
										
										
											2010-08-09 09:22:51 -04:00
										 |  |  |    prepare-tuple-query | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  |    find-one [ assoc>tuple ] [ f ] if* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : select-tuples ( tuple/query -- cursor tuples/f )
 | 
					
						
							| 
									
										
										
										
											2010-08-09 09:22:51 -04:00
										 |  |  |    prepare-tuple-query | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  |    find [ assoc>tuple ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 09:22:51 -04:00
										 |  |  | : select-all-tuples ( tuple/query -- tuples )
 | 
					
						
							|  |  |  |    prepare-tuple-query | 
					
						
							|  |  |  |    find-all [ assoc>tuple ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-04 05:10:13 -04:00
										 |  |  | : count-tuples ( tuple/query -- n )
 | 
					
						
							| 
									
										
										
										
											2009-05-01 10:22:48 -04:00
										 |  |  |    dup mdb-query-msg? [ tuple>query ] unless count ;
 |