Пример #1
0
        public static IAsyncDocumentQuery <TSource> Paging <TSource>(this IAsyncDocumentQuery <TSource> source, Request request)
        {
            var maxResultsPerPage = 50;

            if (request.Query.per_page.HasValue)
            {
                maxResultsPerPage = request.Query.per_page;
            }

            if (maxResultsPerPage < 1)
            {
                maxResultsPerPage = 50;
            }

            var page = 1;

            if (request.Query.page.HasValue)
            {
                page = request.Query.page;
            }

            if (page < 1)
            {
                page = 1;
            }

            var skipResults = (page - 1) * maxResultsPerPage;

            return(source.Skip(skipResults)
                   .Take(maxResultsPerPage));
        }
Пример #2
0
 /// <summary>
 /// Move the registered after query actions
 /// </summary>
 public void MoveAfterQueryExecuted <K>(IAsyncDocumentQuery <K> documentQuery)
 {
     if (afterQueryExecuted != null)
     {
         documentQuery.AfterQueryExecuted(afterQueryExecuted);
     }
 }
 public YieldStream(AsyncDocumentSession parent, IAsyncDocumentQuery <T> query, FieldsToFetchToken fieldsToFetch, IAsyncEnumerator <BlittableJsonReaderObject> enumerator, CancellationToken token)
 {
     _parent        = parent;
     _enumerator    = enumerator;
     _token         = token;
     _query         = query;
     _fieldsToFetch = fieldsToFetch;
 }
Пример #4
0
        public static IAsyncDocumentQuery <TResult> WhereEquals <TResult, TValue, T>(this IAsyncDocumentQuery <TResult> self, Expression <Func <T, TValue> > propertySelector, TValue value)
        {
            AbstractDocumentQuery <TResult, AsyncDocumentQuery <TResult> > query = (AsyncDocumentQuery <TResult>)self;

            query.WhereEquals(query.GetMemberQueryPath(propertySelector.Body), value);

            return(self);
        }
Пример #5
0
        public static IAsyncDocumentQuery <TResult> Search <TResult, TValue, T>(this IAsyncDocumentQuery <TResult> self, Expression <Func <T, TValue> > propertySelector, string searchTerms, EscapeQueryOptions escapeQueryOptions = EscapeQueryOptions.RawQuery)
        {
            AbstractDocumentQuery <TResult, AsyncDocumentQuery <TResult> > query = (AsyncDocumentQuery <TResult>)self;

            query.Search(query.GetMemberQueryPath(propertySelector.Body), searchTerms, escapeQueryOptions);

            return(self);
        }
Пример #6
0
        public static IAsyncDocumentQuery <TResult> Highlight <TResult, TValue, T>(this IAsyncDocumentQuery <TResult> self, Expression <Func <T, TValue> > propertySelector, int fragmentLength, int fragmentCount, out FieldHighlightings highlightings)
        {
            AbstractDocumentQuery <TResult, AsyncDocumentQuery <TResult> > query = (AsyncDocumentQuery <TResult>)self;

            query.Highlight(query.GetMemberQueryPath(propertySelector.Body), fragmentLength, fragmentCount, out highlightings);

            return(self);
        }
Пример #7
0
 public YieldStream(AsyncDocumentSession parent, IAsyncDocumentQuery <T> query, string[] projectionFields, IAsyncEnumerator <BlittableJsonReaderObject> enumerator, CancellationToken token)
 {
     _parent           = parent;
     _enumerator       = enumerator;
     _token            = token;
     _query            = query;
     _projectionFields = projectionFields;
 }
Пример #8
0
        public async Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, Reference <QueryHeaderInformation> queryHeaderInformation)
        {
            var ravenQueryInspector = ((IRavenQueryInspector)query);
            var indexQuery          = ravenQueryInspector.GetIndexQuery(true);
            var enumerator          = await AsyncDatabaseCommands.StreamQueryAsync(ravenQueryInspector.AsyncIndexQueried, indexQuery, queryHeaderInformation);

            var queryOperation = ((AsyncDocumentQuery <T>)query).InitializeQueryOperation(null);

            queryOperation.DisableEntitiesTracking = true;

            return(new QueryYieldStream <T>(this, enumerator, queryOperation));
        }
        public async Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, CancellationToken token = default(CancellationToken))
        {
            var streamOperation = new StreamOperation(this);
            var command         = streamOperation.CreateRequest((IRavenQueryInspector)query);
            await RequestExecuter.ExecuteAsync(command, Context, token).ConfigureAwait(false);

            var result = streamOperation.SetResultAsync(command.Result);

            var queryOperation = ((AsyncDocumentQuery <T>)query).InitializeQueryOperation();

            queryOperation.DisableEntitiesTracking = true;
            return(new YieldStream <T>(this, result, token));
        }
        public async Task StreamIntoAsync <T>(IAsyncDocumentQuery <T> query, Stream output, CancellationToken token = default)
        {
            var streamOperation = new StreamOperation(this);
            var command         = streamOperation.CreateRequest(query.GetIndexQuery());

            await RequestExecutor.ExecuteAsync(command, Context, SessionInfo, token).ConfigureAwait(false);

            using (command.Result.Response)
                using (command.Result.Stream)
                {
                    await command.Result.Stream.CopyToAsync(output, 16 * 1024, token).ConfigureAwait(false);
                }
        }
Пример #11
0
        public static IAsyncDocumentQuery <T> FilterByQueueAddress <T>(this IAsyncDocumentQuery <T> source, HttpRequestMessage request)
        {
            var queueAddress = request.GetQueryStringValue <string>("queueaddress");

            if (string.IsNullOrWhiteSpace(queueAddress))
            {
                return(source);
            }

            source.AndAlso();
            source.WhereEquals("QueueAddress", queueAddress.ToLowerInvariant());

            return(source);
        }
Пример #12
0
        public static IAsyncDocumentQuery <TSource> Sort <TSource>(this IAsyncDocumentQuery <TSource> source, HttpRequestMessage request)
        {
            var descending = true;

            var direction = request.GetQueryStringValue("direction", "desc");

            if (direction == "asc")
            {
                descending = false;
            }

            string keySelector;

            var sort = request.GetQueryStringValue("sort", "time_sent");

            if (!AsyncDocumentQuerySortOptions.Contains(sort))
            {
                sort = "time_sent";
            }

            switch (sort)
            {
            case "id":
            case "message_id":
                keySelector = "MessageId";
                break;

            case "message_type":
                keySelector = "MessageType";
                break;

            case "status":
                keySelector = "Status";
                break;

            case "modified":
                keySelector = "LastModified";
                break;

            case "time_of_failure":
                keySelector = "TimeOfFailure";
                break;

            default:
                keySelector = "TimeSent";
                break;
            }

            return(source.AddOrder(keySelector, descending));
        }
Пример #13
0
        public async Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, CancellationToken token = default(CancellationToken))
        {
            var documentQuery    = (AsyncDocumentQuery <T>)query;
            var projectionFields = documentQuery.FieldsToFetchToken?.Projections;
            var indexQuery       = query.GetIndexQuery();

            var streamOperation = new StreamOperation(this);
            var command         = streamOperation.CreateRequest(indexQuery);
            await RequestExecutor.ExecuteAsync(command, Context, token, SessionInfo).ConfigureAwait(false);

            var result = streamOperation.SetResultAsync(command.Result);

            var queryOperation = ((AsyncDocumentQuery <T>)query).InitializeQueryOperation();

            queryOperation.DisableEntitiesTracking = true;
            return(new YieldStream <T>(this, query, projectionFields, result, token));
        }
Пример #14
0
        public async Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, Reference <QueryHeaderInformation> queryHeaderInformation, CancellationToken token = default(CancellationToken))
        {
            var ravenQueryInspector = ((IRavenQueryInspector)query);
            var indexQuery          = ravenQueryInspector.GetIndexQuery(true);

            if (indexQuery.WaitForNonStaleResults || indexQuery.WaitForNonStaleResultsAsOfNow)
            {
                throw new NotSupportedException(
                          "Since Stream() does not wait for indexing (by design), streaming query with WaitForNonStaleResults is not supported.");
            }


            var enumerator = await AsyncDatabaseCommands.StreamQueryAsync(ravenQueryInspector.AsyncIndexQueried, indexQuery, queryHeaderInformation, token).ConfigureAwait(false);

            var queryOperation = ((AsyncDocumentQuery <T>)query).InitializeQueryOperation();

            queryOperation.DisableEntitiesTracking = true;
            return(new QueryYieldStream <T>(this, enumerator, queryOperation, query, token));
        }
        public static IAsyncDocumentQuery <T> FilterByQueueAddress <T>(this IAsyncDocumentQuery <T> source, Request request)
        {
            string queueAddress = null;

            if ((bool)request.Query.queueaddress.HasValue)
            {
                queueAddress = (string)request.Query.queueaddress;
            }

            if (string.IsNullOrWhiteSpace(queueAddress))
            {
                return(source);
            }

            source.AndAlso();
            source.WhereEquals("QueueAddress", queueAddress.ToLowerInvariant());

            return(source);
        }
Пример #16
0
        public static IAsyncDocumentQuery <TSource> Paging <TSource>(this IAsyncDocumentQuery <TSource> source, HttpRequestMessage request)
        {
            var maxResultsPerPage = request.GetQueryStringValue("per_page", 50);

            if (maxResultsPerPage < 1)
            {
                maxResultsPerPage = 50;
            }

            var page = request.GetQueryStringValue("page", 1);

            if (page < 1)
            {
                page = 1;
            }

            var skipResults = (page - 1) * maxResultsPerPage;

            return(source.Skip(skipResults)
                   .Take(maxResultsPerPage));
        }
Пример #17
0
        public static IAsyncDocumentQuery <T> FilterByLastModifiedRange <T>(this IAsyncDocumentQuery <T> source, Request request)
        {
            string modified = null;

            if ((bool)request.Query.modified.HasValue)
            {
                modified = (string)request.Query.modified;
            }

            if (modified == null)
            {
                return(source);
            }

            var filters = modified.Split(new[]
            {
                "..."
            }, StringSplitOptions.None);

            if (filters.Length != 2)
            {
                throw new Exception("Invalid modified date range, dates need to be in ISO8601 format and it needs to be a range eg. 2016-03-11T00:27:15.474Z...2016-03-16T03:27:15.474Z");
            }

            try
            {
                var from = DateTime.Parse(filters[0], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
                var to   = DateTime.Parse(filters[1], CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

                source.AndAlso();
                source.WhereBetweenOrEqual("LastModified", from.Ticks, to.Ticks);
            }
            catch (Exception)
            {
                throw new Exception("Invalid modified date range, dates need to be in ISO8601 format and it needs to be a range eg. 2016-03-11T00:27:15.474Z...2016-03-16T03:27:15.474Z");
            }

            return(source);
        }
 private Task <IAsyncEnumerator <TimeSeriesStreamResult <T> > > TimeSeriesStreamInternalAsync <T>(IAsyncDocumentQuery <T> query, CancellationToken token) where T : ITimeSeriesQueryStreamResult, new()
 {
     return(TimeSeriesStreamInternalAsync(query, null, token));
 }
Пример #19
0
 /// <summary>
 /// Async Query the facets results for this query using the specified facet document with the given start and pageSize
 /// </summary>
 /// <param name="facetSetupDoc">Name of the FacetSetup document</param>
 /// <param name="start">Start index for paging</param>
 /// <param name="pageSize">Paging PageSize. If set, overrides Facet.MaxResults</param>
 public static Task <FacetResults> ToFacetsAsync <T>(this IAsyncDocumentQuery <T> queryable, string facetSetupDoc, int start = 0, int?pageSize = null)
 {
     return(queryable.GetFacetsAsync(facetSetupDoc, start, pageSize));
 }
Пример #20
0
 public Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, CancellationToken token = default(CancellationToken))
 {
     return(StreamAsync(query, new Reference <QueryHeaderInformation>(), token));
 }
 private Task <IAsyncEnumerator <TimeSeriesStreamResult <T> > > TimeSeriesStreamInternalAsync <T>(IAsyncDocumentQuery <T> query, out StreamQueryStatistics streamQueryStats, CancellationToken token) where T : ITimeSeriesQueryStreamResult, new()
 {
     streamQueryStats = new StreamQueryStatistics();
     return(TimeSeriesStreamInternalAsync(query, streamQueryStats, token));
 }
 Task <IAsyncEnumerator <TimeSeriesStreamResult <TimeSeriesAggregationResult> > > IAsyncTimeSeriesSessionStreamOperations <TimeSeriesAggregationResult> .StreamAsync(IAsyncDocumentQuery <TimeSeriesAggregationResult> query, CancellationToken token)
 {
     return(TimeSeriesStreamInternalAsync(query, token));
 }
 public Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, CancellationToken token = default)
 {
     return(PerformQueryStreamOperation(query, null, token));
 }
        private async Task <IAsyncEnumerator <StreamResult <T> > > PerformQueryStreamOperation <T>(IAsyncDocumentQuery <T> query, StreamQueryStatistics streamQueryStats, CancellationToken token)
        {
            var documentQuery = (AsyncDocumentQuery <T>)query;
            var fieldsToFetch = documentQuery.FieldsToFetchToken;
            var indexQuery    = query.GetIndexQuery();

            var streamOperation = new StreamOperation(this, streamQueryStats);
            var command         = streamOperation.CreateRequest(indexQuery);
            await RequestExecutor.ExecuteAsync(command, Context, SessionInfo, token).ConfigureAwait(false);

            var result = streamOperation.SetResultAsync(command.Result);

            var queryOperation = ((AsyncDocumentQuery <T>)query).InitializeQueryOperation();

            queryOperation.NoTracking = true;
            return(new YieldStream <T>(this, query, fieldsToFetch, result, token));
        }
        public static IAsyncDocumentQuery <T> FilterByStatusWhere <T>(this IAsyncDocumentQuery <T> source, Request request)
        {
            string status = null;

            if ((bool)request.Query.status.HasValue)
            {
                status = (string)request.Query.status;
            }

            if (status == null)
            {
                return(source);
            }

            var filters  = status.Replace(" ", String.Empty).Split(',');
            var excludes = new List <int>();
            var includes = new List <int>();

            foreach (var filter in filters)
            {
                FailedMessageStatus failedMessageStatus;

                if (filter.StartsWith("-"))
                {
                    if (Enum.TryParse(filter.Substring(1), true, out failedMessageStatus))
                    {
                        excludes.Add((int)failedMessageStatus);
                    }
                    continue;
                }

                if (Enum.TryParse(filter, true, out failedMessageStatus))
                {
                    includes.Add((int)failedMessageStatus);
                }
            }

            var sb = new StringBuilder();

            sb.Append("((");
            if (includes.Count == 0)
            {
                sb.Append("*");
            }
            else
            {
                sb.Append(String.Join(" OR ", includes.ToArray()));
            }
            sb.Append(")");

            if (excludes.Count > 0)
            {
                sb.Append(" AND NOT (");
                sb.Append(String.Join(" OR ", excludes.ToArray()));
                sb.Append(")");
            }
            sb.Append(")");

            source.AndAlso();
            source.Where($"Status: {sb}");

            return(source);
        }
        public static IAsyncDocumentQuery <TSource> Sort <TSource>(this IAsyncDocumentQuery <TSource> source, Request request)
        {
            var direction  = "desc";
            var descending = true;

            if (request.Query.direction.HasValue)
            {
                direction = (string)request.Query.direction;
            }

            if (direction == "asc")
            {
                descending = false;
            }

            var sortOptions = new[]
            {
                "id", "message_id", "message_type",
                "time_sent", "status", "modified", "time_of_failure"
            };

            var    sort = "time_sent";
            string keySelector;

            if (request.Query.sort.HasValue)
            {
                sort = (string)request.Query.sort;
            }

            if (!sortOptions.Contains(sort))
            {
                sort = "time_sent";
            }

            switch (sort)
            {
            case "id":
            case "message_id":
                keySelector = "MessageId";
                break;

            case "message_type":
                keySelector = "MessageType";
                break;

            case "status":
                keySelector = "Status";
                break;

            case "modified":
                keySelector = "LastModified";
                break;

            case "time_of_failure":
                keySelector = "TimeOfFailure";
                break;

            default:
                keySelector = "TimeSent";
                break;
            }

            return(source.AddOrder(keySelector, descending));
        }
Пример #27
0
 public Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query)
 {
     return(StreamAsync(query, new Reference <QueryHeaderInformation>()));
 }
Пример #28
0
 public QueryYieldStream(AsyncDocumentSession parent, IAsyncEnumerator <RavenJObject> enumerator, QueryOperation queryOperation, IAsyncDocumentQuery <T> query, CancellationToken token = default(CancellationToken))
     : base(parent, enumerator, token)
 {
     this.queryOperation = queryOperation;
     this.query          = query;
 }
Пример #29
0
 public Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, Reference <QueryHeaderInformation> queryHeaderInformation)
 {
     throw new NotSupportedException("Streams are currently not supported by sharded document store");
 }
 public Task <IAsyncEnumerator <StreamResult <T> > > StreamAsync <T>(IAsyncDocumentQuery <T> query, out StreamQueryStatistics streamQueryStats, CancellationToken token = default)
 {
     streamQueryStats = new StreamQueryStatistics();
     return(PerformQueryStreamOperation(query, streamQueryStats, token));
 }