/* Copyright 2010-present MongoDB Inc. * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using MongoDB.Bson; namespace MongoDB.Driver { /// /// The result of an update operation. /// public abstract class UpdateResult { // static internal static UpdateResult FromCore(BulkWriteResult result) { if (result.IsAcknowledged) { var upsert = result.Upserts.Count == 1 ? result.Upserts[0].Id : null; var modifiedCount = result.IsModifiedCountAvailable ? (long?)result.ModifiedCount : null; return new Acknowledged(result.MatchedCount, modifiedCount, upsert); } return Unacknowledged.Instance; } // properties /// /// Gets a value indicating whether the result is acknowledged. /// public abstract bool IsAcknowledged { get; } /// /// Gets a value indicating whether the modified count is available. /// /// /// The available modified count. /// public abstract bool IsModifiedCountAvailable { get; } /// /// Gets the matched count. If IsAcknowledged is false, this will throw an exception. /// public abstract long MatchedCount { get; } /// /// Gets the modified count. If IsAcknowledged is false, this will throw an exception. /// public abstract long ModifiedCount { get; } /// /// Gets the upserted id, if one exists. If IsAcknowledged is false, this will throw an exception. /// public abstract BsonValue UpsertedId { get; } // constructors /// /// Initializes a new instance of the class. /// protected UpdateResult() { } // nested classes /// /// The result of an acknowledged update operation. /// public class Acknowledged : UpdateResult { private readonly long _matchedCount; private readonly long? _modifiedCount; private readonly BsonValue _upsertedId; /// /// Initializes a new instance of the class. /// /// The matched count. /// The modified count. /// The upserted id. public Acknowledged(long matchedCount, long? modifiedCount, BsonValue upsertedId) { _matchedCount = matchedCount; _modifiedCount = modifiedCount; _upsertedId = upsertedId; } /// public override bool IsAcknowledged { get { return true; } } /// public override bool IsModifiedCountAvailable { get { return _modifiedCount.HasValue; } } /// public override long MatchedCount { get { return _matchedCount; } } /// public override long ModifiedCount { get { if (!_modifiedCount.HasValue) { throw new NotSupportedException("ModifiedCount is not available."); } return _modifiedCount.Value; } } /// public override BsonValue UpsertedId { get { return _upsertedId; } } } /// /// The result of an acknowledged update operation. /// public class Unacknowledged : UpdateResult { private static Unacknowledged __instance = new Unacknowledged(); /// /// Gets the instance. /// public static Unacknowledged Instance { get { return __instance; } } private Unacknowledged() { } /// public override bool IsAcknowledged { get { return false; } } /// public override bool IsModifiedCountAvailable { get { return false; } } /// public override long MatchedCount { get { throw new NotSupportedException("Only acknowledged writes support the MatchedCount property."); } } /// public override long ModifiedCount { get { throw new NotSupportedException("Only acknowledged writes support the ModifiedCount property."); } } /// public override BsonValue UpsertedId { get { throw new NotSupportedException("Only acknowledged writes support the UpsertedId property."); } } } } }