コード例 #1
0
        internal async Task <CosmosQueryResponse <T> > NextResultSetAsync <T>(
            int?maxItemCount,
            string continuationToken,
            CosmosRequestOptions options,
            object state,
            CancellationToken cancellationToken)
        {
            CosmosQueryRequestOptions cosmosQueryRequestOptions = options as CosmosQueryRequestOptions ?? new CosmosQueryRequestOptions();
            FeedOptions feedOptions = cosmosQueryRequestOptions.ToFeedOptions();

            feedOptions.RequestContinuation = continuationToken;
            feedOptions.MaxItemCount        = maxItemCount;

            IDocumentQuery <T> documentClientResult = this.client.DocumentClient.CreateDocumentQuery <T>(
                collectionLink: this.container.LinkUri.OriginalString,
                feedOptions: feedOptions,
                querySpec: state as SqlQuerySpec).AsDocumentQuery();

            try
            {
                FeedResponse <T> feedResponse = await documentClientResult.ExecuteNextAsync <T>(cancellationToken);

                return(CosmosQueryResponse <T> .CreateResponse <T>(feedResponse, feedResponse.ResponseContinuation, documentClientResult.HasMoreResults));
            }
            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);
            }
        }
コード例 #2
0
        public override CosmosResultSetIterator CreateItemQueryAsStream(
            CosmosSqlQueryDefinition sqlQueryDefinition,
            int maxConcurrency,
            object partitionKey      = null,
            int?maxItemCount         = null,
            string continuationToken = null,
            CosmosQueryRequestOptions requestOptions = null)
        {
            requestOptions = requestOptions ?? new CosmosQueryRequestOptions();
            requestOptions.maxConcurrency            = maxConcurrency;
            requestOptions.EnableCrossPartitionQuery = true;

            FeedOptions feedOptions = requestOptions.ToFeedOptions();

            feedOptions.RequestContinuation = continuationToken;
            feedOptions.MaxItemCount        = maxItemCount;
            if (partitionKey != null)
            {
                PartitionKey pk = new PartitionKey(partitionKey);
                feedOptions.PartitionKey = pk;
            }

            DocumentQuery <CosmosQueryResponse> documentQuery = (DocumentQuery <CosmosQueryResponse>) this.client.DocumentClient.CreateDocumentQuery <CosmosQueryResponse>(
                collectionLink: this.container.LinkUri.OriginalString,
                feedOptions: feedOptions,
                querySpec: sqlQueryDefinition.ToSqlQuerySpec());

            return(new CosmosResultSetIteratorCore(
                       maxItemCount,
                       continuationToken,
                       requestOptions,
                       this.QueryRequestExecutor,
                       documentQuery));
        }