1 /*** $Id: HibernateDB2NTopWrapperAction.java,v 1.1.1.1 2004/05/18 10:50:17 mochoa Exp $ */
2 package org.j2ee.dao.util;
3
4 /***
5 * Last modified $Date: 2004/05/18 10:50:17 $
6 * @version $Revision: 1.1.1.1 $
7 * @author mochoa (mochoa@users.sourceforge.net) */
8 public class HibernateDB2NTopWrapperAction extends AbstractPageByPageAction {
9
10 public HibernateDB2NTopWrapperAction() {
11 }
12
13 public HibernateDB2NTopWrapperAction(int fromNo, int toNo) {
14 super(fromNo,toNo);
15 }
16
17 /***
18 *
19 * @return an String using DB2's syntax for Limit—with offset querys.
20 * http://troels.arvin.dk/db/rdbms/ for more information.
21 */
22 public String getSQL() {
23 String originalSQL = action.getSQL().trim();
24 String startOfQuery = null;
25 int orderByPosition = originalSQL.toUpperCase().lastIndexOf("ORDER BY");
26 int columnListPosition = 6;
27 if (originalSQL.toUpperCase().startsWith("SELECT DISTINCT")) {
28 columnListPosition = 15;
29 startOfQuery = "SELECT * FROM (SELECT DISTINCT";
30 } else
31 startOfQuery = "SELECT * FROM (SELECT";
32 if (orderByPosition<0) // No order by condition, use the query without SELECT
33 return startOfQuery+" ROW_NUMBER() AS rownum, "+originalSQL.substring(columnListPosition)+" ) AS wrappedQuery WHERE rownum > :firstRow AND rownum <= :lastRow";
34 else // order by found, split the query in two parts.
35 return startOfQuery+" ROW_NUMBER() OVER ("+originalSQL.substring(orderByPosition)+") AS rownum, "+originalSQL.substring(columnListPosition,orderByPosition)+" ) AS wrappedQuery WHERE rownum >= :firstRow AND rownum <= :lastRow";
36 }
37 }
This page was automatically generated by Maven