/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q) { return executeSingleton(q, DEFAULT_BATCH_SIZE, true, true, true); }
/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q) { return executeSingleton(q, DEFAULT_BATCH_SIZE, true, true, true); }
/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q, int batchSize, boolean optimise, boolean explain, boolean prefetch) { if (tablesAltered.isEmpty()) { return super.executeSingleton(q, batchSize, optimise, explain, prefetch); } else { SingletonResults retval = new SingletonResults(q, this, getSequence( getComponentsForQuery(q))); if (batchSize != 0) { retval.setBatchSize(batchSize); } if (!optimise) { retval.setNoOptimise(); } if (!explain) { retval.setNoExplain(); } if (!prefetch) { retval.setNoPrefetch(); } retval.setImmutable(); //LOG.error("Results cache not used for " + q); return retval; } }
/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q, int batchSize, boolean optimise, boolean explain, boolean prefetch) { if (tablesAltered.isEmpty()) { return super.executeSingleton(q, batchSize, optimise, explain, prefetch); } else { SingletonResults retval = new SingletonResults(q, this, getSequence( getComponentsForQuery(q))); if (batchSize != 0) { retval.setBatchSize(batchSize); } if (!optimise) { retval.setNoOptimise(); } if (!explain) { retval.setNoExplain(); } if (!prefetch) { retval.setNoPrefetch(); } retval.setImmutable(); //LOG.error("Results cache not used for " + q); return retval; } }
Query q = new Query(); q.addToSelect(osb); SingletonResults r = os.executeSingleton(q); Assert.assertEquals(Collections.EMPTY_LIST, r); q = new Query(); r = os.executeSingleton(q); Assert.assertEquals(coll, r); q = new Query(); q.addToSelect(qc); q.setConstraint(new BagConstraint(qc, ConstraintOp.IN, osb)); r = os.executeSingleton(q); Assert.assertEquals(Arrays.asList(new Object[] {data.get("EmployeeA1"), data.get("EmployeeA2")}), r); ObjectStoreBag osb2 = storeDataWriter.createObjectStoreBag(); q = new Query(); q.addToSelect(osb2); r = os.executeSingleton(q); Assert.assertEquals(Arrays.asList(new Object[] {((Employee) data.get("EmployeeA1")).getId(), ((Employee) data.get("EmployeeA2")).getId()}), r);
@Test public void testLargeOffset() throws Exception { Query q = new Query(); QueryClass qc = new QueryClass(Address.class); q.addFrom(qc); q.addToSelect(qc); Query q2 = QueryCloner.cloneQuery(q); SingletonResults r = os.executeSingleton(q, 2, true, true, true); InterMineObject o = (InterMineObject) r.get(5); SqlGenerator.registerOffset(q2, 6, ((ObjectStoreInterMineImpl) os).getSchema(), ((ObjectStoreInterMineImpl) os).db, o.getId(), new HashMap()); SingletonResults r2 = os.executeSingleton(q2, 2, true, true, true); Query q3 = QueryCloner.cloneQuery(q); SqlGenerator.registerOffset(q3, 5, ((ObjectStoreInterMineImpl) os).getSchema(), ((ObjectStoreInterMineImpl) os).db, o.getId(), new HashMap()); SingletonResults r3 = new SingletonResults(q3, os, ObjectStore.SEQUENCE_IGNORE); r3.setBatchSize(2); Assert.assertTrue(r == r2); Assert.assertTrue(r != r3); Assert.assertTrue(r2 != r3); Assert.assertEquals(r, r2); Assert.assertTrue(!r.equals(r3)); }
@Test public void testLargeOffset2() throws Exception { Employee nullEmployee = new Employee(); nullEmployee.setAge(26); nullEmployee.setName(null); try { storeDataWriter.store(nullEmployee); Query q = new Query(); QueryClass qc = new QueryClass(Employee.class); q.addFrom(qc); q.addToSelect(qc); q.addToOrderBy(new QueryField(qc, "name")); Query q2 = QueryCloner.cloneQuery(q); SingletonResults r = os.executeSingleton(q, 2, true, true, true); Employee o = (Employee) r.get(2); SqlGenerator.registerOffset(q2, 3, ((ObjectStoreInterMineImpl) os).getSchema(), ((ObjectStoreInterMineImpl) os).db, o.getName(), new HashMap()); SingletonResults r2 = os.executeSingleton(q2, 2, true, true, true); Query q3 = QueryCloner.cloneQuery(q); SqlGenerator.registerOffset(q3, 2, ((ObjectStoreInterMineImpl) os).getSchema(), ((ObjectStoreInterMineImpl) os).db, o.getName(), new HashMap()); SingletonResults r3 = new SingletonResults(q3, os, ObjectStore.SEQUENCE_IGNORE); r3.setBatchSize(2); Assert.assertTrue(r == r2); Assert.assertTrue(r != r3); Assert.assertTrue(r2 != r3); Assert.assertEquals(r, r2); Assert.assertTrue(!r.equals(r3)); } finally { storeDataWriter.delete(nullEmployee); } }
Assert.assertTrue(r4.isSingleBatch()); Assert.assertEquals(new ArrayList<Object>(r1), new ArrayList<Object>(r4)); SingletonResults r5 = os.executeSingleton(q, 400, true, true, true); Assert.assertTrue(r1.getResultsBatches() != r5.getResultsBatches()); Assert.assertTrue(r5.isSingleBatch());