You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by se...@apache.org on 2004/08/06 14:13:13 UTC
cvs commit: db-torque/xdocs release-changes.xml
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 @@
* </a>
*
* @author <a href="mailto:hakan42@gmx.de">Hakan Tandogan</a>
+ * @author <a href="mailto:vido@ldh.org">Augustin Vidovic</a>
* @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 <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
* @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
* @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
+ * @author <a href="mailto:vido@ldh.org">Augustin Vidovic</a>
* @version $Id$
*/
public abstract class DB implements Serializable, IDMethod
@@ -68,6 +69,9 @@
/** <code><pre>SELECT ... WHERE ... AND ROWNUM < <limit></pre></code> */
public static final int LIMIT_STYLE_ORACLE = 4;
+
+ /** <code><pre>SELECT ... WHERE ... AND ROW_NUMBER() OVER() < <limit></pre></code> */
+ 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 @@
* </a>
*
* @author <a href="mailto:hakan42@gmx.de">Hakan Tandogan</a>
+ * @author <a href="mailto:vido@ldh.org">Augustin Vidovic</a>
* @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 <a href="mailto:sweaver@rippe.com">Scott Weaver</a>
+ * @author <a href="mailto:vido@ldh.org">Augustin Vidovic</a>
* @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 <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
* @author <a href="mailto:stephenh@chase3000.com">Stephen Haberman</a>
* @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
+ * @author <a href="mailto:vido@ldh.org">Augustin Vidovic</a>
* @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:
+ * <pre>
+ * 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
+ * </pre>
+ *
+ * @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 @@
<p>
<ul>
<li>
+ DB2 limit and offset support. Thanks to Augustin Vidovic for the patch.
+ </li>
+ <li>
Upgraded to commons-pool-1.1 and commons-dbcp-1.1
</li>
<li>
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org