IDEMPIERE-4447 Add offset to Query (#243)
Add method Query.setRecordstoSkip
This commit is contained in:
parent
e93cdcb38c
commit
be525d178c
|
@ -89,10 +89,10 @@ public class Query
|
|||
private int pageSize;
|
||||
|
||||
/**
|
||||
* Number of pages will be skipped on query run.
|
||||
* Number of records will be skipped on query run.
|
||||
*/
|
||||
private int pagesToSkip;
|
||||
|
||||
private int recordsToSkip;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param table
|
||||
|
@ -765,7 +765,7 @@ public class Query
|
|||
}
|
||||
|
||||
// If have pagination
|
||||
if (pageSize > 0) {
|
||||
if (pageSize > 0 || recordsToSkip > 0) {
|
||||
sql = appendPagination(sql);
|
||||
}
|
||||
|
||||
|
@ -800,8 +800,25 @@ public class Query
|
|||
* @return current Query
|
||||
*/
|
||||
public Query setPage(int pPageSize, int pPagesToSkip) {
|
||||
this.pageSize = pPageSize;
|
||||
this.pagesToSkip = pPagesToSkip;
|
||||
if (pPageSize > 0) {
|
||||
this.pageSize = pPageSize;
|
||||
this.recordsToSkip = pPagesToSkip * pageSize;
|
||||
} else {
|
||||
log.warning("Wrong PageSize <= 0");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of records to skip (a.k.a. OFFSET)
|
||||
*
|
||||
* @param pRecordsToSkip
|
||||
* Limit current query rows return.
|
||||
*
|
||||
* @return current Query
|
||||
*/
|
||||
public Query setRecordstoSkip(int pRecordsToSkip) {
|
||||
this.recordsToSkip = pRecordsToSkip;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -819,9 +836,9 @@ public class Query
|
|||
|
||||
String query = pQuery;
|
||||
|
||||
if (pageSize > 0) {
|
||||
if (pageSize > 0 || recordsToSkip > 0) {
|
||||
if (DB.getDatabase().isPagingSupported()) {
|
||||
query = DB.getDatabase().addPagingSQL(query, (pageSize*pagesToSkip) + 1, pageSize * (pagesToSkip+1));
|
||||
query = DB.getDatabase().addPagingSQL(query, recordsToSkip+1, pageSize <= 0 ? 0 : recordsToSkip + pageSize);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Pagination not supported by database");
|
||||
}
|
||||
|
|
|
@ -1209,10 +1209,12 @@ public class DB_Oracle implements AdempiereDatabase
|
|||
.append(" select tb.*, ROWNUM oracle_native_rownum_ from (")
|
||||
.append(sql)
|
||||
.append(") tb) where oracle_native_rownum_ >= ")
|
||||
.append(start)
|
||||
.append(" AND oracle_native_rownum_ <= ")
|
||||
.append(end)
|
||||
.append(" order by oracle_native_rownum_");
|
||||
.append(start);
|
||||
if (end > 0) {
|
||||
newSql.append(" AND oracle_native_rownum_ <= ")
|
||||
.append(end);
|
||||
}
|
||||
newSql.append(" order by oracle_native_rownum_");
|
||||
|
||||
return newSql.toString();
|
||||
}
|
||||
|
|
|
@ -1045,10 +1045,12 @@ public class DB_PostgreSQL implements AdempiereDatabase
|
|||
*/
|
||||
public String addPagingSQL(String sql, int start, int end) {
|
||||
StringBuilder newSql = new StringBuilder(sql);
|
||||
if (end > 0) {
|
||||
newSql.append(" ")
|
||||
.append(markNativeKeyword("LIMIT "))
|
||||
.append(( end - start + 1 ));
|
||||
}
|
||||
newSql.append(" ")
|
||||
.append(markNativeKeyword("LIMIT "))
|
||||
.append(( end - start + 1 ))
|
||||
.append(" ")
|
||||
.append(markNativeKeyword("OFFSET "))
|
||||
.append((start - 1));
|
||||
return newSql.toString();
|
||||
|
|
Loading…
Reference in New Issue