mirror of
https://github.com/apache/openjpa.git
synced 2025-02-23 19:05:00 +00:00
OPENJPA-551 Support Range Query
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@627645 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
763fd3e5a3
commit
68f25ced84
@ -34,6 +34,7 @@ import org.apache.openjpa.kernel.QueryContext;
|
||||
import org.apache.openjpa.kernel.StoreQuery;
|
||||
import org.apache.openjpa.kernel.exps.ExpressionParser;
|
||||
import org.apache.openjpa.lib.rop.MergedResultObjectProvider;
|
||||
import org.apache.openjpa.lib.rop.RangeResultObjectProvider;
|
||||
import org.apache.openjpa.lib.rop.ResultObjectProvider;
|
||||
import org.apache.openjpa.meta.ClassMetaData;
|
||||
import org.apache.openjpa.util.StoreException;
|
||||
@ -135,16 +136,23 @@ class DistributedStoreQuery extends JDBCStoreQuery {
|
||||
boolean[] ascending = getAscending(q);
|
||||
boolean isAscending = ascending.length > 0;
|
||||
boolean isUnique = q.getContext().isUnique();
|
||||
boolean hasRange = q.getContext().getEndRange() != Long.MAX_VALUE;
|
||||
ResultObjectProvider result = null;
|
||||
if (isUnique) {
|
||||
return new UniqueResultObjectProvider(tmp, q,
|
||||
result = new UniqueResultObjectProvider(tmp, q,
|
||||
getQueryExpressions());
|
||||
}
|
||||
if (isAscending) {
|
||||
return new OrderingMergedResultObjectProvider(tmp, ascending,
|
||||
} else if (isAscending) {
|
||||
result = new OrderingMergedResultObjectProvider(tmp, ascending,
|
||||
(Executor[])executors.toArray(new Executor[executors.size()]),
|
||||
q, params);
|
||||
} else {
|
||||
result = new MergedResultObjectProvider(tmp);
|
||||
}
|
||||
return new MergedResultObjectProvider(tmp);
|
||||
if (hasRange)
|
||||
result = new RangeResultObjectProvider(result,
|
||||
q.getContext().getStartRange(),
|
||||
q.getContext().getEndRange());
|
||||
return result;
|
||||
}
|
||||
|
||||
public Number executeDelete(StoreQuery q, Object[] params) {
|
||||
|
@ -31,7 +31,7 @@ public class TestQuery extends SliceTestCase {
|
||||
EntityManager em = emf.createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
long id = System.currentTimeMillis();
|
||||
for (int i=0;i<0;i++) {
|
||||
for (int i=0;i<10;i++) {
|
||||
PObject pc = new PObject(id++);
|
||||
pc.setValue(i);
|
||||
em.persist(pc);
|
||||
@ -65,6 +65,24 @@ public class TestQuery extends SliceTestCase {
|
||||
for (Object r:result)
|
||||
System.err.println(r);
|
||||
}
|
||||
|
||||
public void testSetMaxResult() {
|
||||
EntityManager em = emf.createEntityManager();
|
||||
int limit = 3;
|
||||
em.getTransaction().begin();
|
||||
List result = em.createQuery("SELECT p.value,p FROM PObject p ORDER BY p.value ASC")
|
||||
.setMaxResults(limit).getResultList();
|
||||
int i = 0;
|
||||
for (Object row:result) {
|
||||
Object[] line = (Object[])row;
|
||||
int value = ((Integer)line[0]).intValue();
|
||||
PObject pc = (PObject)line[1];
|
||||
System.err.println(++i + "." + SlicePersistence.getSlice(pc) + ":" + pc.getId() + "," + pc.getValue());
|
||||
}
|
||||
em.getTransaction().rollback();
|
||||
assertEquals(limit, result.size());
|
||||
}
|
||||
|
||||
protected String getPersistenceUnitName() {
|
||||
return "ordering";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user