Return-Path: Delivered-To: apmail-db-torque-dev-archive@www.apache.org Received: (qmail 94233 invoked from network); 18 Jul 2006 19:20:40 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 18 Jul 2006 19:20:40 -0000 Received: (qmail 72570 invoked by uid 500); 18 Jul 2006 19:20:39 -0000 Delivered-To: apmail-db-torque-dev-archive@db.apache.org Received: (qmail 72559 invoked by uid 500); 18 Jul 2006 19:20:39 -0000 Mailing-List: contact torque-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Apache Torque Developers List" Reply-To: "Apache Torque Developers List" Delivered-To: mailing list torque-dev@db.apache.org Received: (qmail 72548 invoked by uid 500); 18 Jul 2006 19:20:39 -0000 Received: (qmail 72545 invoked by uid 99); 18 Jul 2006 19:20:39 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Jul 2006 12:20:39 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Jul 2006 12:20:38 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id AA93D1A981D; Tue, 18 Jul 2006 12:20:18 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r423210 - in /db/torque/runtime/trunk/src/java/org/apache/torque: adapter/AbstractDBAdapter.java adapter/DB.java adapter/DBSybase.java util/BasePeer.java util/LargeSelect.java Date: Tue, 18 Jul 2006 19:20:10 -0000 To: torque-commits@db.apache.org From: tv@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060718192018.AA93D1A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: tv Date: Tue Jul 18 12:20:09 2006 New Revision: 423210 URL: http://svn.apache.org/viewvc?rev=423210&view=rev Log: Reworked limit and offset support. Fixed MS-SQL failure in LargeSelect (fixes TORQUE-20). Modified: db/torque/runtime/trunk/src/java/org/apache/torque/adapter/AbstractDBAdapter.java db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DB.java db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DBSybase.java db/torque/runtime/trunk/src/java/org/apache/torque/util/BasePeer.java db/torque/runtime/trunk/src/java/org/apache/torque/util/LargeSelect.java Modified: db/torque/runtime/trunk/src/java/org/apache/torque/adapter/AbstractDBAdapter.java URL: http://svn.apache.org/viewvc/db/torque/runtime/trunk/src/java/org/apache/torque/adapter/AbstractDBAdapter.java?rev=423210&r1=423209&r2=423210&view=diff ============================================================================== --- db/torque/runtime/trunk/src/java/org/apache/torque/adapter/AbstractDBAdapter.java (original) +++ db/torque/runtime/trunk/src/java/org/apache/torque/adapter/AbstractDBAdapter.java Tue Jul 18 12:20:09 2006 @@ -21,6 +21,7 @@ import java.sql.Timestamp; import java.util.Date; +import org.apache.torque.TorqueException; import org.apache.torque.util.Query; /** @@ -176,8 +177,11 @@ * @param query The query to modify * @param offset the offset Value * @param limit the limit Value + * + * @throws TorqueException if any error occurs when building the query */ public void generateLimits(Query query, int offset, int limit) + throws TorqueException { if (supportsNativeLimit()) { Modified: db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DB.java URL: http://svn.apache.org/viewvc/db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DB.java?rev=423210&r1=423209&r2=423210&view=diff ============================================================================== --- db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DB.java (original) +++ db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DB.java Tue Jul 18 12:20:09 2006 @@ -21,6 +21,7 @@ import java.sql.SQLException; import java.util.Date; +import org.apache.torque.TorqueException; import org.apache.torque.util.Query; /** @@ -199,8 +200,11 @@ * @param query The query to modify * @param offset the offset Value * @param limit the limit Value + * + * @throws TorqueException if any error occurs when building the query */ - public void generateLimits(Query query, int offset, int limit); + public void generateLimits(Query query, int offset, int limit) + throws TorqueException; /** * This method is for the SqlExpression.quoteAndEscape rules. The rule is, Modified: db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DBSybase.java URL: http://svn.apache.org/viewvc/db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DBSybase.java?rev=423210&r1=423209&r2=423210&view=diff ============================================================================== --- db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DBSybase.java (original) +++ db/torque/runtime/trunk/src/java/org/apache/torque/adapter/DBSybase.java Tue Jul 18 12:20:09 2006 @@ -19,10 +19,13 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; -import java.util.Date; import java.text.SimpleDateFormat; +import java.util.Date; +import org.apache.torque.TorqueException; +import org.apache.torque.util.Criteria; import org.apache.torque.util.Query; +import org.apache.torque.util.SqlExpression; /** * This is used to connect to a Sybase database using Sybase's @@ -154,10 +157,21 @@ * @param query The query to modify * @param offset the offset Value * @param limit the limit Value + * + * @throws TorqueException if any error occurs when building the query */ public void generateLimits(Query query, int offset, int limit) + throws TorqueException { - query.setRowcount(String.valueOf(limit+offset)); + if (limit + offset > 0) + { + query.setRowcount(String.valueOf(limit + offset)); + } + else if (limit + offset == 0) + { + // This is necessary to create the empty result set that Torque expects + query.getWhereClause().add(SqlExpression.build("1", new Integer(0), Criteria.EQUAL)); + } } /** Modified: db/torque/runtime/trunk/src/java/org/apache/torque/util/BasePeer.java URL: http://svn.apache.org/viewvc/db/torque/runtime/trunk/src/java/org/apache/torque/util/BasePeer.java?rev=423210&r1=423209&r2=423210&view=diff ============================================================================== --- db/torque/runtime/trunk/src/java/org/apache/torque/util/BasePeer.java (original) +++ db/torque/runtime/trunk/src/java/org/apache/torque/util/BasePeer.java Tue Jul 18 12:20:09 2006 @@ -999,14 +999,10 @@ results = new ArrayList(numberOfResults); qds.fetchRecords(start, numberOfResults); } - if (qds.size() > 1 && singleRecord) - { - handleMultipleRecords(qds); - } int startRecord = 0; - //Offset the correct number of people + //Offset the correct number of records if (start > 0 && numberOfResults <= 0) { startRecord = start; @@ -1017,6 +1013,11 @@ { Record rec = qds.getRecord(i); results.add(rec); + } + + if (results.size() > 1 && singleRecord) + { + handleMultipleRecords(qds); } } catch (Exception e) Modified: db/torque/runtime/trunk/src/java/org/apache/torque/util/LargeSelect.java URL: http://svn.apache.org/viewvc/db/torque/runtime/trunk/src/java/org/apache/torque/util/LargeSelect.java?rev=423210&r1=423209&r2=423210&view=diff ============================================================================== --- db/torque/runtime/trunk/src/java/org/apache/torque/util/LargeSelect.java (original) +++ db/torque/runtime/trunk/src/java/org/apache/torque/util/LargeSelect.java Tue Jul 18 12:20:09 2006 @@ -671,10 +671,13 @@ public void run() { boolean dbSupportsNativeLimit; + boolean dbSupportsNativeOffset; try { dbSupportsNativeLimit = (Torque.getDB(dbName).supportsNativeLimit()); + dbSupportsNativeOffset + = (Torque.getDB(dbName).supportsNativeOffset()); } catch (TorqueException e) { @@ -685,7 +688,7 @@ } int size; - if (dbSupportsNativeLimit) + if (dbSupportsNativeLimit && dbSupportsNativeOffset) { // retrieve one page at a time size = pageSize; @@ -707,14 +710,21 @@ // Add 1 to memory limit to check if the query ends on a page break. results = new ArrayList(memoryLimit + 1); + // Use the criteria to limit the rows that are retrieved to the + // block of records that fit in the predefined memoryLimit. if (dbSupportsNativeLimit) { - // Use the criteria to limit the rows that are retrieved to the - // block of records that fit in the predefined memoryLimit. - criteria.setOffset(blockBegin); - // Add 1 to memory limit to check if the query ends on a - // page break. - criteria.setLimit(memoryLimit + 1); + if (dbSupportsNativeOffset) + { + criteria.setOffset(blockBegin); + // Add 1 to memory limit to check if the query ends on a + // page break. + criteria.setLimit(memoryLimit + 1); + } + else + { + criteria.setLimit(blockBegin + memoryLimit + 1); + } } query = BasePeer.createQueryString(criteria); @@ -758,17 +768,17 @@ List tempResults = BasePeer.getSelectResults(qds, size, false); + int startIndex = dbSupportsNativeOffset ? 0 : blockBegin; + synchronized (results) { - for (int i = 0, n = tempResults.size(); i < n; i++) + for (int i = startIndex, n = tempResults.size(); i < n; i++) { - if (dbSupportsNativeLimit - || (i >= blockBegin)) results.add(tempResults.get(i)); } } - if (dbSupportsNativeLimit) + if (dbSupportsNativeLimit && dbSupportsNativeOffset) { currentlyFilledTo += tempResults.size(); } --------------------------------------------------------------------- To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org For additional commands, e-mail: torque-dev-help@db.apache.org