private (List <Slice>, string) ExtractIdsFromQuery(IndexQueryServerSide query, DocumentsOperationContext context) { if (string.IsNullOrWhiteSpace(query.Query)) { return(null, null); } if (query.Metadata.Query.Where == null) { return(null, null); } if (query.Metadata.IndexFieldNames.Contains(QueryFieldName.DocumentId) == false) { return(null, null); } IDisposable releaseServerContext = null; IDisposable closeServerTransaction = null; TransactionOperationContext serverContext = null; try { if (query.Metadata.HasCmpXchg) { releaseServerContext = context.DocumentDatabase.ServerStore.ContextPool.AllocateOperationContext(out serverContext); closeServerTransaction = serverContext.OpenReadTransaction(); } using (closeServerTransaction) { var idsRetriever = new RetrieveDocumentIdsVisitor(serverContext, context, query.Metadata, _context.Allocator); idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters); return(idsRetriever.Ids?.OrderBy(x => x, SliceComparer.Instance).ToList(), idsRetriever.StartsWith); } } finally { releaseServerContext?.Dispose(); } }
private (List <Slice>, string) ExtractIdsFromQuery(IndexQueryServerSide query, MapQueryResultRetriever resultsRetriever) { if (string.IsNullOrWhiteSpace(query.Query)) { return(null, null); } if (query.Metadata.Query.Where == null) { return(null, null); } if (query.Metadata.IndexFieldNames.Contains(QueryFieldName.DocumentId) == false) { return(null, null); } var idsRetriever = new RetrieveDocumentIdsVisitor(resultsRetriever, query.Metadata, _context.Allocator); idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters); return(idsRetriever.Ids.OrderBy(x => x, SliceComparer.Instance).ToList(), idsRetriever.StartsWith); }
private List <Slice> ExtractIdsFromQuery(IndexQueryServerSide query) { if (string.IsNullOrWhiteSpace(query.Query)) { return(null); } if (query.Metadata.Query.Where == null) { return(null); } if (query.Metadata.IndexFieldNames.Contains(Constants.Documents.Indexing.Fields.DocumentIdFieldName) == false) { return(null); } var idsRetriever = new RetrieveDocumentIdsVisitor(query.Metadata, _context.Allocator); idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters); return(idsRetriever.Ids.OrderBy(x => x, SliceComparer.Instance).ToList()); }