// public methods public WriteConcernResult Execute(MongoConnection connection) { var serverInstance = connection.ServerInstance; if (serverInstance.Supports(FeatureId.WriteCommands) && _args.WriteConcern.Enabled) { var emulator = new UpdateOpcodeOperationEmulator(_args); return emulator.Execute(connection); } SendMessageWithWriteConcernResult sendMessageResult; using (var buffer = new BsonBuffer(new MultiChunkBuffer(BsonChunkPool.Default), true)) { var requests = _args.Requests.ToList(); if (requests.Count != 1) { throw new NotSupportedException("Update opcode only supports a single update request."); } var updateRequest = (UpdateRequest)requests[0]; var flags = UpdateFlags.None; if (updateRequest.IsMultiUpdate ?? false) { flags |= UpdateFlags.Multi; } if (updateRequest.IsUpsert ?? false) { flags |= UpdateFlags.Upsert; } var maxDocumentSize = connection.ServerInstance.MaxDocumentSize; var query = updateRequest.Query ?? new QueryDocument(); var message = new MongoUpdateMessage(WriterSettings, CollectionFullName, _args.CheckElementNames, flags, maxDocumentSize, query, updateRequest.Update); message.WriteTo(buffer); sendMessageResult = SendMessageWithWriteConcern(connection, buffer, message.RequestId, ReaderSettings, WriterSettings, WriteConcern); } return WriteConcern.Enabled ? ReadWriteConcernResult(connection, sendMessageResult) : null; }
public WriteConcernResult Execute(MongoConnection connection) { using (var buffer = new BsonBuffer(new MultiChunkBuffer(BsonChunkPool.Default), true)) { var readerSettings = GetNodeAdjustedReaderSettings(connection.ServerInstance); var writerSettings = GetNodeAdjustedWriterSettings(connection.ServerInstance); var message = new MongoUpdateMessage(writerSettings, CollectionFullName, _checkElementNames, _flags, _query, _update); message.WriteToBuffer(buffer); return SendMessageWithWriteConcern(connection, buffer, message.RequestId, readerSettings, writerSettings, WriteConcern); } }