private async Task <IEnumerable <BsonDocument> > ExecuteUsingCommandAsync(IConnectionSourceHandle connectionSource, ReadPreference readPreference, TimeSpan timeout, CancellationToken cancellationToken)
        {
            var databaseNamespace = _collectionNamespace.DatabaseNamespace;
            var command           = new BsonDocument("listIndexes", _collectionNamespace.CollectionName);
            var operation         = new ReadCommandOperation <BsonDocument>(databaseNamespace, command, BsonDocumentSerializer.Instance, _messageEncoderSettings);

            BsonDocument result;

            try
            {
                result = await operation.ExecuteAsync(connectionSource, readPreference, timeout, cancellationToken).ConfigureAwait(false);
            }
            catch (MongoCommandException ex)
            {
                var       response = ex.Result;
                BsonValue code;
                if (response.TryGetValue("code", out code) && code.IsNumeric && code.ToInt32() == 26)
                {
                    return(Enumerable.Empty <BsonDocument>());
                }
                throw;
            }

            return(result["indexes"].AsBsonArray.Cast <BsonDocument>());
        }
 protected Cursor<BsonDocument> CreateCursor(IConnectionSourceHandle connectionSource, BsonDocument command, BsonDocument result, TimeSpan timeout, CancellationToken cancellationToken)
 {
     switch (_resultMode)
     {
         case AggregateResultMode.Cursor: return CreateCursorFromCursorResult(connectionSource, command, result, timeout, cancellationToken);
         case AggregateResultMode.Inline: return CreateCursorFromInlineResult(command, result, timeout, cancellationToken);
         default: throw new ArgumentException(string.Format("Invalid AggregateResultMode: {0}.", _resultMode));
     }
 }
Exemplo n.º 3
0
        private AsyncCursor <TResult> CreateCursor(IConnectionSourceHandle connectionSource, BsonDocument command, AggregateResult result, TimeSpan timeout, CancellationToken cancellationToken)
        {
            if (_useCursor.GetValueOrDefault(true))
            {
                return(CreateCursorFromCursorResult(connectionSource, command, result, timeout, cancellationToken));
            }

            return(CreateCursorFromInlineResult(command, result, timeout, cancellationToken));
        }
Exemplo n.º 4
0
        protected Cursor <BsonDocument> CreateCursor(IConnectionSourceHandle connectionSource, BsonDocument command, BsonDocument result, TimeSpan timeout, CancellationToken cancellationToken)
        {
            switch (_resultMode)
            {
            case AggregateResultMode.Cursor: return(CreateCursorFromCursorResult(connectionSource, command, result, timeout, cancellationToken));

            case AggregateResultMode.Inline: return(CreateCursorFromInlineResult(command, result, timeout, cancellationToken));

            default: throw new ArgumentException(string.Format("Invalid AggregateResultMode: {0}.", _resultMode));
            }
        }
 public static async Task <TResult> ExecuteAsync <TResult>(
     this IWriteOperation <TResult> operation,
     IConnectionSourceHandle connectionSource,
     TimeSpan timeout,
     CancellationToken cancellationToken)
 {
     Ensure.IsNotNull(operation, "operation");
     using (var writeBinding = new ConnectionSourceReadWriteBinding(connectionSource.Fork(), ReadPreference.Primary))
     {
         return(await operation.ExecuteAsync(writeBinding, timeout, cancellationToken).ConfigureAwait(false));
     }
 }
Exemplo n.º 6
0
 private AsyncCursor <TResult> CreateCursorFromCursorResult(IConnectionSourceHandle connectionSource, BsonDocument command, AggregateResult result, TimeSpan timeout, CancellationToken cancellationToken)
 {
     return(new AsyncCursor <TResult>(
                connectionSource.Fork(),
                CollectionNamespace,
                command,
                result.Results,
                result.CursorId.GetValueOrDefault(0),
                _batchSize ?? 0,
                0, // limit
                _resultSerializer,
                MessageEncoderSettings,
                timeout,
                cancellationToken));
 }
Exemplo n.º 7
0
        private Cursor <BsonDocument> CreateCursorFromCursorResult(IConnectionSourceHandle connectionSource, BsonDocument command, BsonDocument result, TimeSpan timeout, CancellationToken cancellationToken)
        {
            var firstBatch = ((BsonArray)result["cursor"]["firstBatch"]).Cast <BsonDocument>().ToList();
            var cursorId   = result["cursor"]["id"].ToInt64();

            return(new Cursor <BsonDocument>(
                       connectionSource.Fork(),
                       DatabaseName,
                       CollectionName,
                       command,
                       firstBatch,
                       cursorId,
                       _batchSize ?? 0,
                       BsonDocumentSerializer.Instance,
                       timeout,
                       cancellationToken));
        }
        private Cursor<BsonDocument> CreateCursorFromCursorResult(IConnectionSourceHandle connectionSource, BsonDocument command, BsonDocument result, TimeSpan timeout, CancellationToken cancellationToken)
        {
            var firstBatch = ((BsonArray)result["cursor"]["firstBatch"]).Cast<BsonDocument>().ToList();
            var cursorId = result["cursor"]["id"].ToInt64();

            return new Cursor<BsonDocument>(
                connectionSource.Fork(),
                CollectionNamespace,
                command,
                firstBatch,
                cursorId,
                _batchSize ?? 0,
                0, // limit
                BsonDocumentSerializer.Instance,
                MessageEncoderSettings,
                timeout,
                cancellationToken);
        }
        private async Task <IEnumerable <BsonDocument> > ExecuteUsingQueryAsync(IConnectionSourceHandle connectionSource, ReadPreference readPreference, TimeSpan timeout, CancellationToken cancellationToken)
        {
            var indexes = new List <BsonDocument>();

            var systemIndexesCollection = _collectionNamespace.DatabaseNamespace.SystemIndexesCollection;
            var criteria  = new BsonDocument("ns", _collectionNamespace.FullName);
            var operation = new FindOperation <BsonDocument>(systemIndexesCollection, BsonDocumentSerializer.Instance, _messageEncoderSettings)
            {
                Criteria = criteria
            };

            var cursor = await operation.ExecuteAsync(connectionSource, readPreference, timeout, cancellationToken).ConfigureAwait(false);

            while (await cursor.MoveNextAsync().ConfigureAwait(false))
            {
                var batch = cursor.Current;
                foreach (var index in batch)
                {
                    indexes.Add(index);
                }
            }

            return(indexes);
        }
Exemplo n.º 10
0
 public void Setup()
 {
     _connectionSource = Substitute.For <IConnectionSourceHandle>();
 }
 // constructors
 public ConnectionSourceReadWriteBinding(IConnectionSourceHandle connectionSource, ReadPreference readPreference)
 {
     _connectionSource = Ensure.IsNotNull(connectionSource, "connectionSource");
     _readPreference   = Ensure.IsNotNull(readPreference, "readPreference");
 }
 // constructors
 public ConnectionSourceReadWriteBinding(IConnectionSourceHandle connectionSource, ReadPreference readPreference)
 {
     _connectionSource = Ensure.IsNotNull(connectionSource, "connectionSource");
     _readPreference = Ensure.IsNotNull(readPreference, "readPreference");
 }
 public void Setup()
 {
     _connectionSource = Substitute.For<IConnectionSourceHandle>();
 }
Exemplo n.º 14
0
 public static TResult Execute <TResult>(this IWriteOperation <TResult> operation, IConnectionSourceHandle connectionSource, TimeSpan timeout = default(TimeSpan), CancellationToken cancellationToken = default(CancellationToken))
 {
     return(operation.ExecuteAsync(connectionSource, timeout, cancellationToken).GetAwaiter().GetResult());
 }