package org.zoodb.test.jdo.pole;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import org.junit.BeforeClass;
import org.junit.Test;
import org.zoodb.test.testutil.TestTools;
public class IskPubPerYear {
private static final int N = 100000;
private static final int YEARS = 50;
private static final int YEARS_MIN = 1940;
@BeforeClass
public static void beforeClass() {
TestTools.removeDb();
TestTools.createDb();
TestTools.defineSchema(ComplexHolder0.class, ComplexHolder1.class, ComplexHolder2.class);
TestTools.defineIndex(ComplexHolder0.class, "id", false);
}
@Test
public void testCountPerYear() {
populate();
PersistenceManager pm = TestTools.openPM();
pm.currentTransaction().begin();
int result = 0;
long t0 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
for (int i2 = 1945; i2 < 1980; i2+=5) {
Map<?,?> m = countPerYears(pm, (long)i2-5, (long)i2);
result += m.size();
}
}
long t1 = System.currentTimeMillis();
System.out.println("t=" + (t1-t0));
System.out.println("result=" + result);
pm.currentTransaction().commit();
TestTools.closePM();
}
private Map<Long, Long> countPerYears(PersistenceManager pm, Long startYear, Long endYear) {
Map<Long, Long> resultMap = new HashMap<>();
Query query = pm.newQuery(ComplexHolder0.class, "id == :year");
for (long year = startYear; year <= endYear; year++) {
long number = 0;
// for (Object o: (Collection<?>)query.execute((int)year)) {
// number++;
// }
//TODO .size()?!
number = ((Collection<?>)query.execute((int)year)).size();
if (number > 0) {
resultMap.put(year, number );
}
}
return resultMap;
}
private void populate() {
PersistenceManager pm = TestTools.openPM();
pm.currentTransaction().begin();
for (int i = 0; i < N; i++) {
ComplexHolder1 h = new ComplexHolder1();
h.setId(YEARS_MIN+i/YEARS);
pm.makePersistent(h);
ComplexHolder2 h2 = new ComplexHolder2();
h2.setId(YEARS_MIN+i/YEARS);
pm.makePersistent(h2);
}
pm.currentTransaction().commit();
TestTools.closePM();
}
}