public override FeedIterator <T> GetItemQueryIterator <T>(
     FeedToken feedToken,
     string queryText = null,
     QueryRequestOptions requestOptions = null)
 {
     return(this.container.GetItemQueryIterator <T>(feedToken, queryText, requestOptions));
 }
 public override FeedIterator <T> GetItemQueryIterator <T>(
     FeedToken feedToken,
     QueryDefinition queryDefinition,
     QueryRequestOptions requestOptions = null)
 {
     return(this.container.GetItemQueryIterator <T>(feedToken, queryDefinition, requestOptions));
 }
示例#3
0
        FeedIterator GetChangeFeedStreamIterator(
            FeedToken feedToken,
            ChangeFeedRequestOptions changeFeedRequestOptions = null)
        {
            FeedTokenInternal feedTokenInternal = feedToken as FeedTokenInternal;

            return(new ChangeFeedIteratorCore(
                       this,
                       feedTokenInternal,
                       changeFeedRequestOptions));
        }
示例#4
0
        FeedIterator <T> GetChangeFeedIterator <T>(
            FeedToken feedToken,
            ChangeFeedRequestOptions changeFeedRequestOptions = null)
        {
            FeedTokenInternal      feedTokenInternal      = feedToken as FeedTokenInternal;
            ChangeFeedIteratorCore changeFeedIteratorCore = new ChangeFeedIteratorCore(
                this,
                feedTokenInternal,
                changeFeedRequestOptions);

            return(new FeedIteratorCore <T>(changeFeedIteratorCore, responseCreator: this.ClientContext.ResponseFactory.CreateChangeFeedUserTypeResponse <T>));
        }
 public static bool TryParseInstance(string toStringValue, out FeedToken feedToken)
 {
     try
     {
         feedToken = JsonConvert.DeserializeObject <FeedTokenEPKRange>(toStringValue);
         return(true);
     }
     catch
     {
         feedToken = null;
         return(false);
     }
 }
        FeedIterator GetItemQueryStreamIterator(
            FeedToken feedToken,
            string queryText = null,
            QueryRequestOptions requestOptions = null)
        {
            QueryDefinition queryDefinition = null;

            if (queryText != null)
            {
                queryDefinition = new QueryDefinition(queryText);
            }

            return(this.GetItemQueryStreamIterator(
                       feedToken,
                       queryDefinition,
                       requestOptions));
        }
        FeedIterator GetItemQueryStreamIterator(
            FeedToken feedToken,
            QueryDefinition queryDefinition,
            QueryRequestOptions requestOptions = null)
        {
            if (feedToken is FeedTokenInternal feedTokenInternal)
            {
                return(this.GetItemQueryStreamIteratorInternal(
                           sqlQuerySpec: queryDefinition?.ToSqlQuerySpec(),
                           isContinuationExcpected: true,
                           continuationToken: null,
                           feedToken: feedTokenInternal,
                           requestOptions: requestOptions));
            }

            throw new ArgumentException(nameof(feedToken), ClientResources.FeedToken_InvalidImplementation);
        }
示例#8
0
        async Task <IEnumerable <string> > GetPartitionKeyRangesAsync(
            FeedToken feedToken,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (feedToken is FeedTokenEPKRange feedTokenEPKRange)
            {
                PartitionKeyRangeCache partitionKeyRangeCache = await this.ClientContext.DocumentClient.GetPartitionKeyRangeCacheAsync();

                string containerRId = await this.GetRIDAsync(cancellationToken);

                IReadOnlyList <Documents.PartitionKeyRange> partitionKeyRanges = await partitionKeyRangeCache.TryGetOverlappingRangesAsync(containerRId, feedTokenEPKRange.CompleteRange, forceRefresh : false);

                return(partitionKeyRanges.Select(partitionKeyRange => partitionKeyRange.Id));
            }

            if (feedToken is FeedTokenPartitionKeyRange feedTokenPartitionKeyRange)
            {
                if (feedTokenPartitionKeyRange.FeedTokenEPKRange != null)
                {
                    return(await this.GetPartitionKeyRangesAsync(feedTokenPartitionKeyRange.FeedTokenEPKRange, cancellationToken));
                }

                return(new List <string>()
                {
                    feedTokenPartitionKeyRange.PartitionKeyRangeId
                });
            }

            if (feedToken is FeedTokenPartitionKey feedTokenPartitionKey)
            {
                CollectionRoutingMap collectionRoutingMap = await this.GetRoutingMapAsync(cancellationToken);

                PartitionKeyDefinition partitionKeyDefinition = await this.GetPartitionKeyDefinitionAsync(cancellationToken);

                PartitionKeyInternal partitionKeyInternal = feedTokenPartitionKey.PartitionKey.InternalKey;
                string effectivePartitionKeyString        = partitionKeyInternal.GetEffectivePartitionKeyString(partitionKeyDefinition);
                string partitionKeyRangeId = collectionRoutingMap.GetRangeByEffectivePartitionKey(effectivePartitionKeyString).Id;
                return(new List <string>()
                {
                    partitionKeyRangeId
                });
            }

            throw new ArgumentException(nameof(feedToken), ClientResources.FeedToken_UnrecognizedFeedToken);
        }
        FeedIterator <T> GetItemQueryIterator <T>(
            FeedToken feedToken,
            QueryDefinition queryDefinition,
            QueryRequestOptions requestOptions = null)
        {
            requestOptions = requestOptions ?? new QueryRequestOptions();

            if (!(this.GetItemQueryStreamIterator(
                      feedToken,
                      queryDefinition,
                      requestOptions) is FeedIteratorInternal feedIterator))
            {
                throw new InvalidOperationException($"Expected a FeedIteratorInternal.");
            }

            return(new FeedIteratorCore <T>(
                       feedIterator: feedIterator,
                       responseCreator: this.ClientContext.ResponseFactory.CreateQueryFeedUserTypeResponse <T>));
        }
        public static bool TryParseInstance(string toStringValue, out FeedToken feedToken)
        {
            try
            {
                feedToken = JsonConvert.DeserializeObject <FeedTokenPartitionKeyRange>(toStringValue);
                return(true);
            }
            catch
            {
                // Special case, for backward compatibility, if the string represents a PKRangeId
                if (int.TryParse(toStringValue, out int pkRangeId))
                {
                    feedToken = new FeedTokenPartitionKeyRange(pkRangeId.ToString());
                    return(true);
                }

                feedToken = null;
                return(false);
            }
        }
        public static bool TryParse(
            string toStringValue,
            out FeedToken parsedToken)
        {
            if (FeedTokenEPKRange.TryParseInstance(toStringValue, out parsedToken))
            {
                return(true);
            }

            if (FeedTokenPartitionKey.TryParseInstance(toStringValue, out parsedToken))
            {
                return(true);
            }

            if (FeedTokenPartitionKeyRange.TryParseInstance(toStringValue, out parsedToken))
            {
                return(true);
            }

            parsedToken = null;
            return(false);
        }
 public override Task <IEnumerable <string> > GetPartitionKeyRangesAsync(
     FeedToken feedToken,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     return(TaskHelper.RunInlineIfNeededAsync(() => this.container.GetPartitionKeyRangesAsync(feedToken, cancellationToken)));
 }
 public override FeedIterator <T> GetChangeFeedIterator <T>(
     FeedToken feedToken,
     ChangeFeedRequestOptions changeFeedRequestOptions = null)
 {
     return(this.container.GetChangeFeedIterator <T>(feedToken, changeFeedRequestOptions));
 }