@Test public void testCase2() throws ODKDatastoreException { CallingContext cc = TestContextFactory.getCallingContext(); Datastore ds = cc.getDatastore(); User user = cc.getCurrentUser(); MyRelation rel = MyRelation.assertRelation(cc); Query query = ds.createQuery(rel, "QueryResultTest.testCase2", user); query.addFilter(MyRelation.fieldInt, FilterOperation.GREATER_THAN, SET_SIZE - 2); query.addSort(MyRelation.fieldDate, Direction.ASCENDING); query.addSort(MyRelation.fieldDbl, Direction.DESCENDING); Set<String> pkSet = new HashSet<String>(); int len = 0; QueryResult result = query.executeQuery(null, 10); len += result.getResultList().size(); assertEquals(true, result.hasMoreResults()); assertEquals(10, result.getResultList().size()); for (CommonFieldsBase cb : result.getResultList()) { assertEquals(false, pkSet.contains(cb.getUri())); pkSet.add(cb.getUri()); ((MyRelation) cb).print(); } boolean done = false; QueryResumePoint startCursor = result.getResumeCursor(); while (!done) { System.out.println("Issuing follow-up query"); result = query.executeQuery(startCursor, 20); len += result.getResultList().size(); startCursor = result.getResumeCursor(); done = !result.hasMoreResults(); for (CommonFieldsBase cb : result.getResultList()) { assertEquals(false, pkSet.contains(cb.getUri())); pkSet.add(cb.getUri()); ((MyRelation) cb).print(); } } assertEquals(false, result.hasMoreResults()); assertEquals(2 * values.length, len); System.out.println("done with testCase2"); }
@Test public void testCase3() throws ODKDatastoreException { CallingContext cc = TestContextFactory.getCallingContext(); Datastore ds = cc.getDatastore(); User user = cc.getCurrentUser(); MyRelation rel = MyRelation.assertRelation(cc); System.out.println("start testCase3"); Query query = ds.createQuery(rel, "QueryResultTest.testCase3(1st)", user); query.addFilter(MyRelation.fieldDbl, FilterOperation.EQUAL, new BigDecimal("0.9")); query.addFilter(MyRelation.fieldBool, FilterOperation.EQUAL, true); query.addSort(MyRelation.fieldInt, Direction.ASCENDING); query.addSort(MyRelation.fieldDate, Direction.DESCENDING); Query backquery = ds.createQuery(rel, "QueryResultTest.testCase3(2nd)", user); backquery.addFilter(MyRelation.fieldDbl, FilterOperation.EQUAL, new BigDecimal("0.9")); backquery.addFilter(MyRelation.fieldBool, FilterOperation.EQUAL, true); backquery.addSort(MyRelation.fieldInt, Direction.DESCENDING); backquery.addSort(MyRelation.fieldDate, Direction.ASCENDING); Set<String> pkTotalSet = new HashSet<String>(); List<String> pkOrdering = new ArrayList<String>(); int TOTAL_SIZE = 3 * SET_SIZE; int fetchSizes[] = {1, 2, 1021, 303, 101, 2831}; int idxFetch = 4; int len = 0; QueryResult result = query.executeQuery(null, fetchSizes[idxFetch]); len += result.getResultList().size(); assertEquals(true, result.hasMoreResults()); assertEquals(fetchSizes[idxFetch], result.getResultList().size()); System.out.println("Accumulating forward query results"); for (CommonFieldsBase cb : result.getResultList()) { assertEquals(false, pkOrdering.contains(cb.getUri())); assertEquals(false, pkTotalSet.contains(cb.getUri())); pkOrdering.add(cb.getUri()); pkTotalSet.add(cb.getUri()); ((MyRelation) cb).print(); } System.out.println("Verifying initial backward query is empty"); QueryResult backResult = backquery.executeQuery(result.getBackwardCursor(), pkOrdering.size()); assertEquals(false, backResult.hasMoreResults()); assertEquals(0, backResult.getResultList().size()); boolean notFirst = false; boolean done = false; QueryResumePoint startCursor = result.getResumeCursor(); while (!done) { idxFetch = (idxFetch + 1) % fetchSizes.length; System.out.println("Issuing follow-up query"); result = query.executeQuery(startCursor, fetchSizes[idxFetch]); len += result.getResultList().size(); startCursor = result.getResumeCursor(); done = !result.hasMoreResults(); System.out.println("Verifying backward query against ordering of earlier result"); backResult = backquery.executeQuery(result.getBackwardCursor(), pkOrdering.size()); assertEquals(notFirst, backResult.hasMoreResults()); notFirst = true; assertEquals(pkOrdering.size(), backResult.getResultList().size()); for (int i = 0; i < pkOrdering.size(); ++i) { CommonFieldsBase cb = backResult.getResultList().get(i); ((MyRelation) cb).print(); assertEquals(pkOrdering.get(pkOrdering.size() - i - 1), cb.getUri()); } System.out.println("Accumulating forward query results"); pkOrdering.clear(); for (CommonFieldsBase cb : result.getResultList()) { assertEquals(false, pkOrdering.contains(cb.getUri())); assertEquals(false, pkTotalSet.contains(cb.getUri())); pkOrdering.add(cb.getUri()); pkTotalSet.add(cb.getUri()); ((MyRelation) cb).print(); } } idxFetch = (idxFetch + 1) % fetchSizes.length; System.out.println("Before Issuing (what should be empty) follow-up query"); result = query.executeQuery(startCursor, fetchSizes[idxFetch]); len += result.getResultList().size(); startCursor = result.getResumeCursor(); done = !result.hasMoreResults(); System.out.println("Verifying backward query against ordering of earlier result"); // backquery should match existing data backResult = backquery.executeQuery(result.getBackwardCursor(), pkOrdering.size()); assertEquals(true, backResult.hasMoreResults()); assertEquals(pkOrdering.size(), backResult.getResultList().size()); for (int i = 0; i < pkOrdering.size(); ++i) { CommonFieldsBase cb = backResult.getResultList().get(i); ((MyRelation) cb).print(); assertEquals(pkOrdering.get(pkOrdering.size() - i - 1), cb.getUri()); } assertEquals(false, result.hasMoreResults()); assertEquals(0, result.getResultList().size()); idxFetch = (idxFetch + 1) % fetchSizes.length; System.out.println("Before Re-Issuing (what should be empty) follow-up query"); // this should be an empty list result = query.executeQuery(startCursor, fetchSizes[idxFetch]); assertEquals(false, result.hasMoreResults()); assertEquals(0, result.getResultList().size()); System.out.println("Verifying backward query (again) against ordering of earlier result"); // backquery should match existing data backResult = backquery.executeQuery(result.getBackwardCursor(), pkOrdering.size()); assertEquals(true, backResult.hasMoreResults()); assertEquals(pkOrdering.size(), backResult.getResultList().size()); for (int i = 0; i < pkOrdering.size(); ++i) { CommonFieldsBase cb = backResult.getResultList().get(i); ((MyRelation) cb).print(); assertEquals(pkOrdering.get(pkOrdering.size() - i - 1), cb.getUri()); } assertEquals(TOTAL_SIZE, len); }