예제 #1
0
        public void Where(Expression <Func <TSource, bool> > predicate)
        {
            MethodCallExpression whereExpression = predicate.WrapInWhereExpression();
            var jsonSelector = _queryProvider.ToString(whereExpression);

            _partialSelector = jsonSelector
                               .Substring(1, jsonSelector.Length - 2)
                               .Replace("selector", "partial_filter_selector", StringComparison.CurrentCultureIgnoreCase);
        }
        public static async Task <ChangesFeedResponse <TSource> > QueryWithFilterAsync <TSource>(this IFlurlRequest request, IAsyncQueryProvider queryProvider, ChangesFeedFilter filter,
                                                                                                 CancellationToken cancellationToken)
            where TSource : CouchDocument
        {
            if (filter is DocumentIdsChangesFeedFilter documentIdsFilter)
            {
                return(await request
                       .SetQueryParam("filter", "_doc_ids")
                       .PostJsonAsync(new ChangesFeedFilterDocuments(documentIdsFilter.Value), cancellationToken)
                       .ReceiveJson <ChangesFeedResponse <TSource> >()
                       .ConfigureAwait(false));
            }

            if (filter is SelectorChangesFeedFilter <TSource> selectorFilter)
            {
                MethodCallExpression whereExpression = selectorFilter.Value.WrapInWhereExpression();
                var jsonSelector = queryProvider.ToString(whereExpression);

                return(await request
                       .WithHeader("Content-Type", "application/json")
                       .SetQueryParam("filter", "_selector")
                       .PostStringAsync(jsonSelector, cancellationToken)
                       .ReceiveJson <ChangesFeedResponse <TSource> >()
                       .ConfigureAwait(false));
            }

            if (filter is DesignChangesFeedFilter)
            {
                return(await request
                       .SetQueryParam("filter", "_design")
                       .GetJsonAsync <ChangesFeedResponse <TSource> >(cancellationToken)
                       .ConfigureAwait(false));
            }

            if (filter is ViewChangesFeedFilter viewFilter)
            {
                return(await request
                       .SetQueryParam("filter", "_view")
                       .SetQueryParam("view", viewFilter.Value)
                       .GetJsonAsync <ChangesFeedResponse <TSource> >(cancellationToken)
                       .ConfigureAwait(false));
            }
            throw new InvalidOperationException($"Filter of type {filter.GetType().Name} not supported.");
        }
예제 #3
0
 public override string ToString()
 {
     return(_queryProvider.ToString(_expression));
 }