Esempio n. 1
0
        public static IndexQueryServerSide Create(
            BlittableJsonReaderObject json,
            QueryMetadataCache cache,
            QueryType queryType = QueryType.Select)
        {
            var result = JsonDeserializationServer.IndexQuery(json);

            if (result.PageSize == 0 && json.TryGet(nameof(PageSize), out int _) == false)
            {
                result.PageSize = int.MaxValue;
            }

            if (string.IsNullOrWhiteSpace(result.Query))
            {
                throw new InvalidOperationException($"Index query does not contain '{nameof(Query)}' field.");
            }

            if (cache.TryGetMetadata(result, out var metadataHash, out var metadata))
            {
                result.Metadata = metadata;
                return(result);
            }

            result.Metadata = new QueryMetadata(result.Query, result.QueryParameters, metadataHash, queryType);
            if (result.Metadata.HasTimings)
            {
                result.Timings = new QueryTimingsScope(start: false);
            }

            return(result);
        }
Esempio n. 2
0
        public static IndexQueryServerSide Create(
            HttpContext httpContext,
            BlittableJsonReaderObject json,
            QueryMetadataCache cache,
            RequestTimeTracker tracker,
            QueryType queryType = QueryType.Select)
        {
            IndexQueryServerSide result = null;

            try
            {
                result = JsonDeserializationServer.IndexQuery(json);

                if (result.PageSize == 0 && json.TryGet(nameof(PageSize), out int _) == false)
                {
                    result.PageSize = int.MaxValue;
                }

                if (string.IsNullOrWhiteSpace(result.Query))
                {
                    throw new InvalidOperationException($"Index query does not contain '{nameof(Query)}' field.");
                }

                if (cache.TryGetMetadata(result, out var metadataHash, out var metadata))
                {
                    result.Metadata = metadata;
                    return(result);
                }

                result.Metadata = new QueryMetadata(result.Query, result.QueryParameters, metadataHash, queryType);

                if (result.Metadata.HasTimings)
                {
                    result.Timings = new QueryTimingsScope(start: false);
                }

                if (tracker != null)
                {
                    tracker.Query = result.Query;
                }

                return(result);
            }
            catch (Exception e)
            {
                string errorMessage;
                if (e is InvalidOperationException)
                {
                    errorMessage = e.Message;
                }
                else
                {
                    errorMessage = (result == null ? $"Failed to parse index query : {json}" : $"Failed to parse query: {result.Query}");
                }

                if (tracker != null)
                {
                    tracker.Query = errorMessage;
                }
                if (TrafficWatchManager.HasRegisteredClients)
                {
                    AddStringToHttpContext(httpContext, errorMessage, TrafficWatchChangeType.Queries);
                }
                throw;
            }
        }