private Task <WriteConcernResult> ExecuteProtocolAsync(IChannelHandle channel, CancellationToken cancellationToken) { if (_request.Collation != null) { throw new NotSupportedException("OP_UPDATE does not support collations."); } if (_request.ArrayFilters != null) { throw new NotSupportedException("OP_UPDATE does not support arrayFilters."); } if (_request.Hint != null) { throw new NotSupportedException("OP_UPDATE does not support hints."); } return(channel.UpdateAsync( _collectionNamespace, _messageEncoderSettings, _writeConcern, _request.Filter, _request.Update.AsBsonDocument, ElementNameValidatorFactory.ForUpdateType(_request.UpdateType), _request.IsMulti, _request.IsUpsert, cancellationToken)); }
// methods private Task <WriteConcernResult> ExecuteProtocolAsync(IChannelHandle channel, CancellationToken cancellationToken) { return(channel.UpdateAsync( _collectionNamespace, _messageEncoderSettings, _writeConcern, _request.Filter, _request.Update, ElementNameValidatorFactory.ForUpdateType(_request.UpdateType), _request.IsMulti, _request.IsUpsert, cancellationToken)); }
private void SerializeUpdate(BsonBinaryWriter bsonWriter, BsonDocument update, UpdateType updateType) { bsonWriter.PushElementNameValidator(ElementNameValidatorFactory.ForUpdateType(updateType)); try { var context = BsonSerializationContext.CreateRoot(bsonWriter); BsonDocumentSerializer.Instance.Serialize(context, update); } finally { bsonWriter.PopElementNameValidator(); } }
// methods private UpdateWireProtocol CreateProtocol() { var updateValidator = new UpdateOrReplacementElementNameValidator(); return(new UpdateWireProtocol( _collectionNamespace, _messageEncoderSettings, _writeConcern, _request.Criteria, _request.Update, ElementNameValidatorFactory.ForUpdateType(_request.UpdateType), _request.IsMulti, _request.IsUpsert)); }
// methods protected override IWireProtocol <WriteConcernResult> CreateProtocol(IConnectionHandle connection, WriteRequest request) { var updateRequest = (UpdateRequest)request; return(new UpdateWireProtocol( CollectionNamespace, MessageEncoderSettings, WriteConcern, updateRequest.Criteria, updateRequest.Update, ElementNameValidatorFactory.ForUpdateType(updateRequest.UpdateType), updateRequest.IsMulti, updateRequest.IsUpsert)); }
// methods protected override Task <WriteConcernResult> ExecuteProtocolAsync(IChannelHandle channel, WriteRequest request, CancellationToken cancellationToken) { var updateRequest = (UpdateRequest)request; return(channel.UpdateAsync( CollectionNamespace, MessageEncoderSettings, WriteConcern, updateRequest.Filter, updateRequest.Update, ElementNameValidatorFactory.ForUpdateType(updateRequest.UpdateType), updateRequest.IsMulti, updateRequest.IsUpsert, cancellationToken)); }
private void SerializeUpdate(BsonBinaryWriter bsonWriter, BsonDocument update, UpdateType updateType) { bsonWriter.PushElementNameValidator(ElementNameValidatorFactory.ForUpdateType(updateType)); try { var position = bsonWriter.BaseStream.Position; var context = BsonSerializationContext.CreateRoot(bsonWriter); BsonDocumentSerializer.Instance.Serialize(context, update); if (updateType == UpdateType.Update && bsonWriter.BaseStream.Position == position + 8) { throw new BsonSerializationException("Update documents cannot be empty."); } } finally { bsonWriter.PopElementNameValidator(); } }
private WriteConcernResult ExecuteProtocol(IChannelHandle channel, CancellationToken cancellationToken) { if (_request.Collation != null) { throw new NotSupportedException("OP_UPDATE does not support collations."); } return(channel.Update( _collectionNamespace, _messageEncoderSettings, _writeConcern, _request.Filter, _request.Update, ElementNameValidatorFactory.ForUpdateType(_request.UpdateType), _request.IsMulti, _request.IsUpsert, cancellationToken)); }
// private methods private void SerializeUpdate(BsonSerializationContext context, BsonSerializationArgs args, UpdateRequest request) { var writer = context.Writer; writer.PushElementNameValidator(ElementNameValidatorFactory.ForUpdateType(request.UpdateType)); try { var position = writer.Position; BsonDocumentSerializer.Instance.Serialize(context, request.Update); if (request.UpdateType == UpdateType.Update && writer.Position == position + 8) { throw new BsonSerializationException("Update documents cannot be empty."); } } finally { writer.PopElementNameValidator(); } }
protected override Task <WriteConcernResult> ExecuteProtocolAsync(IChannelHandle channel, WriteRequest request, CancellationToken cancellationToken) { var updateRequest = (UpdateRequest)request; if (updateRequest.Collation != null) { throw new NotSupportedException("BulkUpdateOperationEmulator does not support collations."); } return(channel.UpdateAsync( CollectionNamespace, MessageEncoderSettings, WriteConcern, updateRequest.Filter, updateRequest.Update, ElementNameValidatorFactory.ForUpdateType(updateRequest.UpdateType), updateRequest.IsMulti, updateRequest.IsUpsert, cancellationToken)); }
// methods protected override WriteConcernResult ExecuteProtocol(IChannelHandle channel, UpdateRequest request, CancellationToken cancellationToken) { if (request.Collation != null) { throw new NotSupportedException("BulkUpdateOperationEmulator does not support collations."); } if (request.ArrayFilters != null) { throw new NotSupportedException("BulkUpdateOperationEmulator does not support arrayFilters."); } return(channel.Update( CollectionNamespace, MessageEncoderSettings, WriteConcern, request.Filter, request.Update, ElementNameValidatorFactory.ForUpdateType(request.UpdateType), request.IsMulti, request.IsUpsert, cancellationToken)); }