private Tuple<IEnumerable<EntityDocument>,int> FindEntities(Lazy<WAHBitArray> plan, Page page, out int entitiesTotalCount) { IDocumentIndex entityIndexes = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.Entity); IEnumerable<EntityDocument> found = entityIndexes.Find<EntityDocument>(plan, page.Number, page.Size, 0, out entitiesTotalCount); var lastDocument = entityIndexes.GetLastDocument<EntityDocument>(); return Tuple.Create(found, lastDocument != null ? int.Parse(lastDocument.FileName) : 0); }
private Tuple<IEnumerable<hOOt.Document>,int> FindComments(Lazy<WAHBitArray> plan, Page page, IEnumerable<EntityDocument> entityDocuments, int entitiesTotalCount, out int commentsTotalCount) { var commentIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.Comment); if (entityDocuments.Count() == page.Size) { commentIndex.Find<hOOt.Document>(plan, -1, -1, 0, out commentsTotalCount); return Tuple.Create(Enumerable.Empty<hOOt.Document>(), 0); } Page newPage = CalculatePage(entitiesTotalCount, page.Number, page.Size); IEnumerable<hOOt.Document> found = commentIndex.Find<hOOt.Document>(plan, newPage.Number, newPage.Size, newPage.PositionWithin, out commentsTotalCount); var lastDocument = commentIndex.GetLastDocument<hOOt.Document>(); return Tuple.Create(found, lastDocument != null ? int.Parse(lastDocument.FileName) : 0); }
public QueryRunResult Run(QueryPlan plan, Page page) { int entitiesTotalCount = 0; int commentsTotalCount = 0; var entityDocuments = plan.EntityPlan.HasValue ? FindEntities(plan.EntityPlan.Value, page, out entitiesTotalCount) : Tuple.Create(Enumerable.Empty<EntityDocument>(),0); var commentDocuments = plan.CommentPlan.HasValue ? FindComments(plan.CommentPlan.Value, page, entityDocuments.Item1, entitiesTotalCount, out commentsTotalCount) : Tuple.Create(Enumerable.Empty<hOOt.Document>(), 0); return new QueryRunResult { Entities = entityDocuments.Item1, Comments = commentDocuments.Item1, EntitiesTotalCount = entitiesTotalCount, CommentsTotalCount = commentsTotalCount, LastIndexedEntityId = entityDocuments.Item2, LastIndexedCommentId = commentDocuments.Item2 }; }