Return-Path: Delivered-To: apmail-db-torque-dev-archive@www.apache.org Received: (qmail 97182 invoked from network); 6 Aug 2004 12:13:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 6 Aug 2004 12:13:18 -0000 Received: (qmail 5381 invoked by uid 500); 6 Aug 2004 12:13:18 -0000 Delivered-To: apmail-db-torque-dev-archive@db.apache.org Received: (qmail 5206 invoked by uid 500); 6 Aug 2004 12:13:16 -0000 Mailing-List: contact torque-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: 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 5192 invoked by uid 500); 6 Aug 2004 12:13:15 -0000 Received: (qmail 5188 invoked by uid 99); 6 Aug 2004 12:13:15 -0000 X-ASF-Spam-Status: No, hits=-2.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.27.1) with SMTP; Fri, 06 Aug 2004 05:13:14 -0700 Received: (qmail 97143 invoked by uid 1610); 6 Aug 2004 12:13:13 -0000 Date: 6 Aug 2004 12:13:13 -0000 Message-ID: <20040806121313.97142.qmail@minotaur.apache.org> From: seade@apache.org To: db-torque-cvs@apache.org Subject: cvs commit: db-torque/xdocs release-changes.xml X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N seade 2004/08/06 05:13:13 Modified: src/java/org/apache/torque/adapter Tag: TORQUE_3_1_BRANCH DBDB2Net.java DB.java DBDB2App.java DBDB2400.java src/java/org/apache/torque/util Tag: TORQUE_3_1_BRANCH BasePeer.java xdocs Tag: TORQUE_3_1_BRANCH release-changes.xml Log: DB2 limit and offset support. Thanks to Augustin Vidovic for the patch. Revision Changes Path No revision No revision 1.5.4.3 +13 -1 db-torque/src/java/org/apache/torque/adapter/DBDB2Net.java Index: DBDB2Net.java =================================================================== RCS file: /home/cvs/db-torque/src/java/org/apache/torque/adapter/DBDB2Net.java,v retrieving revision 1.5.4.2 retrieving revision 1.5.4.3 diff -u -r1.5.4.2 -r1.5.4.3 --- DBDB2Net.java 20 May 2004 04:35:15 -0000 1.5.4.2 +++ DBDB2Net.java 6 Aug 2004 12:13:12 -0000 1.5.4.3 @@ -28,6 +28,7 @@ * * * @author Hakan Tandogan + * @author Augustin Vidovic * @version $Id$ */ public class DBDB2Net @@ -100,5 +101,16 @@ */ public void unlockTable(Connection con, String table) throws SQLException { + } + + /** + * This method is used to check whether the database supports + * limiting the size of the resultset. + * + * @return LIMIT_STYLE_DB2. + */ + public int getLimitStyle() + { + return DB.LIMIT_STYLE_DB2; } } 1.31.2.3 +5 -1 db-torque/src/java/org/apache/torque/adapter/DB.java Index: DB.java =================================================================== RCS file: /home/cvs/db-torque/src/java/org/apache/torque/adapter/DB.java,v retrieving revision 1.31.2.2 retrieving revision 1.31.2.3 diff -u -r1.31.2.2 -r1.31.2.3 --- DB.java 20 May 2004 04:35:15 -0000 1.31.2.2 +++ DB.java 6 Aug 2004 12:13:12 -0000 1.31.2.3 @@ -50,6 +50,7 @@ * @author Jon S. Stevens * @author Brett McLaughlin * @author Daniel Rall + * @author Augustin Vidovic * @version $Id$ */ public abstract class DB implements Serializable, IDMethod @@ -68,6 +69,9 @@ /**
SELECT ... WHERE ... AND ROWNUM < 
*/ public static final int LIMIT_STYLE_ORACLE = 4; + + /**
SELECT ... WHERE ... AND ROW_NUMBER() OVER() < 
*/ + public static final int LIMIT_STYLE_DB2 = 5; /** * Empty constructor. 1.5.4.3 +13 -1 db-torque/src/java/org/apache/torque/adapter/DBDB2App.java Index: DBDB2App.java =================================================================== RCS file: /home/cvs/db-torque/src/java/org/apache/torque/adapter/DBDB2App.java,v retrieving revision 1.5.4.2 retrieving revision 1.5.4.3 diff -u -r1.5.4.2 -r1.5.4.3 --- DBDB2App.java 20 May 2004 04:35:15 -0000 1.5.4.2 +++ DBDB2App.java 6 Aug 2004 12:13:12 -0000 1.5.4.3 @@ -28,6 +28,7 @@ * * * @author Hakan Tandogan + * @author Augustin Vidovic * @version $Id$ */ public class DBDB2App extends DB @@ -99,5 +100,16 @@ */ public void unlockTable(Connection con, String table) throws SQLException { + } + + /** + * This method is used to check whether the database supports + * limiting the size of the resultset. + * + * @return LIMIT_STYLE_DB2. + */ + public int getLimitStyle() + { + return DB.LIMIT_STYLE_DB2; } } 1.4.2.3 +13 -1 db-torque/src/java/org/apache/torque/adapter/DBDB2400.java Index: DBDB2400.java =================================================================== RCS file: /home/cvs/db-torque/src/java/org/apache/torque/adapter/DBDB2400.java,v retrieving revision 1.4.2.2 retrieving revision 1.4.2.3 diff -u -r1.4.2.2 -r1.4.2.3 --- DBDB2400.java 20 May 2004 04:35:15 -0000 1.4.2.2 +++ DBDB2400.java 6 Aug 2004 12:13:12 -0000 1.4.2.3 @@ -20,6 +20,7 @@ * Torque Database Adapter for DB2/400 on the IBM AS400 platform. * * @author Scott Weaver + * @author Augustin Vidovic * @version $Id$ */ public class DBDB2400 extends DBDB2App @@ -72,5 +73,16 @@ private String formatCase(String in) { return new StringBuffer(UCASE + "(").append(in).append(")").toString(); + } + + /** + * This method is used to check whether the database supports + * limiting the size of the resultset. + * + * @return LIMIT_STYLE_DB2. + */ + public int getLimitStyle() + { + return DB.LIMIT_STYLE_DB2; } } No revision No revision 1.76.2.3 +77 -13 db-torque/src/java/org/apache/torque/util/BasePeer.java Index: BasePeer.java =================================================================== RCS file: /home/cvs/db-torque/src/java/org/apache/torque/util/BasePeer.java,v retrieving revision 1.76.2.2 retrieving revision 1.76.2.3 diff -u -r1.76.2.2 -r1.76.2.3 --- BasePeer.java 20 May 2004 04:36:06 -0000 1.76.2.2 +++ BasePeer.java 6 Aug 2004 12:13:12 -0000 1.76.2.3 @@ -72,6 +72,7 @@ * @author Brett McLaughlin * @author Stephen Haberman * @author Martin Poeschl + * @author Augustin Vidovic * @version $Id$ */ public abstract class BasePeer implements java.io.Serializable @@ -933,6 +934,53 @@ } /** + * Build DB2 (OLAP) -style query with limit or offset. + * If the original SQL is in variable: query then the requlting + * SQL looks like this: + *
  +     * SELECT B.* FROM (
  +     *          SELECT A.*, row_number() over() as TORQUE$ROWNUM FROM (
  +     *                  query
  +     *          ) A
  +     *     ) B WHERE B.TORQUE$ROWNUM > offset AND B.TORQUE$ROWNUM
  +     *     <= offset + limit
  +     * 
+ * + * @param query the query + * @param limit + * @param offset + * @return oracle-style query + */ + private static String createDB2LimitOffsetQuery(Query query, + int limit, int offset) + { + StringBuffer buf = new StringBuffer(); + buf.append("SELECT B.* FROM ( "); + buf.append("SELECT A.*, row_number() over() AS TORQUE$ROWNUM FROM ( "); + + buf.append(query.toString()); + buf.append(" ) A "); + buf.append(" ) B WHERE "); + + if (offset > 0) + { + buf.append(" B.TORQUE$ROWNUM > "); + buf.append(offset); + if (limit > 0) + { + buf.append(" AND B.TORQUE$ROWNUM <= "); + buf.append(offset + limit); + } + } + else + { + buf.append(" B.TORQUE$ROWNUM <= "); + buf.append(limit); + } + return buf.toString(); + } + + /** * Method to create an SQL query for actual execution based on values in a * Criteria. * @@ -950,13 +998,21 @@ int limit = criteria.getLimit(); int offset = criteria.getOffset(); - String sql; - if ((limit > 0 || offset > 0) - && db.getLimitStyle() == DB.LIMIT_STYLE_ORACLE) + String sql = null; + if (limit > 0 || offset > 0) { - sql = createOracleLimitOffsetQuery(query, limit, offset); - criteria.setLimit(-1); - criteria.setOffset(0); + if (db.getLimitStyle() == DB.LIMIT_STYLE_ORACLE) + { + sql = createOracleLimitOffsetQuery(query, limit, offset); + criteria.setLimit(-1); + criteria.setOffset(0); + } + else if (db.getLimitStyle() == DB.LIMIT_STYLE_DB2) + { + sql = createDB2LimitOffsetQuery(query, limit, offset); + criteria.setLimit(-1); + criteria.setOffset(0); + } } else { @@ -2511,13 +2567,21 @@ } } - String sql; - if ((limit > 0 || offset > 0) - && db.getLimitStyle() == DB.LIMIT_STYLE_ORACLE) + String sql = null; + if (limit > 0 || offset > 0) { - sql = createOracleLimitOffsetQuery(query, limit, offset); - criteria.setLimit(-1); - criteria.setOffset(0); + if ( db.getLimitStyle() == DB.LIMIT_STYLE_ORACLE) + { + sql = createOracleLimitOffsetQuery(query, limit, offset); + criteria.setLimit(-1); + criteria.setOffset(0); + } + else if ( db.getLimitStyle() == DB.LIMIT_STYLE_DB2) + { + sql = createDB2LimitOffsetQuery(query, limit, offset); + criteria.setLimit(-1); + criteria.setOffset(0); + } } else { No revision No revision 1.3.2.7 +3 -0 db-torque/xdocs/release-changes.xml Index: release-changes.xml =================================================================== RCS file: /home/cvs/db-torque/xdocs/release-changes.xml,v retrieving revision 1.3.2.6 retrieving revision 1.3.2.7 diff -u -r1.3.2.6 -r1.3.2.7 --- release-changes.xml 19 Jun 2004 04:30:37 -0000 1.3.2.6 +++ release-changes.xml 6 Aug 2004 12:13:13 -0000 1.3.2.7 @@ -18,6 +18,9 @@

  • + DB2 limit and offset support. Thanks to Augustin Vidovic for the patch. +
  • +
  • Upgraded to commons-pool-1.1 and commons-dbcp-1.1
  • --------------------------------------------------------------------- To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org For additional commands, e-mail: torque-dev-help@db.apache.org