Author: arminw
Date: Wed Mar 21 18:22:31 2007
New Revision: 521071

URL: http://svn.apache.org/viewvc?view=rev&rev=521071
Log:
add comment

Modified:
    db/ojb/trunk/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java

Modified: 
db/ojb/trunk/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java
URL: 
http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java?view=diff&rev=521071&r1=521070&r2=521071
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java 
(original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java 
Wed Mar 21 18:22:31 2007
@@ -276,15 +276,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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to