BATCH-1590: tidy up oracle paging

This commit is contained in:
dsyer
2010-07-09 10:50:08 +00:00
parent 07922086f9
commit c918e770f0
8 changed files with 66 additions and 34 deletions

View File

@@ -41,9 +41,9 @@ public class OraclePagingQueryProvider extends AbstractSqlPagingQueryProvider {
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize);
offset = offset==0 ? 1 : offset;
return SqlPagingQueryUtils.generateRowNumSqlQuery(this, this.getSortKey() + " AS SORT_KEY", false,
"TMP_ROW_NUM = " + offset);
offset = offset == 0 ? 1 : offset;
return SqlPagingQueryUtils.generateRowNumSqlQueryWithNesting(this, this.getSortKey(), false, "TMP_ROW_NUM = "
+ offset);
}
private String buildRowNumClause(int pageSize) {

View File

@@ -98,12 +98,25 @@ public class SqlPagingQueryUtils {
* @param rowNumClause the implementation specific row num clause to be used
* @return the generated query
*/
public static String generateRowNumSqlQuery(AbstractSqlPagingQueryProvider provider, String selectClause, boolean remainingPageQuery,
String rowNumClause) {
public static String generateRowNumSqlQuery(AbstractSqlPagingQueryProvider provider, String selectClause,
boolean remainingPageQuery, String rowNumClause) {
StringBuilder sql = new StringBuilder();
// TODO: BATCH-1590 fix this little hack to extract the alias name for a jump to item query
String selectAlias = selectClause.replaceAll(".* (as|AS) (.*)", "$2");
sql.append("SELECT * FROM (SELECT ").append(selectAlias).append(", ROWNUM as TMP_ROW_NUM");
sql.append("SELECT * FROM (SELECT ").append(selectClause).append(", ROWNUM as TMP_ROW_NUM");
sql.append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
sql.append(" ORDER BY ").append(provider.getSortKey());
buildAscendingClause(provider, sql);
sql.append(") WHERE ").append(rowNumClause);
return sql.toString();
}
public static String generateRowNumSqlQueryWithNesting(AbstractSqlPagingQueryProvider provider,
String selectClause, boolean remainingPageQuery, String rowNumClause) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT * FROM (SELECT ").append(selectClause).append(", ROWNUM as TMP_ROW_NUM");
sql.append(" FROM (SELECT ").append(selectClause).append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
sql.append(" ORDER BY ").append(provider.getSortKey());