package jef.database.wrapper.clause;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import jef.database.jdbc.rowset.CachedRowSetImpl;
import jef.database.jdbc.rowset.Row;
import jef.tools.PageLimit;
/**
* 在内存中实现结果集分页
* @author jiyi
*
*/
public class InMemoryPaging{
private int start;
private int limit;
public InMemoryPaging(int start,int limit){
this.start=start;
this.limit=limit;
}
public InMemoryPaging(PageLimit range) {
int[] data=range.toArray();
this.start=data[0];
this.limit=data[1];
}
public void process(CachedRowSetImpl rows) throws SQLException {
List<Row> list=rows.getRvh();
int end=start+limit;
if(start==0 && end>=list.size()){//不需要截取的场合
return;
}
if(end>list.size()){ //防止溢出
end=list.size();
}
if(end<=start || start>=rows.size()){//防止空结果
rows.setRvh(new ArrayList<Row>());
}else{
rows.setRvh(list.subList(start, end));
}
rows.refresh();
}
public String getName() {
return "PAGING";
}
public int getOffset(){
return start;
}
public int getLimit(){
return limit;
}
}