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));
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 /// <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);
             }
         }
     }
 }
Exemplo n.º 5
0
 /// <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);
             }
         }
     }
 }