package siena.base.test; import java.util.Iterator; import java.util.List; import siena.Query; import siena.SienaException; import siena.base.test.model.DiscoveryStringId; public abstract class BaseTestNoAutoInc_9_FETCH_ITER_PAGINATE extends BaseTestNoAutoInc_BASE { public void testLimitStateless(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateless().order("name"); List<DiscoveryStringId> res = query.limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.fetch(50); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.paginate(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } } public void testLimitStateful(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.fetch(50); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } res = query.paginate(50).fetch(25); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+100], res.get(i)); } } public void testOffsetStateless(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.offset(50).fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testOffsetStateful(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.offset(50).fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testOffsetLimitStateless(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.offset(50).limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testOffsetLimitStateful(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.offset(50).limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testOffsetLimitStatelessPaginate(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.paginate(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } res = query.limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.offset(50).fetch(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50], res.get(i)); } res = query.offset(50).limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } } public void testOffsetLimitStatefulPaginate(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name").stateful(); List<DiscoveryStringId> res = query.paginate(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } res = query.limit(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50], res.get(i)); } res = query.offset(50).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+150], res.get(i)); } res = query.offset(50).limit(25).fetch(); assertEquals(25, res.size()); for(int i=0; i<25; i++){ assertEquals(discs[i+250], res.get(i)); } try { res = query.previousPage().fetch(); }catch(SienaException ex){ return; } fail(); } public void testOffsetLimitStatelessPaginate2(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.limit(50).offset(12).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+12], res.get(i)); } res = query.offset(13).limit(30).fetch(); assertEquals(30, res.size()); for(int i=0; i<30; i++){ assertEquals(discs[i+13], res.get(i)); } res = query.offset(10).limit(30).fetch(15); assertEquals(15, res.size()); for(int i=0; i<15; i++){ assertEquals(discs[i+10], res.get(i)); } res = query.paginate(6).fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+6], res.get(i)); } res = query.nextPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+12], res.get(i)); } res = query.previousPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+6], res.get(i)); } res = query.offset(10).fetch(10); assertEquals(10, res.size()); for(int i=0; i<10; i++){ assertEquals(discs[i+10], res.get(i)); } try { res = query.nextPage().fetch(); }catch(SienaException ex){ res = query.paginate(8).fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+8], res.get(i)); } return; } fail(); } public void testOffsetLimitStatefulPaginate2(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name").stateful(); List<DiscoveryStringId> res = query.limit(50).offset(12).fetch(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+12], res.get(i)); } res = query.offset(13).limit(30).fetch(); assertEquals(30, res.size()); for(int i=0; i<30; i++){ assertEquals(discs[i+75], res.get(i)); } res = query.offset(10).limit(30).fetch(15); assertEquals(15, res.size()); for(int i=0; i<15; i++){ assertEquals(discs[i+115], res.get(i)); } res = query.paginate(6).fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+130], res.get(i)); } res = query.nextPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+136], res.get(i)); } res = query.nextPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+142], res.get(i)); } res = query.previousPage().fetch(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+136], res.get(i)); } res = query.offset(10).fetch(10); assertEquals(10, res.size()); for(int i=0; i<10; i++){ assertEquals(discs[i+146], res.get(i)); } try { res = query.nextPage().fetch(); }catch(SienaException ex){ res = query.paginate(8).fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+156], res.get(i)); } res = query.nextPage().fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+164], res.get(i)); } } } public void testFetchPaginateStatelessTwice() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).paginate(5).order("name"); List<DiscoveryStringId> res = query.fetch(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i+5], res.get(i)); } res = query.paginate(8).fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(7, res.size()); for(int i=0; i<7; i++){ assertEquals(discs[i+8], res.get(i)); } } public void testFetchPaginateStatefulTwice() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().paginate(5).order("name"); List<DiscoveryStringId> res = query.fetch(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i], res.get(i)); } res = query.nextPage().fetch(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i+5], res.get(i)); } res = query.paginate(8).fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+5], res.get(i)); } res = query.nextPage().fetch(); assertEquals(2, res.size()); for(int i=0; i<2; i++){ assertEquals(discs[i+13], res.get(i)); } } public void testLimitStatelessKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateless().order("name"); List<DiscoveryStringId> res = query.limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.fetchKeys(50); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testLimitStatefulKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.fetchKeys(50); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(50).fetchKeys(25); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+100].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetStatelessKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.offset(50).fetchKeys(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetStatefulKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.offset(50).fetchKeys(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetLimitStatelessKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.offset(50).limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetLimitStatefulKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); List<DiscoveryStringId> res = query.offset(50).limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetLimitStatelessPaginateKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.paginate(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(50).fetchKeys(); assertEquals(100, res.size()); for(int i=0; i<100; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(50).limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testOffsetLimitStatefulPaginateKeys(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name").stateful(); List<DiscoveryStringId> res = query.paginate(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.limit(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+50].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(50).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+150].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(50).limit(25).fetchKeys(); assertEquals(25, res.size()); for(int i=0; i<25; i++){ assertEquals(discs[i+250].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } try { res = query.previousPage().fetch(); }catch(SienaException ex){ return; } fail(); } public void testOffsetLimitStatelessPaginate2Keys(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); List<DiscoveryStringId> res = query.limit(50).offset(12).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+12].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(13).limit(30).fetchKeys(); assertEquals(30, res.size()); for(int i=0; i<30; i++){ assertEquals(discs[i+13].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(10).limit(30).fetchKeys(15); assertEquals(15, res.size()); for(int i=0; i<15; i++){ assertEquals(discs[i+10].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(6).fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+6].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+12].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.previousPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+6].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(10).fetchKeys(10); assertEquals(10, res.size()); for(int i=0; i<10; i++){ assertEquals(discs[i+10].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } try { res = query.nextPage().fetchKeys(); }catch(SienaException ex){ res = query.paginate(8).fetch(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i].name, res.get(i).name); } res = query.nextPage().fetchKeys(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+8].name, res.get(i).name); } } } public void testOffsetLimitStatefulPaginate2Keys(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name").stateful(); List<DiscoveryStringId> res = query.limit(50).offset(12).fetchKeys(); assertEquals(50, res.size()); for(int i=0; i<50; i++){ assertEquals(discs[i+12].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(13).limit(30).fetchKeys(); assertEquals(30, res.size()); for(int i=0; i<30; i++){ assertEquals(discs[i+75].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(10).limit(30).fetchKeys(15); assertEquals(15, res.size()); for(int i=0; i<15; i++){ assertEquals(discs[i+115].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(6).fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+130].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+136].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+142].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.previousPage().fetchKeys(); assertEquals(6, res.size()); for(int i=0; i<6; i++){ assertEquals(discs[i+136].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.offset(10).fetchKeys(10); assertEquals(10, res.size()); for(int i=0; i<10; i++){ assertEquals(discs[i+146].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } try { res = query.nextPage().fetchKeys(); }catch(SienaException ex){ res = query.paginate(8).fetchKeys(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+156].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+164].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } } public void testFetchPaginateStatelessTwiceKeys() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).paginate(5).order("name"); List<DiscoveryStringId> res = query.fetchKeys(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i+5].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(8).fetchKeys(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(7, res.size()); for(int i=0; i<7; i++){ assertEquals(discs[i+8].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testFetchPaginateStatefulTwiceKeys() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().paginate(5).order("name"); List<DiscoveryStringId> res = query.fetchKeys(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(5, res.size()); for(int i=0; i<5; i++){ assertEquals(discs[i+5].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.paginate(8).fetchKeys(); assertEquals(8, res.size()); for(int i=0; i<8; i++){ assertEquals(discs[i+5].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } res = query.nextPage().fetchKeys(); assertEquals(2, res.size()); for(int i=0; i<2; i++){ assertEquals(discs[i+13].name, res.get(i).name); assertTrue(res.get(i).isOnlyIdFilled()); } } public void testLimitStatelessIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateless().order("name"); Iterable<DiscoveryStringId> iter = query.limit(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.limit(50).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.iter(50); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.paginate(50).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); } public void testLimitStatefulIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.limit(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.iter(50); it = iter.iterator(); i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); iter = query.paginate(50).iter(25); it = iter.iterator(); i=100; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(150, i); } public void testOffsetStatelessIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.offset(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(150, i); } public void testOffsetStatefulIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.offset(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(150, i); } public void testOffsetLimitStatelessIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.offset(50).limit(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); } public void testOffsetLimitStatefulIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.offset(50).limit(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); } public void testOffsetLimitStatelessPaginateIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[150]; for(int i=0; i<150; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.paginate(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.nextPage().iter(); it = iter.iterator(); while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); iter = query.limit(50).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.offset(50).iter(); it = iter.iterator(); i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(150, i); iter = query.offset(50).limit(50).iter(); it = iter.iterator(); i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); } public void testOffsetLimitStatefulPaginateIter(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.paginate(50).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(50, i); iter = query.nextPage().iter(); it = iter.iterator(); while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); iter = query.limit(50).iter(); it = iter.iterator(); i=50; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(100, i); iter = query.offset(50).iter(); it = iter.iterator(); i=150; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(200, i); iter = query.offset(50).limit(25).iter(); it = iter.iterator(); i=250; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(275, i); try { iter = query.previousPage().iter(); }catch(SienaException ex){ return; } fail(); } public void testOffsetLimitStatelessPaginate2Iter(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.limit(50).offset(12).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=12; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(62, i); iter = query.offset(13).limit(30).iter(); it = iter.iterator(); i=13; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(43, i); iter = query.offset(10).limit(30).iter(15); it = iter.iterator(); i=10; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(25, i); iter = query.paginate(6).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(6, i); iter = query.nextPage().iter(); it = iter.iterator(); i=6; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(12, i); iter = query.nextPage().iter(); it = iter.iterator(); i=12; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(18, i); iter = query.previousPage().iter(); it = iter.iterator(); i=6; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(12, i); iter = query.offset(10).iter(10); it = iter.iterator(); i=10; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(20, i); try { iter = query.nextPage().iter(); }catch(SienaException ex){ iter = query.paginate(8).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(8, i); iter = query.nextPage().iter(); it = iter.iterator(); i=8; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(16, i); return; } fail(); } public void testOffsetLimitStatefulPaginate2Iter(){ DiscoveryStringId[] discs = new DiscoveryStringId[300]; for(int i=0; i<300; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.limit(50).offset(12).iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=12; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(62, i); iter = query.offset(13).limit(30).iter(); it = iter.iterator(); i=75; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(105, i); iter = query.offset(10).limit(30).iter(15); it = iter.iterator(); i=115; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(130, i); iter = query.paginate(6).iter(); it = iter.iterator(); i=130; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(136, i); iter = query.nextPage().iter(); it = iter.iterator(); i=136; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(142, i); iter = query.nextPage().iter(); it = iter.iterator(); i=142; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(148, i); iter = query.previousPage().iter(); it = iter.iterator(); i=136; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(142, i); iter = query.offset(10).iter(10); it = iter.iterator(); i=146; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(156, i); try { iter = query.nextPage().iter(); }catch(SienaException ex){ iter = query.paginate(8).iter(); it = iter.iterator(); i=156; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(164, i); iter = query.nextPage().iter(); it = iter.iterator(); i=164; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(172, i); return; } fail(); } public void testFetchPaginateStatelessTwiceIter() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).paginate(5).order("name"); Iterable<DiscoveryStringId> iter = query.iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(5, i); iter = query.nextPage().iter(); it = iter.iterator(); i=5; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(10, i); iter = query.paginate(8).iter(); it = iter.iterator(); i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(8, i); iter = query.nextPage().iter(); it = iter.iterator(); i=8; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(15, i); } public void testFetchPaginateStatefulTwiceIter() { DiscoveryStringId[] discs = new DiscoveryStringId[15]; for(int i=0; i<15; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().paginate(5).order("name"); Iterable<DiscoveryStringId> iter = query.iter(); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(5, i); iter = query.nextPage().iter(); it = iter.iterator(); i=5; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(10, i); iter = query.paginate(8).iter(); it = iter.iterator(); i=5; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(13, i); iter = query.nextPage().iter(); it = iter.iterator(); i=13; while(it.hasNext()){ DiscoveryStringId disc = it.next(); assertEquals(discs[i++], disc); } assertEquals(15, i); } public void testIterPerPageStateless(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.iterPerPage(50); int i=0; for(DiscoveryStringId disc: iter){ assertEquals(discs[i++], disc); } assertEquals(500, i); } public void testIterPerPageStateless2(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.iterPerPage(50); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ assertEquals(discs[i++], it.next()); } assertEquals(500, i); } public void testIterPerPageStateless3(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).order("name"); Iterable<DiscoveryStringId> iter = query.offset(25).iterPerPage(50); Iterator<DiscoveryStringId> it = iter.iterator(); int i=25; while(it.hasNext()){ assertEquals(discs[i++], it.next()); } assertEquals(500, i); } public void testIterPerPageStateful(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.iterPerPage(50); int i=0; for(DiscoveryStringId disc: iter){ assertEquals(discs[i++], disc); } assertEquals(500, i); } public void testIterPerPageStateful2(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.iterPerPage(50); Iterator<DiscoveryStringId> it = iter.iterator(); int i=0; while(it.hasNext()){ assertEquals(discs[i++], it.next()); } assertEquals(500, i); } public void testIterPerPageStatefull3(){ DiscoveryStringId[] discs = new DiscoveryStringId[500]; for(int i=0; i<500; i++){ discs[i] = new DiscoveryStringId("Disc_"+String.format("%03d", i), StringID_CURIE); } pm.insert((Object[])discs); Query<DiscoveryStringId> query = pm.createQuery(DiscoveryStringId.class).stateful().order("name"); Iterable<DiscoveryStringId> iter = query.offset(25).iterPerPage(50); Iterator<DiscoveryStringId> it = iter.iterator(); int i=25; while(it.hasNext()){ assertEquals(discs[i++], it.next()); } assertEquals(500, i); } }