You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2007/03/22 02:22:51 UTC
svn commit: r521072 -
/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java
Author: arminw
Date: Wed Mar 21 18:22:50 2007
New Revision: 521072
URL: http://svn.apache.org/viewvc?view=rev&rev=521072
Log:
add comment
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java?view=diff&rev=521072&r1=521071&r2=521072
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java Wed Mar 21 18:22:50 2007
@@ -289,15 +289,57 @@
return false;
}
- public StringBuffer addPagingSql(Query query, StringBuffer anSqlString)
+ public StringBuffer addPagingSql(Query query, StringBuffer sql)
{
- // TODO: native paging support
- // not supported
throw new UnsupportedOperationException("OFFSET is not supported by this platform" +
" implementation class (" + this.getClass().getName() +
"), please disable the native limit/offset flag in the" +
" connection metadata mapping file using attribute 'nativeLimitOffset'" +
" then OJB will use specific paging/limit result set iterator to simulate it!");
+
+ // TODO: native paging support
+ /*
+ arminw:
+ Below are two paging implementation versions. It would be great if someone
+ can check this against DB2.
+ To verify the implementation please run org.apache.ojb.broker.PaginationTest
+ from OJB's test suite.
+ Please check methods #buildLimit(...) and buildOffset(...) too (maybe need tweak).
+ */
+
+ /* Version A
+ int orderByIndex = sql.toString().toLowerCase().indexOf("order by");
+ int selectIndex = sql.toString().toLowerCase().indexOf("select");
+ boolean isOrderBy = orderByIndex > -1;
+
+ StringBuffer result = new StringBuffer().append("select * from ( select row_number() over(");
+ if(!query.isDistinct() && isOrderBy)
+ {
+ result.append(sql.toString().substring(orderByIndex));
+ }
+ result.append(" ) as rownum_,");
+ if(query.isDistinct())
+ {
+ result.append(" row_.* from ( ").append(sql.toString()).append(" ) as row_");
+ }
+ else
+ {
+ result.append(sql.toString().substring(selectIndex + 6));
+ }
+ result.append(" ) as foo_ where rownum_ > ").append(buildOffset(query)).append(" and rownum_ <= ").append(buildLimit(query));
+ return result;
+ */
+
+ /* Version B
+ StringBuffer result = new StringBuffer();
+ result.append("select bar_.* from ( select foo_.*, row_number() over() as rownum_ from ( ")
+ .append(sql.toString())
+ .append(" ) as foo_ ) as bar_ where rownum_ > ")
+ .append(buildOffset(query))
+ .append(" and rownum_ <= ")
+ .append(buildLimit(query));
+ return result;
+ */
}
public int buildLimit(Query query)
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org