public static async Task <PartitionedQueryExecutionInfo> GetQueryPlanWithServiceInteropAsync( CosmosQueryClient queryClient, SqlQuerySpec sqlQuerySpec, Documents.ResourceType resourceType, PartitionKeyDefinition partitionKeyDefinition, bool hasLogicalPartitionKey, bool useSystemPrefix, ITrace trace, CancellationToken cancellationToken = default) { if (queryClient == null) { throw new ArgumentNullException(nameof(queryClient)); } if (sqlQuerySpec == null) { throw new ArgumentNullException(nameof(sqlQuerySpec)); } if (partitionKeyDefinition == null) { throw new ArgumentNullException(nameof(partitionKeyDefinition)); } cancellationToken.ThrowIfCancellationRequested(); using (ITrace serviceInteropTrace = trace.StartChild("Service Interop Query Plan", TraceComponent.Query, TraceLevel.Info)) { QueryPlanHandler queryPlanHandler = new QueryPlanHandler(queryClient); TryCatch <PartitionedQueryExecutionInfo> tryGetQueryPlan = await queryPlanHandler.TryGetQueryPlanAsync( sqlQuerySpec, resourceType, partitionKeyDefinition, QueryPlanRetriever.SupportedQueryFeatures, hasLogicalPartitionKey, useSystemPrefix, cancellationToken); if (!tryGetQueryPlan.Succeeded) { Exception originalException = ExceptionWithStackTraceException.UnWrapMonadExcepion(tryGetQueryPlan.Exception, serviceInteropTrace); if (originalException is CosmosException) { throw originalException; } throw CosmosExceptionFactory.CreateBadRequestException( message: originalException.Message, headers: new Headers(), stackTrace: tryGetQueryPlan.Exception.StackTrace, innerException: originalException, trace: trace); } return(tryGetQueryPlan.Result); } }
internal abstract Task <PartitionedQueryExecutionInfo> ExecuteQueryPlanRequestAsync( string resourceUri, Documents.ResourceType resourceType, Documents.OperationType operationType, SqlQuerySpec sqlQuerySpec, PartitionKey?partitionKey, string supportedQueryFeatures, CancellationToken cancellationToken);