Documentation
¶
Overview ¶
Package wire provides MongoDB wire protocol implementation.
Index ¶
- Constants
- Variables
- func ReadMessage(r *bufio.Reader) (*MsgHeader, MsgBody, error)
- func WriteMessage(w *bufio.Writer, header *MsgHeader, msg MsgBody) error
- type MsgBody
- type MsgHeader
- type OpCode
- type OpMsg
- func (msg *OpMsg) Document() (*wirebson.Document, error)
- func (msg *OpMsg) DocumentDeep() (*wirebson.Document, error)
- func (msg *OpMsg) DocumentRaw() (wirebson.RawDocument, error)
- func (msg *OpMsg) MarshalBinary() ([]byte, error)
- func (msg *OpMsg) RawDocument() (wirebson.RawDocument, error)deprecated
- func (msg *OpMsg) RawSection0() wirebson.RawDocument
- func (msg *OpMsg) RawSections() (wirebson.RawDocument, []byte)
- func (msg *OpMsg) String() string
- func (msg *OpMsg) StringIndent() string
- func (msg *OpMsg) UnmarshalBinaryNocopy(b []byte) error
- type OpMsgFlagBit
- type OpMsgFlags
- type OpQuery
- func (query *OpQuery) MarshalBinary() ([]byte, error)
- func (query *OpQuery) Query() (*wirebson.Document, error)
- func (query *OpQuery) QueryDeep() (*wirebson.Document, error)
- func (query *OpQuery) QueryRaw() wirebson.RawDocument
- func (query *OpQuery) ReturnFieldsSelector() (*wirebson.Document, error)
- func (query *OpQuery) ReturnFieldsSelectorDeep() (*wirebson.Document, error)
- func (query *OpQuery) ReturnFieldsSelectorRaw() wirebson.RawDocument
- func (query *OpQuery) String() string
- func (query *OpQuery) StringIndent() string
- func (query *OpQuery) UnmarshalBinaryNocopy(b []byte) error
- type OpQueryFlagBit
- type OpQueryFlags
- type OpReply
- func (reply *OpReply) Document() (*wirebson.Document, error)
- func (reply *OpReply) DocumentDeep() (*wirebson.Document, error)
- func (reply *OpReply) DocumentRaw() wirebson.RawDocument
- func (reply *OpReply) MarshalBinary() ([]byte, error)
- func (reply *OpReply) RawDocument() wirebson.RawDocumentdeprecated
- func (reply *OpReply) String() string
- func (reply *OpReply) StringIndent() string
- func (reply *OpReply) UnmarshalBinaryNocopy(b []byte) error
- type OpReplyFlagBit
- type OpReplyFlags
- type Record
Constants ¶
const ( OpCodeReply = OpCode(1) // OP_REPLY OpCodeUpdate = OpCode(2001) // OP_UPDATE OpCodeInsert = OpCode(2002) // OP_INSERT OpCodeGetByOID = OpCode(2003) // OP_GET_BY_OID OpCodeQuery = OpCode(2004) // OP_QUERY OpCodeGetMore = OpCode(2005) // OP_GET_MORE OpCodeDelete = OpCode(2006) // OP_DELETE OpCodeKillCursors = OpCode(2007) // OP_KILL_CURSORS OpCodeCompressed = OpCode(2012) // OP_COMPRESSED OpCodeMsg = OpCode(2013) // OP_MSG )
const ( // MsgHeaderLen is an expected len of the header. MsgHeaderLen = 16 // MaxMsgLen is the maximum message length. MaxMsgLen = 48_000_000 )
const ( OpMsgChecksumPresent = OpMsgFlagBit(1 << 0) // checksumPresent OpMsgMoreToCome = OpMsgFlagBit(1 << 1) // moreToCome OpMsgExhaustAllowed = OpMsgFlagBit(1 << 16) // exhaustAllowed )
const ( OpQueryTailableCursor = OpQueryFlagBit(1 << 1) // TailableCursor OpQuerySlaveOk = OpQueryFlagBit(1 << 2) // SlaveOk OpQueryOplogReplay = OpQueryFlagBit(1 << 3) // OplogReplay OpQueryNoCursorTimeout = OpQueryFlagBit(1 << 4) // NoCursorTimeout OpQueryAwaitData = OpQueryFlagBit(1 << 5) // AwaitData OpQueryExhaust = OpQueryFlagBit(1 << 6) // Exhaust OpQueryPartial = OpQueryFlagBit(1 << 7) // Partial )
const ( OpReplyCursorNotFound = OpReplyFlagBit(1 << 0) // CursorNotFound OpReplyQueryFailure = OpReplyFlagBit(1 << 1) // QueryFailure OpReplyShardConfigStale = OpReplyFlagBit(1 << 2) // ShardConfigStale OpReplyAwaitCapable = OpReplyFlagBit(1 << 3) // AwaitCapable )
Variables ¶
var CheckNaNs bool
CheckNaNs set to true returns an error if float64 NaN value is present in wire messages.
TODO https://github.com/FerretDB/wire/issues/73
var Debug bool
Debug set to true performs additional slow checks during encoding/decoding that are not normally required. It is exposed mainly to simplify testing.
var ErrZeroRead = errors.New("zero bytes read")
ErrZeroRead is returned when zero bytes was read from connection, indicating that connection was closed by the client.
Functions ¶
func ReadMessage ¶
ReadMessage reads from reader and returns wire header and body.
Error is (possibly wrapped) ErrZeroRead if zero bytes was read.
Types ¶
type MsgBody ¶
type MsgBody interface {
encoding.BinaryMarshaler
// UnmarshalBinaryNocopy is a variant of [encoding.BinaryUnmarshaler] that does not have to copy the data.
UnmarshalBinaryNocopy([]byte) error
fmt.Stringer
// StringIndent returns an indented string representation for logging.
StringIndent() string
// contains filtered or unexported methods
}
MsgBody is a wire protocol message body.
type MsgHeader ¶
MsgHeader represents common message header.
func (*MsgHeader) MarshalBinary ¶
MarshalBinary writes a MsgHeader to a byte array.
type OpMsg ¶
type OpMsg struct {
Flags OpMsgFlags
// contains filtered or unexported fields
}
OpMsg is the main wire protocol message type.
func MustOpMsg ¶ added in v0.0.3
MustOpMsg creates a message with a single section of kind 0 with a single document constructed from the given pairs of field names and values. It panics on error.
func NewOpMsg ¶
func NewOpMsg(doc wirebson.AnyDocument) (*OpMsg, error)
NewOpMsg creates a message with a single section of kind 0 with a single document.
func (*OpMsg) Document ¶ added in v0.0.19
Document returns the value of msg as decoded *wirebson.Document. Only top-level fields are decoded.
The error is returned if msg contains anything other than a single section of kind 0 with a single document.
func (*OpMsg) DocumentDeep ¶ added in v0.0.19
DocumentDeep returns the value of msg as deeply-decoded *wirebson.Document.
The error is returned if msg contains anything other than a single section of kind 0 with a single document.
func (*OpMsg) DocumentRaw ¶ added in v0.0.19
func (msg *OpMsg) DocumentRaw() (wirebson.RawDocument, error)
DocumentRaw returns the value of msg as a wirebson.DocumentRaw.
The error is returned if msg contains anything other than a single section of kind 0 with a single document.
func (*OpMsg) MarshalBinary ¶
MarshalBinary writes an OpMsg to a byte array.
func (*OpMsg) RawDocument
deprecated
func (msg *OpMsg) RawDocument() (wirebson.RawDocument, error)
Deprecated: use DocumentRaw instead.
func (*OpMsg) RawSection0 ¶
func (msg *OpMsg) RawSection0() wirebson.RawDocument
RawSection0 returns the value of the section with kind 0.
Most callers should use OpMsg.DocumentRaw instead.
func (*OpMsg) RawSections ¶
func (msg *OpMsg) RawSections() (wirebson.RawDocument, []byte)
RawSections returns the value of section with kind 0 and the value of all sections with kind 1.
Most callers should use OpMsg.DocumentRaw instead.
func (*OpMsg) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
type OpMsgFlagBit ¶
type OpMsgFlagBit flagBit
OpMsgFlagBit integer is a bitmask encoding flags that modify the format and behavior of OpMsg.
func (OpMsgFlagBit) String ¶
func (i OpMsgFlagBit) String() string
type OpMsgFlags ¶
type OpMsgFlags flags
OpMsgFlags type unint32.
func (OpMsgFlags) FlagSet ¶
func (f OpMsgFlags) FlagSet(bit OpMsgFlagBit) bool
FlagSet check if flag is set.
func (OpMsgFlags) String ¶
func (f OpMsgFlags) String() string
String returns OpMsgFlags as a string.
type OpQuery ¶
type OpQuery struct {
FullCollectionName string
Flags OpQueryFlags
NumberToSkip int32
NumberToReturn int32
// contains filtered or unexported fields
}
OpQuery is a deprecated request message type.
func MustOpQuery ¶ added in v0.0.19
MustOpQuery creates a new OpQuery message constructed from the given pairs of field names and values. It panics on error.
func NewOpQuery ¶
func NewOpQuery(doc wirebson.AnyDocument) (*OpQuery, error)
NewOpQuery creates a new OpQuery message.
func (*OpQuery) MarshalBinary ¶
MarshalBinary implements MsgBody.
func (*OpQuery) QueryRaw ¶ added in v0.0.19
func (query *OpQuery) QueryRaw() wirebson.RawDocument
QueryRaw returns raw query (that might be nil).
func (*OpQuery) ReturnFieldsSelector ¶ added in v0.0.19
ReturnFieldsSelector returns decoded returnFieldsSelector document, or nil. Only top-level fields are decoded.
func (*OpQuery) ReturnFieldsSelectorDeep ¶ added in v0.0.19
ReturnFieldsSelector returns deeply decoded returnFieldsSelector document, or nil.
func (*OpQuery) ReturnFieldsSelectorRaw ¶ added in v0.0.19
func (query *OpQuery) ReturnFieldsSelectorRaw() wirebson.RawDocument
ReturnFieldsSelectorRaw returns raw returnFieldsSelector (that might be nil).
func (*OpQuery) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
type OpQueryFlagBit ¶
type OpQueryFlagBit flagBit
OpQueryFlagBit an integer bitmask for the operation.
func (OpQueryFlagBit) String ¶
func (i OpQueryFlagBit) String() string
type OpQueryFlags ¶
type OpQueryFlags flags
OpQueryFlags enables String() and FlagSet methods for flags.
func (OpQueryFlags) FlagSet ¶
func (f OpQueryFlags) FlagSet(bit OpQueryFlagBit) bool
FlagSet return true if flag set.
func (OpQueryFlags) String ¶
func (f OpQueryFlags) String() string
String interface implementation for query flags.
type OpReply ¶
type OpReply struct {
CursorID int64
Flags OpReplyFlags
StartingFrom int32
// contains filtered or unexported fields
}
OpReply is a deprecated response message type.
Only up to one returned document is supported.
func MustOpReply ¶ added in v0.0.19
MustOpReply creates a new OpReply message constructed from the given pairs of field names and values. It panics on error.
func NewOpReply ¶
func NewOpReply(doc wirebson.AnyDocument) (*OpReply, error)
NewOpReply creates a new OpReply message.
func (*OpReply) Document ¶
Document returns decoded document, or nil. Only top-level fields are decoded.
func (*OpReply) DocumentDeep ¶ added in v0.0.19
Document returns deeply decoded document, or nil.
func (*OpReply) DocumentRaw ¶ added in v0.0.19
func (reply *OpReply) DocumentRaw() wirebson.RawDocument
DocumentRaw returns raw document (that might be nil).
func (*OpReply) MarshalBinary ¶
MarshalBinary implements MsgBody.
func (*OpReply) RawDocument
deprecated
func (reply *OpReply) RawDocument() wirebson.RawDocument
Deprecated: use DocumentRaw instead.
func (*OpReply) StringIndent ¶ added in v0.0.10
StringIndent returns an indented string representation for logging.
type OpReplyFlagBit ¶
type OpReplyFlagBit flagBit
OpReplyFlagBit is a bit vector to specify OP_REPLY flags.
func (OpReplyFlagBit) String ¶
func (i OpReplyFlagBit) String() string
type OpReplyFlags ¶
type OpReplyFlags flags
OpReplyFlags are OP_REPLY flags.
func (OpReplyFlags) FlagSet ¶
func (f OpReplyFlags) FlagSet(bit OpReplyFlagBit) bool
FlagSet returns true if the flag is set.
func (OpReplyFlags) String ¶
func (f OpReplyFlags) String() string
String returns string value for OP_REPLY.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
internal
|
|
|
util/lazyerrors
Package lazyerrors provides error wrapping with file location.
|
Package lazyerrors provides error wrapping with file location. |
|
util/must
Package must provides helper functions that panic on error.
|
Package must provides helper functions that panic on error. |
|
tools
module
|
|
|
Package wirebson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html.
|
Package wirebson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html. |
|
Package wireclient provides low-level wire protocol client.
|
Package wireclient provides low-level wire protocol client. |