blob: d317bb7fabff29742a18f19d952dad6b513f605a [file] [log] [blame]
// Copyright (C) MongoDB, Inc. 2017-present.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
// Package result contains the results from various operations.
package result
import (
"time"
"github.com/mongodb/mongo-go-driver/bson"
"github.com/mongodb/mongo-go-driver/bson/primitive"
"github.com/mongodb/mongo-go-driver/x/bsonx"
)
// Upsert contains the information for a single upsert.
type Upsert struct {
Index int64 `bson:"index"`
ID interface{} `bson:"_id"`
}
// Insert is a result from an Insert command.
type Insert struct {
N int
WriteErrors []WriteError `bson:"writeErrors"`
WriteConcernError *WriteConcernError `bson:"writeConcernError"`
}
// StartSession is a result from a StartSession command.
type StartSession struct {
ID bsonx.Doc `bson:"id"`
}
// EndSessions is a result from an EndSessions command.
type EndSessions struct{}
// Delete is a result from a Delete command.
type Delete struct {
N int
WriteErrors []WriteError `bson:"writeErrors"`
WriteConcernError *WriteConcernError `bson:"writeConcernError"`
}
// Update is a result of an Update command.
type Update struct {
MatchedCount int64 `bson:"n"`
ModifiedCount int64 `bson:"nModified"`
Upserted []Upsert `bson:"upserted"`
WriteErrors []WriteError `bson:"writeErrors"`
WriteConcernError *WriteConcernError `bson:"writeConcernError"`
}
// Distinct is a result from a Distinct command.
type Distinct struct {
Values []interface{}
}
// FindAndModify is a result from a findAndModify command.
type FindAndModify struct {
Value bson.Raw
LastErrorObject struct {
UpdatedExisting bool
Upserted interface{}
}
}
// WriteError is an error from a write operation that is not a write concern
// error.
type WriteError struct {
Index int
Code int
ErrMsg string
}
// WriteConcernError is an error related to a write concern.
type WriteConcernError struct {
Code int
ErrMsg string
ErrInfo bson.Raw
}
// ListDatabases is the result from a listDatabases command.
type ListDatabases struct {
Databases []struct {
Name string
SizeOnDisk int64 `bson:"sizeOnDisk"`
Empty bool
}
TotalSize int64 `bson:"totalSize"`
}
// IsMaster is a result of an IsMaster command.
type IsMaster struct {
Arbiters []string `bson:"arbiters,omitempty"`
ArbiterOnly bool `bson:"arbiterOnly,omitempty"`
ClusterTime bson.Raw `bson:"$clusterTime,omitempty"`
Compression []string `bson:"compression,omitempty"`
ElectionID primitive.ObjectID `bson:"electionId,omitempty"`
Hidden bool `bson:"hidden,omitempty"`
Hosts []string `bson:"hosts,omitempty"`
IsMaster bool `bson:"ismaster,omitempty"`
IsReplicaSet bool `bson:"isreplicaset,omitempty"`
LastWriteTimestamp time.Time `bson:"lastWriteDate,omitempty"`
LogicalSessionTimeoutMinutes uint32 `bson:"logicalSessionTimeoutMinutes,omitempty"`
MaxBSONObjectSize uint32 `bson:"maxBsonObjectSize,omitempty"`
MaxMessageSizeBytes uint32 `bson:"maxMessageSizeBytes,omitempty"`
MaxWriteBatchSize uint32 `bson:"maxWriteBatchSize,omitempty"`
Me string `bson:"me,omitempty"`
MaxWireVersion int32 `bson:"maxWireVersion,omitempty"`
MinWireVersion int32 `bson:"minWireVersion,omitempty"`
Msg string `bson:"msg,omitempty"`
OK int32 `bson:"ok"`
Passives []string `bson:"passives,omitempty"`
ReadOnly bool `bson:"readOnly,omitempty"`
SaslSupportedMechs []string `bson:"saslSupportedMechs,omitempty"`
Secondary bool `bson:"secondary,omitempty"`
SetName string `bson:"setName,omitempty"`
SetVersion uint32 `bson:"setVersion,omitempty"`
Tags map[string]string `bson:"tags,omitempty"`
}
// BuildInfo is a result of a BuildInfo command.
type BuildInfo struct {
OK bool `bson:"ok"`
GitVersion string `bson:"gitVersion,omitempty"`
Version string `bson:"version,omitempty"`
VersionArray []uint8 `bson:"versionArray,omitempty"`
}
// IsZero returns true if the BuildInfo is the zero value.
func (bi BuildInfo) IsZero() bool {
if !bi.OK && bi.GitVersion == "" && bi.Version == "" && bi.VersionArray == nil {
return true
}
return false
}
// GetLastError is a result of a GetLastError command.
type GetLastError struct {
ConnectionID uint32 `bson:"connectionId"`
}
// KillCursors is a result of a KillCursors command.
type KillCursors struct {
CursorsKilled []int64 `bson:"cursorsKilled"`
CursorsNotFound []int64 `bson:"cursorsNotFound"`
CursorsAlive []int64 `bson:"cursorsAlive"`
}
// CreateIndexes is a result of a CreateIndexes command.
type CreateIndexes struct {
CreatedCollectionAutomatically bool `bson:"createdCollectionAutomatically"`
IndexesBefore int `bson:"numIndexesBefore"`
IndexesAfter int `bson:"numIndexesAfter"`
}
// TransactionResult holds the result of committing or aborting a transaction.
type TransactionResult struct {
WriteConcernError *WriteConcernError `bson:"writeConcernError"`
}
// BulkWrite holds the result of a bulk write operation.
type BulkWrite struct {
InsertedCount int64
MatchedCount int64
ModifiedCount int64
DeletedCount int64
UpsertedCount int64
UpsertedIDs map[int64]interface{}
}