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); }
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; } }