package jef.database.dialect.handler; import jef.database.wrapper.clause.BindSql; public class OracleLimitHander implements LimitHandler { private final static String ORACLE_PAGE1 = "select * from (select tb__.*, rownum rid__ from ("; private final static String ORACLE_PAGE2 = " ) tb__ where rownum <= %end%) where rid__ > %start%"; public BindSql toPageSQL(String sql, int[] range) { if(range[0]==0){ return new BindSql("select tb__.* from (\n"+sql+") tb__ where rownum <= "+range[1]); }else{ sql = ORACLE_PAGE1 + sql; String limit = ORACLE_PAGE2.replace("%start%", String.valueOf(range[0])); limit = limit.replace("%end%", String.valueOf(range[0]+range[1])); sql = sql.concat(limit); return new BindSql(sql); } } @Override public BindSql toPageSQL(String sql, int[] offsetLimit, boolean isUnion) { return toPageSQL(sql, offsetLimit); } }