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)); } }
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)); }
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)); } }
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)); }
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); }
public void Setup() { _connectionSource = Substitute.For <IConnectionSourceHandle>(); }
// constructors public ConnectionSourceReadWriteBinding(IConnectionSourceHandle connectionSource, ReadPreference readPreference) { _connectionSource = Ensure.IsNotNull(connectionSource, "connectionSource"); _readPreference = Ensure.IsNotNull(readPreference, "readPreference"); }
public void Setup() { _connectionSource = Substitute.For<IConnectionSourceHandle>(); }
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()); }