package cn.org.rapid_framework.jdbc.dialect; /** * @author badqiu */ public class SQLServerDialect extends Dialect{ public boolean supportsLimitOffset(){ return false; } public boolean supportsLimit() { return true; } static int getAfterSelectInsertPoint(String sql) { int selectIndex = sql.toLowerCase().indexOf( "select" ); final int selectDistinctIndex = sql.toLowerCase().indexOf( "select distinct" ); return selectIndex + ( selectDistinctIndex == selectIndex ? 15 : 6 ); } public String getLimitString(String sql, int offset, int limit) { return getLimitString(sql,offset,null,limit,null); } public String getLimitString(String querySelect, int offset,String offsetPlaceholder, int limit, String limitPlaceholder) { if ( offset > 0 ) { throw new UnsupportedOperationException( "sql server has no offset" ); } // if(limitPlaceholder != null) { // throw new UnsupportedOperationException(" sql server not support variable limit"); // } return new StringBuffer( querySelect.length() + 8 ) .append( querySelect ) .insert( getAfterSelectInsertPoint( querySelect ), " top " + limit ) .toString(); } // TODO add Dialect.supportsVariableLimit() for sqlserver // public boolean supportsVariableLimit() { // return false; // } }