You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Di Wu Lau (JIRA)" <ji...@apache.org> on 2013/07/09 00:11:48 UTC

[jira] [Updated] (OPENJPA-2356) Use new Offset/Limit/ROWNUM features in DB2 family of databases for range queries

     [ https://issues.apache.org/jira/browse/OPENJPA-2356?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Di Wu Lau updated OPENJPA-2356:
-------------------------------

    Attachment: OPENJPA-2356.patch

Fixed TestRangeQuery problem. Test now passes against Derby, DB2, Oracle, Mysql, Postgresql and Hsql. Attached is the patch for fixing this issue.

The problem is database specific, in this case it is Derby. The number of rows get return from Derby depends on the start and end index that was passed through setFirstResult and setMaxResults. It then returns the total number of rows = endIdx - startIdx. This is not the actual row number gets returned if end index < setMaxResults. That's why it needs the applyRange() method to modify its total number of rows (count). 

On the other hand, the rest of the databases are not affected by end index. The mechanisms they are using will always return the actual number of rows. (eg. "Limit", "Offset", "Fetch") So they should not undergo the changes in method applyRange().

Therefore, we moved applyRange() from SelectImpl to DerbyDictionary to be specific only to Derby. This fixed the problem. 
                
> Use new Offset/Limit/ROWNUM features in DB2 family of databases for range queries
> ---------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2356
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2356
>             Project: OpenJPA
>          Issue Type: Improvement
>            Reporter: Pinaki Poddar
>            Assignee: Pinaki Poddar
>             Fix For: 2.3.0
>
>         Attachments: graycol.gif, OPENJPA-2356.patch
>
>
> JPA queries that use setFirstResult() and/or setMaxResult() translate to some form of Offset and Limit syntax in database SQL query. Recently DB2 and Derby has added ROWNUM and FETCH offset respectively.
> OpenJPA should use these facilities when appropriate.   

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira