package jef.database.dialect.handler; import jef.database.jdbc.statement.UnionJudgement; import jef.database.jdbc.statement.UnionJudgementDruidPGImpl; import jef.database.wrapper.clause.BindSql; import jef.tools.StringUtils; public class LimitOffsetLimitHandler implements LimitHandler { private UnionJudgement unionJudge; public LimitOffsetLimitHandler(){ if(UnionJudgement.isDruid()){ unionJudge=new UnionJudgementDruidPGImpl(); }else{ unionJudge=UnionJudgement.DEFAULT; } } public BindSql toPageSQL(String sql, int[] range) { return toPageSQL(sql, range,unionJudge.isUnion(sql)); } public BindSql toPageSQL(String sql, int[] range, boolean isUnion) { String limit; if(range[0]==0){ limit=" limit "+range[1]; }else{ limit=" limit "+range[1]+" offset "+range[0]; } return new BindSql(isUnion ? StringUtils.concat("select * from (", sql, ") tb__", limit) : sql.concat(limit)); } }