public static async Task <TryCatch <CosmosQueryExecutionContext> > TryCreateFromPartitionedQuerExecutionInfoAsync( PartitionedQueryExecutionInfo partitionedQueryExecutionInfo, ContainerQueryProperties containerQueryProperties, CosmosQueryContext cosmosQueryContext, InputParameters inputParameters, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); List <Documents.PartitionKeyRange> targetRanges = await CosmosQueryExecutionContextFactory.GetTargetPartitionKeyRangesAsync( cosmosQueryContext.QueryClient, cosmosQueryContext.ResourceLink.OriginalString, partitionedQueryExecutionInfo, containerQueryProperties, inputParameters.Properties); if (!string.IsNullOrEmpty(partitionedQueryExecutionInfo.QueryInfo.RewrittenQuery)) { // We need pass down the rewritten query. SqlQuerySpec rewrittenQuerySpec = new SqlQuerySpec() { QueryText = partitionedQueryExecutionInfo.QueryInfo.RewrittenQuery, Parameters = inputParameters.SqlQuerySpec.Parameters }; inputParameters = new InputParameters( rewrittenQuerySpec, inputParameters.InitialUserContinuationToken, inputParameters.MaxConcurrency, inputParameters.MaxItemCount, inputParameters.MaxBufferedItemCount, inputParameters.PartitionKey, inputParameters.Properties, inputParameters.PartitionedQueryExecutionInfo, inputParameters.ExecutionEnvironment, inputParameters.ReturnResultsInDeterministicOrder, inputParameters.TestInjections); } return(await CosmosQueryExecutionContextFactory.TryCreateSpecializedDocumentQueryExecutionContextAsync( cosmosQueryContext, inputParameters, partitionedQueryExecutionInfo, targetRanges, containerQueryProperties.ResourceId, cancellationToken)); }
public static async Task <TryCatch <CosmosQueryExecutionContext> > TryCreateFromPartitionedQuerExecutionInfoAsync( PartitionedQueryExecutionInfo partitionedQueryExecutionInfo, ContainerQueryProperties containerQueryProperties, CosmosQueryContext cosmosQueryContext, InputParameters inputParameters, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); List <Documents.PartitionKeyRange> targetRanges = await CosmosQueryExecutionContextFactory.GetTargetPartitionKeyRangesAsync( cosmosQueryContext.QueryClient, cosmosQueryContext.ResourceLink, partitionedQueryExecutionInfo, containerQueryProperties, inputParameters.Properties, inputParameters.InitialFeedRange); bool singleLogicalPartitionKeyQuery = inputParameters.PartitionKey.HasValue || ((partitionedQueryExecutionInfo.QueryRanges.Count == 1) && partitionedQueryExecutionInfo.QueryRanges[0].IsSingleValue); bool serverStreamingQuery = !partitionedQueryExecutionInfo.QueryInfo.HasAggregates && !partitionedQueryExecutionInfo.QueryInfo.HasDistinct && !partitionedQueryExecutionInfo.QueryInfo.HasGroupBy; bool streamingSinglePartitionQuery = singleLogicalPartitionKeyQuery && serverStreamingQuery; bool clientStreamingQuery = serverStreamingQuery && !partitionedQueryExecutionInfo.QueryInfo.HasOrderBy && !partitionedQueryExecutionInfo.QueryInfo.HasTop && !partitionedQueryExecutionInfo.QueryInfo.HasLimit && !partitionedQueryExecutionInfo.QueryInfo.HasOffset; bool streamingCrossContinuationQuery = !singleLogicalPartitionKeyQuery && clientStreamingQuery; bool createPassthoughQuery = streamingSinglePartitionQuery || streamingCrossContinuationQuery; Task <TryCatch <CosmosQueryExecutionContext> > tryCreateContextTask; if (createPassthoughQuery) { TestInjections.ResponseStats responseStats = inputParameters?.TestInjections?.Stats; if (responseStats != null) { responseStats.PipelineType = TestInjections.PipelineType.Passthrough; } tryCreateContextTask = CosmosQueryExecutionContextFactory.TryCreatePassthroughQueryExecutionContextAsync( cosmosQueryContext, inputParameters, partitionedQueryExecutionInfo, targetRanges, containerQueryProperties.ResourceId, cancellationToken); } else { TestInjections.ResponseStats responseStats = inputParameters?.TestInjections?.Stats; if (responseStats != null) { responseStats.PipelineType = TestInjections.PipelineType.Specialized; } if (!string.IsNullOrEmpty(partitionedQueryExecutionInfo.QueryInfo.RewrittenQuery)) { // We need pass down the rewritten query. SqlQuerySpec rewrittenQuerySpec = new SqlQuerySpec() { QueryText = partitionedQueryExecutionInfo.QueryInfo.RewrittenQuery, Parameters = inputParameters.SqlQuerySpec.Parameters }; inputParameters = new InputParameters( rewrittenQuerySpec, inputParameters.InitialUserContinuationToken, inputParameters.InitialFeedRange, inputParameters.MaxConcurrency, inputParameters.MaxItemCount, inputParameters.MaxBufferedItemCount, inputParameters.PartitionKey, inputParameters.Properties, inputParameters.PartitionedQueryExecutionInfo, inputParameters.ExecutionEnvironment, inputParameters.ReturnResultsInDeterministicOrder, inputParameters.ForcePassthrough, inputParameters.TestInjections); } tryCreateContextTask = CosmosQueryExecutionContextFactory.TryCreateSpecializedDocumentQueryExecutionContextAsync( cosmosQueryContext, inputParameters, partitionedQueryExecutionInfo, targetRanges, containerQueryProperties.ResourceId, cancellationToken); } return(await tryCreateContextTask); }