private async Task Query(DocumentsOperationContext context, string indexName, OperationCancelToken token, HttpMethod method) { var indexQuery = GetIndexQuery(context, method); var existingResultEtag = GetLongFromHeaders("If-None-Match"); var includes = GetStringValuesQueryString("include", required: false); var metadataOnly = GetBoolValueQueryString("metadata-only", required: false) ?? false; var runner = new QueryRunner(Database, context); DocumentQueryResult result; try { result = await runner.ExecuteQuery(indexName, indexQuery, includes, existingResultEtag, token).ConfigureAwait(false); } catch (IndexDoesNotExistsException) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; return; } if (result.NotModified) { HttpContext.Response.StatusCode = 304; return; } HttpContext.Response.Headers[Constants.MetadataEtagField] = result.ResultEtag.ToInvariantString(); using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteDocumentQueryResult(context, result, metadataOnly); } }
private async Task Query(DocumentsOperationContext context, OperationCancelToken token, HttpMethod method) { var indexQuery = await GetIndexQuery(context, method); var existingResultEtag = GetLongFromHeaders("If-None-Match"); if (indexQuery.Metadata.IsFacet) { await FacetedQuery(indexQuery, context, token); return; } if (indexQuery.Metadata.IsSuggest) { await SuggestQuery(indexQuery, context, token); return; } var metadataOnly = GetBoolValueQueryString("metadata-only", required: false) ?? false; DocumentQueryResult result; try { result = await Database.QueryRunner.ExecuteQuery(indexQuery, context, existingResultEtag, token).ConfigureAwait(false); } catch (IndexDoesNotExistException) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; return; } if (result.NotModified) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotModified; return; } HttpContext.Response.Headers[Constants.Headers.Etag] = CharExtensions.ToInvariantString(result.ResultEtag); int numberOfResults; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { writer.WriteDocumentQueryResult(context, result, metadataOnly, out numberOfResults); } Database.QueryMetadataCache.MaybeAddToCache(indexQuery.Metadata, result.IndexName); AddPagingPerformanceHint(PagingOperationType.Queries, $"{nameof(Query)} ({indexQuery.Metadata.IndexName})", HttpContext, numberOfResults, indexQuery.PageSize, TimeSpan.FromMilliseconds(result.DurationInMs)); }