From ca00c683021d1ed609b5f542b072f7f666f42397 Mon Sep 17 00:00:00 2001 From: Vesa Martilla Date: Wed, 24 Mar 2010 13:09:04 +0000 Subject: [PATCH] Fixed LuceneQuery.listResults, had a logic bug in which totalCount wasn't all of the matched documents, but just the amount of documents matching the limit. Also as a slight optimization lists initialized to resulting size in initialization. --- .../main/java/com/mysema/query/search/LuceneQuery.java | 9 +++++---- .../java/com/mysema/query/search/LuceneQueryTest.java | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/querydsl-lucene/src/main/java/com/mysema/query/search/LuceneQuery.java b/querydsl-lucene/src/main/java/com/mysema/query/search/LuceneQuery.java index e4d1b9e35..652c7159e 100644 --- a/querydsl-lucene/src/main/java/com/mysema/query/search/LuceneQuery.java +++ b/querydsl-lucene/src/main/java/com/mysema/query/search/LuceneQuery.java @@ -113,9 +113,10 @@ public class LuceneQuery implements SimpleQuery, SimpleProjectable< return listSorted(orderBys, limit, offset); } - List documents = new ArrayList(); // TODO : initialize List with proper size + List documents = null; try { ScoreDoc[] scoreDocs = searcher.search(createQuery(), limit + offset).scoreDocs; + documents = new ArrayList(scoreDocs.length - offset); for (int i = offset; i < scoreDocs.length; ++i) { documents.add(searcher.doc(scoreDocs[i].doc)); } @@ -126,7 +127,6 @@ public class LuceneQuery implements SimpleQuery, SimpleProjectable< } private List listSorted(List> orderBys, int limit, int offset) { - List documents = new ArrayList(); // TODO : initialize List with proper size List sortFields = new ArrayList(orderBys.size()); for (OrderSpecifier orderSpecifier : orderBys) { if (!(orderSpecifier.getTarget() instanceof Path)) { @@ -136,8 +136,10 @@ public class LuceneQuery implements SimpleQuery, SimpleProjectable< } Sort sort = new Sort(); sort.setSort(sortFields.toArray(new SortField[sortFields.size()])); + List documents = null; try { ScoreDoc[] scoreDocs = searcher.search(createQuery(), null, limit + offset, sort).scoreDocs; + documents = new ArrayList(scoreDocs.length - offset); for (int i = offset; i < scoreDocs.length; ++i) { documents.add(searcher.doc(scoreDocs[i].doc)); } @@ -159,9 +161,8 @@ public class LuceneQuery implements SimpleQuery, SimpleProjectable< @Override public SearchResults listResults() { - // FIXME : SearchResults.total is number of total results, not amount of documents in paged view List documents = list(); - return new SearchResults(documents, queryMixin.getMetadata().getModifiers(), documents.size()); + return new SearchResults(documents, queryMixin.getMetadata().getModifiers(), count()); } @Override diff --git a/querydsl-lucene/src/test/java/com/mysema/query/search/LuceneQueryTest.java b/querydsl-lucene/src/test/java/com/mysema/query/search/LuceneQueryTest.java index e51080259..5fe8f9856 100644 --- a/querydsl-lucene/src/test/java/com/mysema/query/search/LuceneQueryTest.java +++ b/querydsl-lucene/src/test/java/com/mysema/query/search/LuceneQueryTest.java @@ -267,7 +267,7 @@ public class LuceneQueryTest { assertEquals("1990", results.getResults().get(1).get("year")); assertEquals(2, results.getLimit()); assertEquals(1, results.getOffset()); - assertEquals(2, results.getTotal()); + assertEquals(4, results.getTotal()); } @Test @@ -280,7 +280,7 @@ public class LuceneQueryTest { assertEquals("1954", results.getResults().get(0).get("year")); assertEquals(1, results.getLimit()); assertEquals(1, results.getOffset()); - assertEquals(1, results.getTotal()); + assertEquals(4, results.getTotal()); } @Test(expected = IllegalArgumentException.class)