106 lines
2.9 KiB
Factor
106 lines
2.9 KiB
Factor
USING: accessors assocs hashtables constructors kernel linked-assocs math
|
|
sequences strings ;
|
|
|
|
IN: mongodb.msg
|
|
|
|
CONSTANT: OP_Reply 1
|
|
CONSTANT: OP_Message 1000
|
|
CONSTANT: OP_Update 2001
|
|
CONSTANT: OP_Insert 2002
|
|
CONSTANT: OP_Query 2004
|
|
CONSTANT: OP_GetMore 2005
|
|
CONSTANT: OP_Delete 2006
|
|
CONSTANT: OP_KillCursors 2007
|
|
|
|
CONSTANT: ResultFlag_CursorNotFound 1 ! /* returned, with zero results, when getMore is called but the cursor id is not valid at the server. */
|
|
CONSTANT: ResultFlag_ErrSet 2 ! /* { $err : ... } is being returned */
|
|
CONSTANT: ResultFlag_ShardConfigStale 4 ! /* have to update config from the server, usually $err is also set */
|
|
|
|
TUPLE: mdb-msg
|
|
{ opcode integer }
|
|
{ req-id integer initial: 0 }
|
|
{ resp-id integer initial: 0 }
|
|
{ length integer initial: 0 }
|
|
{ flags integer initial: 0 } ;
|
|
|
|
TUPLE: mdb-query-msg < mdb-msg
|
|
{ collection string }
|
|
{ skip# integer initial: 0 }
|
|
{ return# integer initial: 0 }
|
|
{ query assoc }
|
|
{ returnfields assoc }
|
|
{ orderby sequence }
|
|
explain hint ;
|
|
|
|
TUPLE: mdb-insert-msg < mdb-msg
|
|
{ collection string }
|
|
{ objects sequence } ;
|
|
|
|
TUPLE: mdb-update-msg < mdb-msg
|
|
{ collection string }
|
|
{ upsert? integer initial: 0 }
|
|
{ selector assoc }
|
|
{ object assoc } ;
|
|
|
|
TUPLE: mdb-delete-msg < mdb-msg
|
|
{ collection string }
|
|
{ selector assoc } ;
|
|
|
|
TUPLE: mdb-getmore-msg < mdb-msg
|
|
{ collection string }
|
|
{ return# integer initial: 0 }
|
|
{ cursor integer initial: 0 }
|
|
{ query mdb-query-msg } ;
|
|
|
|
TUPLE: mdb-killcursors-msg < mdb-msg
|
|
{ cursors# integer initial: 0 }
|
|
{ cursors sequence } ;
|
|
|
|
TUPLE: mdb-reply-msg < mdb-msg
|
|
{ collection string }
|
|
{ cursor integer initial: 0 }
|
|
{ start# integer initial: 0 }
|
|
{ requested# integer initial: 0 }
|
|
{ returned# integer initial: 0 }
|
|
{ objects sequence } ;
|
|
|
|
|
|
CONSTRUCTOR: mdb-getmore-msg ( collection return# cursor -- mdb-getmore-msg )
|
|
OP_GetMore >>opcode ; inline
|
|
|
|
CONSTRUCTOR: mdb-delete-msg ( collection selector -- mdb-delete-msg )
|
|
OP_Delete >>opcode ; inline
|
|
|
|
CONSTRUCTOR: mdb-query-msg ( collection query -- mdb-query-msg )
|
|
OP_Query >>opcode ; inline
|
|
|
|
GENERIC: <mdb-killcursors-msg> ( object -- mdb-killcursors-msg )
|
|
|
|
M: sequence <mdb-killcursors-msg> ( sequences -- mdb-killcursors-msg )
|
|
[ mdb-killcursors-msg new ] dip
|
|
[ length >>cursors# ] keep
|
|
>>cursors OP_KillCursors >>opcode ; inline
|
|
|
|
M: integer <mdb-killcursors-msg> ( integer -- mdb-killcursors-msg )
|
|
V{ } clone [ push ] keep <mdb-killcursors-msg> ;
|
|
|
|
GENERIC: <mdb-insert-msg> ( collection objects -- mdb-insert-msg )
|
|
|
|
M: sequence <mdb-insert-msg> ( collection sequence -- mdb-insert-msg )
|
|
[ mdb-insert-msg new ] 2dip
|
|
[ >>collection ] dip
|
|
>>objects OP_Insert >>opcode ;
|
|
|
|
M: assoc <mdb-insert-msg> ( collection assoc -- mdb-insert-msg )
|
|
[ mdb-insert-msg new ] 2dip
|
|
[ >>collection ] dip
|
|
V{ } clone tuck push
|
|
>>objects OP_Insert >>opcode ;
|
|
|
|
|
|
CONSTRUCTOR: mdb-update-msg ( collection selector object -- mdb-update-msg )
|
|
OP_Update >>opcode ; inline
|
|
|
|
CONSTRUCTOR: mdb-reply-msg ( -- mdb-reply-msg ) ; inline
|
|
|