Return-Path: Delivered-To: apmail-openjpa-commits-archive@www.apache.org Received: (qmail 95086 invoked from network); 14 Feb 2008 03:28:01 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 14 Feb 2008 03:28:01 -0000 Received: (qmail 50305 invoked by uid 500); 14 Feb 2008 03:27:55 -0000 Delivered-To: apmail-openjpa-commits-archive@openjpa.apache.org Received: (qmail 50294 invoked by uid 500); 14 Feb 2008 03:27:55 -0000 Mailing-List: contact commits-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list commits@openjpa.apache.org Received: (qmail 50285 invoked by uid 99); 14 Feb 2008 03:27:55 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Feb 2008 19:27:55 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Feb 2008 03:27:15 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B19D31A9832; Wed, 13 Feb 2008 19:27:35 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r627645 - in /openjpa/trunk/openjpa-slice/src: main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java test/java/org/apache/openjpa/slice/TestQuery.java Date: Thu, 14 Feb 2008 03:27:35 -0000 To: commits@openjpa.apache.org From: ppoddar@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080214032735.B19D31A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ppoddar Date: Wed Feb 13 19:27:26 2008 New Revision: 627645 URL: http://svn.apache.org/viewvc?rev=627645&view=rev Log: OPENJPA-551 Support Range Query Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java?rev=627645&r1=627644&r2=627645&view=diff ============================================================================== --- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java (original) +++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java Wed Feb 13 19:27:26 2008 @@ -34,6 +34,7 @@ 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 @@ 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) { Modified: openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java?rev=627645&r1=627644&r2=627645&view=diff ============================================================================== --- openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java (original) +++ openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java Wed Feb 13 19:27:26 2008 @@ -31,7 +31,7 @@ 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 @@ 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"; }