internal async Task <CosmosQueryResponse <T> > NextResultSetAsync <T>( int?maxItemCount, string continuationToken, CosmosRequestOptions options, object state, CancellationToken cancellationToken) { IDocumentQueryExecutionContext documentQueryExecution = (IDocumentQueryExecutionContext)state; try { FeedResponse <CosmosElement> feedResponse = await documentQueryExecution.ExecuteNextAsync(cancellationToken); return(CosmosQueryResponse <T> .CreateResponse <T>( feedResponse : feedResponse, jsonSerializer : this.clientContext.JsonSerializer, hasMoreResults : !documentQueryExecution.IsDone, resourceType : ResourceType.Document)); } catch (DocumentClientException exception) { throw new CosmosException( message: exception.Message, statusCode: exception.StatusCode.HasValue ? exception.StatusCode.Value : HttpStatusCode.InternalServerError, subStatusCode: (int)exception.GetSubStatus(), activityId: exception.ActivityId, requestCharge: exception.RequestCharge); } }
private async Task <CosmosQueryResponse> QueryRequestExecutor( string continuationToken, CosmosRequestOptions requestOptions, object state, CancellationToken cancellationToken) { IDocumentQueryExecutionContext documentQueryExecution = (IDocumentQueryExecutionContext)state; CosmosQueryRequestOptions queryRequestOptions = (CosmosQueryRequestOptions)requestOptions; // DEVNOTE: Remove try catch once query pipeline is converted to exceptionless try { FeedResponse <CosmosElement> feedResponse = await documentQueryExecution.ExecuteNextAsync(cancellationToken); return(CosmosQueryResponse.CreateResponse( feedResponse: feedResponse, cosmosSerializationOptions: queryRequestOptions.CosmosSerializationOptions)); } catch (DocumentClientException exception) { return(new CosmosQueryResponse( errorMessage: exception.Message, httpStatusCode: exception.StatusCode.HasValue ? exception.StatusCode.Value : HttpStatusCode.InternalServerError, retryAfter: exception.RetryAfter)); } catch (AggregateException ae) { DocumentClientException exception = ae.InnerException as DocumentClientException; if (exception == null) { throw; } return(new CosmosQueryResponse( errorMessage: exception.Message, httpStatusCode: exception.StatusCode.HasValue ? exception.StatusCode.Value : HttpStatusCode.InternalServerError, retryAfter: exception.RetryAfter)); } }
internal async Task <List <T> > ExecuteAllAsync(CancellationToken cancellationToken = default(CancellationToken)) { List <T> result = new List <T>(); using (IDocumentQueryExecutionContext localQueryExecutionContext = await TaskHelper.InlineIfPossible(async() => await this.CreateDocumentQueryExecutionContextAsync(false, cancellationToken), null, cancellationToken)) { while (!localQueryExecutionContext.IsDone) { FeedResponse <T> partialResult = await(dynamic) TaskHelper.InlineIfPossible(() => localQueryExecutionContext.ExecuteNextAsync(cancellationToken), null, cancellationToken); result.AddRange(partialResult); } } return(result); }
/// <summary> /// Retrieves an object that can iterate through the individual results of the query. /// </summary> /// <remarks> /// This triggers a synchronous multi-page load. /// </remarks> /// <returns></returns> public IEnumerator <T> GetEnumerator() { using (IDocumentQueryExecutionContext localQueryExecutionContext = TaskHelper.InlineIfPossible(() => this.CreateDocumentQueryExecutionContextAsync(false, CancellationToken.None), null).Result) { while (!localQueryExecutionContext.IsDone) { FeedResponse <CosmosElement> feedResponse = TaskHelper.InlineIfPossible(() => localQueryExecutionContext.ExecuteNextAsync(CancellationToken.None), null).Result; FeedResponse <T> typedFeedResponse = FeedResponseBinder.ConvertCosmosElementFeed <T>( feedResponse, this.resourceTypeEnum, this.feedOptions.JsonSerializerSettings); foreach (T item in typedFeedResponse) { yield return(item); } } } }
/// <summary> /// Retrieves an object that can iterate through the individual results of the query. /// </summary> /// <remarks> /// This triggers a synchronous multi-page load. /// </remarks> /// <returns></returns> public IEnumerator <T> GetEnumerator() { using (IDocumentQueryExecutionContext localQueryExecutionContext = TaskHelper.InlineIfPossible(() => this.CreateDocumentQueryExecutionContextAsync(false, CancellationToken.None), null).Result) { while (!localQueryExecutionContext.IsDone) { IEnumerable <T> result = (dynamic)TaskHelper.InlineIfPossible(() => localQueryExecutionContext.ExecuteNextAsync(CancellationToken.None), null).Result; foreach (T item in result) { yield return(item); } } } }