private OrderByDocumentQueryExecutionContext( IDocumentQueryClient client, ResourceType resourceTypeEnum, Type resourceType, Expression expression, FeedOptions feedOptions, string resourceLink, string rewrittenQuery, bool isContinuationExpected, bool getLazyFeedResponse, OrderByConsumeComparer consumeComparer, string collectionRid, Guid correlatedActivityId) : base( client, resourceTypeEnum, resourceType, expression, feedOptions, resourceLink, rewrittenQuery, correlatedActivityId, isContinuationExpected: isContinuationExpected, getLazyFeedResponse: getLazyFeedResponse, isDynamicPageSizeAllowed: true) { this.collectionRid = collectionRid; this.documentProducerConsumerQueue = new PriorityQueue <DocumentProducer <OrderByQueryResult> >(consumeComparer); this.filters = new Dictionary <string, string>(); this.consumeComparer = consumeComparer; }
/// <summary> /// Initializes a new instance of the OrderByEqualityComparer class. /// </summary> /// <param name="orderByConsumeComparer">The order by consume comparer.</param> public OrderByEqualityComparer(OrderByConsumeComparer orderByConsumeComparer) { if (orderByConsumeComparer == null) { throw new ArgumentNullException($"{nameof(orderByConsumeComparer)} can not be null."); } this.orderByConsumeComparer = orderByConsumeComparer; }
/// <summary> /// Initializes a new instance of the CosmosOrderByItemQueryExecutionContext class. /// </summary> /// <param name="initPararms">The params used to construct the base class.</param> /// For cross partition order by queries a query like "SELECT c.id, c.field_0 ORDER BY r.field_7 gets rewritten as: /// <![CDATA[ /// SELECT r._rid, [{"item": r.field_7}] AS orderByItems, {"id": r.id, "field_0": r.field_0} AS payload /// FROM r /// WHERE({ document db - formattable order by query - filter}) /// ORDER BY r.field_7]]> /// This is needed because we need to add additional filters to the query when we resume from a continuation, /// and it lets us easily parse out the _rid orderByItems, and payload without parsing the entire document (and having to remember the order by field). /// <param name="consumeComparer">Comparer used to internally compare documents from different sorted partitions.</param> private CosmosOrderByItemQueryExecutionContext( CosmosQueryContext initPararms, OrderByConsumeComparer consumeComparer) : base( initPararms, consumeComparer, CosmosOrderByItemQueryExecutionContext.FetchPriorityFunction, new OrderByEqualityComparer(consumeComparer)) { }
/// <summary> /// Initializes a new instance of the OrderByDocumentQueryExecutionContext class. /// </summary> /// <param name="initPararms">The params used to construct the base class.</param> /// <param name="rewrittenQuery"> /// For cross partition order by queries a query like "SELECT c.id, c.field_0 ORDER BY r.field_7 gets rewritten as: /// <![CDATA[ /// SELECT r._rid, [{"item": r.field_7}] AS orderByItems, {"id": r.id, "field_0": r.field_0} AS payload /// FROM r /// WHERE({ document db - formattable order by query - filter}) /// ORDER BY r.field_7]]> /// This is needed because we need to add additional filters to the query when we resume from a continuation, /// and it lets us easily parse out the _rid orderByItems, and payload without parsing the entire document (and having to remember the order by field). /// </param> /// <param name="consumeComparer">Comparer used to internally compare documents from different sorted partitions.</param> private OrderByDocumentQueryExecutionContext( DocumentQueryExecutionContextBase.InitParams initPararms, string rewrittenQuery, OrderByConsumeComparer consumeComparer) : base( initPararms, rewrittenQuery, consumeComparer, OrderByDocumentQueryExecutionContext.FetchPriorityFunction, new OrderByEqualityComparer(consumeComparer)) { }
/// <summary> /// Initializes a new instance of the CosmosOrderByItemQueryExecutionContext class. /// </summary> /// <param name="initPararms">The params used to construct the base class.</param> /// For cross partition order by queries a query like "SELECT c.id, c.field_0 ORDER BY r.field_7 gets rewritten as: /// <![CDATA[ /// SELECT r._rid, [{"item": r.field_7}] AS orderByItems, {"id": r.id, "field_0": r.field_0} AS payload /// FROM r /// WHERE({ document db - formattable order by query - filter}) /// ORDER BY r.field_7]]> /// This is needed because we need to add additional filters to the query when we resume from a continuation, /// and it lets us easily parse out the _rid orderByItems, and payload without parsing the entire document (and having to remember the order by field). /// <param name="maxConcurrency">The max concurrency</param> /// <param name="maxBufferedItemCount">The max buffered item count</param> /// <param name="maxItemCount">Max item count</param> /// <param name="consumeComparer">Comparer used to internally compare documents from different sorted partitions.</param> private CosmosOrderByItemQueryExecutionContext( CosmosQueryContext initPararms, int?maxConcurrency, int?maxItemCount, int?maxBufferedItemCount, OrderByConsumeComparer consumeComparer) : base( queryContext: initPararms, maxConcurrency: maxConcurrency, maxItemCount: maxItemCount, maxBufferedItemCount: maxBufferedItemCount, moveNextComparer: consumeComparer, fetchPrioirtyFunction: CosmosOrderByItemQueryExecutionContext.FetchPriorityFunction, equalityComparer: new OrderByEqualityComparer(consumeComparer)) { }