1 ! Copyright (C) 2010 Sascha Matzke.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs calendar combinators
4 combinators.short-circuit constructors kernel linked-assocs
5 math math.bitwise random strings uuid ;
11 TUPLE: oid { a initial: 0 } { b initial: 0 } ;
15 now timestamp>micros >>a
16 8 random-bits 16 shift HEX: FF0000 mask
17 16 random-bits HEX: FFFF mask
20 TUPLE: dbref ref id db ;
22 TUPLE: mongo-timestamp incr seconds ;
24 : <mongo-timestamp> ( incr seconds -- mongo-timestamp )
27 TUPLE: mongo-scoped-code code object ;
29 : <mongo-scoped-code> ( code object -- mongo-scoped-code )
30 mongo-scoped-code boa ;
32 CONSTRUCTOR: dbref ( ref id -- dbref ) ;
34 : dbref>assoc ( dbref -- assoc )
35 [ <linked-hash> ] dip over
37 [ [ ref>> "$ref" ] [ set-at ] bi* ]
38 [ [ id>> "$id" ] [ set-at ] bi* ]
40 [ db>> "$db" ] [ set-at ] bi*
44 : assoc>dbref ( assoc -- dbref )
45 [ "$ref" swap at ] [ "$id" swap at ] [ "$db" swap at ] tri
48 : dbref-assoc? ( assoc -- ? )
49 { [ "$ref" swap key? ] [ "$id" swap key? ] } 1&& ; inline
51 TUPLE: mdbregexp { regexp string } { options string } ;
53 : <mdbregexp> ( string -- mdbregexp )
54 [ mdbregexp new ] dip >>regexp ;
57 CONSTANT: MDB_OID_FIELD "_id"
58 CONSTANT: MDB_META_FIELD "_mfd"
61 CONSTANT: T_Double HEX: 1
62 CONSTANT: T_String HEX: 2
63 CONSTANT: T_Object HEX: 3
64 CONSTANT: T_Array HEX: 4
65 CONSTANT: T_Binary HEX: 5
66 CONSTANT: T_Undefined HEX: 6
67 CONSTANT: T_OID HEX: 7
68 CONSTANT: T_Boolean HEX: 8
69 CONSTANT: T_Date HEX: 9
70 CONSTANT: T_NULL HEX: A
71 CONSTANT: T_Regexp HEX: B
72 CONSTANT: T_DBRef HEX: C
73 CONSTANT: T_Code HEX: D
74 CONSTANT: T_Symbol HEX: E
75 CONSTANT: T_ScopedCode HEX: F
76 CONSTANT: T_Integer HEX: 10
77 CONSTANT: T_Timestamp HEX: 11
78 CONSTANT: T_Integer64 HEX: 12
79 CONSTANT: T_MinKey HEX: FF
80 CONSTANT: T_MaxKey HEX: 7F
82 CONSTANT: T_Binary_Default HEX: 0
83 CONSTANT: T_Binary_Function HEX: 1
84 CONSTANT: T_Binary_Bytes_Deprecated HEX: 2
85 CONSTANT: T_Binary_UUID HEX: 3
86 CONSTANT: T_Binary_MD5 HEX: 5
87 CONSTANT: T_Binary_Custom HEX: 80