Skip to content

Commit 9c7b561

Browse files
committed
fix #78--isFirstPage and getPageNumber were calculating incorrectly
1 parent 1d8657d commit 9c7b561

File tree

3 files changed

+106
-3
lines changed

3 files changed

+106
-3
lines changed

src/main/java/com/marklogic/client/impl/BasicPage.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ public boolean hasPreviousPage() {
107107
}
108108

109109
public long getPageNumber() {
110-
return (long) Math.floor((double) start / (double) getPageSize()) + 1;
110+
double _start = (double) start;
111+
double _pageSize = (double) getPageSize();
112+
if ( _start % _pageSize == 0 ) return new Double(_start / _pageSize).longValue();
113+
else return (long) Math.floor(_start / _pageSize) + 1;
111114
}
112115

113116
public boolean isFirstPage() {

src/test/java/com/marklogic/client/test/BulkReadWriteTest.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import javax.xml.bind.JAXBException;
3030

3131
import static org.junit.Assert.assertEquals;
32+
import static org.junit.Assert.assertFalse;
3233
import static org.junit.Assert.assertNotNull;
3334
import static org.junit.Assert.assertTrue;
3435

@@ -60,9 +61,12 @@
6061
import com.marklogic.client.io.SearchHandle;
6162
import com.marklogic.client.io.StringHandle;
6263
import com.marklogic.client.query.DeleteQueryDefinition;
64+
import com.marklogic.client.query.MatchDocumentSummary;
6365
import com.marklogic.client.query.QueryDefinition;
6466
import com.marklogic.client.query.QueryManager;
67+
import com.marklogic.client.query.StringQueryDefinition;
6568
import com.marklogic.client.query.StructuredQueryBuilder;
69+
import com.marklogic.client.query.QueryManager.QueryView;
6670

6771
/** Loads data from cities15000.txt which contains every city above 15000 people, and adds
6872
* data from countryInfo.txt.
@@ -426,6 +430,84 @@ public void testF_DefaultMetadata() {
426430
}
427431
}
428432

433+
@Test
434+
public void test_78() {
435+
String DIRECTORY ="/test_78/";
436+
int BATCH_SIZE=10;
437+
int count =1;
438+
TextDocumentManager docMgr = Common.client.newTextDocumentManager();
439+
DocumentWriteSet writeset =docMgr.newWriteSet();
440+
for(int i =0;i<11;i++){
441+
writeset.add(DIRECTORY+"Textfoo"+i+".txt", new StringHandle().with("bar can be foo"+i));
442+
if(count%BATCH_SIZE == 0){
443+
docMgr.write(writeset);
444+
writeset = docMgr.newWriteSet();
445+
}
446+
count++;
447+
}
448+
if(count%BATCH_SIZE > 0){
449+
docMgr.write(writeset);
450+
}
451+
//using QueryManger for query definition and set the search criteria
452+
QueryManager queryMgr = Common.client.newQueryManager();
453+
try {
454+
StringQueryDefinition qd = queryMgr.newStringDefinition();
455+
qd.setCriteria("bar");
456+
qd.setDirectory(DIRECTORY);
457+
// set document manager level settings for search response
458+
System.out.println("Default Page length setting on docMgr :"+docMgr.getPageLength());
459+
docMgr.setPageLength(1);
460+
docMgr.setSearchView(QueryView.RESULTS);
461+
docMgr.setNonDocumentFormat(Format.XML);
462+
assertEquals("format set on document manager","XML",docMgr.getNonDocumentFormat().toString());
463+
assertEquals("Queryview set on document manager ","RESULTS" ,docMgr.getSearchView().toString());
464+
assertEquals("Page length ",1,docMgr.getPageLength());
465+
// Search for documents where content has bar and get first result record, get search handle on it
466+
SearchHandle sh = new SearchHandle();
467+
DocumentPage page= docMgr.search(qd, 1);
468+
// test for page methods
469+
assertEquals("Number of records",1,page.size());
470+
assertEquals("Starting record in first page ",1,page.getStart());
471+
assertEquals("Total number of estimated results:",11,page.getTotalSize());
472+
assertEquals("Total number of estimated pages :",11,page.getTotalPages());
473+
assertTrue("Is this First page :",page.isFirstPage());
474+
assertFalse("Is this Last page :",page.isLastPage());
475+
assertTrue("Is this First page has content:",page.hasContent());
476+
assertFalse("Is first page has previous page ?",page.hasPreviousPage());
477+
//
478+
long start=1;
479+
do{
480+
count=0;
481+
page = docMgr.search(qd, start,sh);
482+
if(start >1){
483+
assertFalse("Is this first Page", page.isFirstPage());
484+
assertTrue("Is page has previous page ?",page.hasPreviousPage());
485+
}
486+
while(page.hasNext()){
487+
page.next();
488+
count++;
489+
}
490+
MatchDocumentSummary[] mds= sh.getMatchResults();
491+
assertEquals("Matched document count",1,mds.length);
492+
//since we set the query view to get only results, facet count supposed be 0
493+
assertEquals("Matched Facet count",0,sh.getFacetNames().length);
494+
495+
assertEquals("document count", page.size(),count);
496+
if (!page.isLastPage()) start = start + page.getPageSize();
497+
}while(!page.isLastPage());
498+
assertEquals("page count is 11 ",start, page.getTotalPages());
499+
assertTrue("Page has previous page ?",page.hasPreviousPage());
500+
assertEquals("page size", 1,page.getPageSize());
501+
assertEquals("document count", 11,page.getTotalSize());
502+
page= docMgr.search(qd, 12);
503+
assertFalse("Page has any records ?",page.hasContent());
504+
} finally {
505+
DeleteQueryDefinition deleteQuery = queryMgr.newDeleteDefinition();
506+
deleteQuery.setDirectory(DIRECTORY);
507+
queryMgr.delete(deleteQuery);
508+
}
509+
}
510+
429511
@Test
430512
public void test_171() throws Exception{
431513
DatabaseClient client = DatabaseClientFactory.newClient(

src/test/java/com/marklogic/client/test/PageTest.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@ public void testTestPage() {
4646
assertEquals("Unexpected isFirstPage", true, page.isFirstPage());
4747
assertEquals("Unexpected isLastPage", false, page.isLastPage());
4848

49+
page = new TestPage(iterator, 1, 1, 100);
50+
assertEquals("Unexpected size", 1, page.size());
51+
assertEquals("Unexpected totalPages", 100, page.getTotalPages());
52+
assertEquals("Unexpected hasContent", true, page.hasContent());
53+
assertEquals("Unexpected hasNextPage", true, page.hasNextPage());
54+
assertEquals("Unexpected pageNumber", 1, page.getPageNumber());
55+
assertEquals("Unexpected isFirstPage", true, page.isFirstPage());
56+
assertEquals("Unexpected isLastPage", false, page.isLastPage());
57+
4958
page = new TestPage(iterator, 2, 10, 100);
5059
assertEquals("Unexpected size", 10, page.size());
5160
assertEquals("Unexpected totalPages", 10, page.getTotalPages());
@@ -60,8 +69,8 @@ public void testTestPage() {
6069
assertEquals("Unexpected totalPages", 10, page.getTotalPages());
6170
assertEquals("Unexpected hasContent", true, page.hasContent());
6271
assertEquals("Unexpected hasNextPage", true, page.hasNextPage());
63-
assertEquals("Unexpected pageNumber", 2, page.getPageNumber());
64-
assertEquals("Unexpected isFirstPage", false, page.isFirstPage());
72+
assertEquals("Unexpected pageNumber", 1, page.getPageNumber());
73+
assertEquals("Unexpected isFirstPage", true, page.isFirstPage());
6574
assertEquals("Unexpected isLastPage", false, page.isLastPage());
6675

6776
page = new TestPage(iterator, 12, 10, 100);
@@ -73,6 +82,15 @@ public void testTestPage() {
7382
assertEquals("Unexpected isFirstPage", false, page.isFirstPage());
7483
assertEquals("Unexpected isLastPage", false, page.isLastPage());
7584

85+
page = new TestPage(iterator, 20, 20, 100);
86+
assertEquals("Unexpected size", 20, page.size());
87+
assertEquals("Unexpected totalPages", 5, page.getTotalPages());
88+
assertEquals("Unexpected hasContent", true, page.hasContent());
89+
assertEquals("Unexpected hasNextPage", true, page.hasNextPage());
90+
assertEquals("Unexpected pageNumber", 1, page.getPageNumber());
91+
assertEquals("Unexpected isFirstPage", true, page.isFirstPage());
92+
assertEquals("Unexpected isLastPage", false, page.isLastPage());
93+
7694
page = new TestPage(iterator, 22, 20, 100);
7795
assertEquals("Unexpected size", 20, page.size());
7896
assertEquals("Unexpected totalPages", 5, page.getTotalPages());

0 commit comments

Comments
 (0)