feat: add sqlServer 2005 LimitOffsetProcessor

This commit is contained in:
开源海哥 2023-07-10 11:57:35 +08:00
parent 81016ec601
commit 9582f88cf7
4 changed files with 286 additions and 261 deletions

View File

@ -58,6 +58,10 @@ public enum DbType {
* SQLSERVER * SQLSERVER
*/ */
SQLSERVER("sqlserver", "SQLServer 数据库"), SQLSERVER("sqlserver", "SQLServer 数据库"),
/**
* SqlServer 2005 数据库
*/
SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
/** /**
* DM * DM
*/ */

View File

@ -31,7 +31,8 @@ import java.util.regex.Pattern;
*/ */
public class DbTypeUtil { public class DbTypeUtil {
private DbTypeUtil() {} private DbTypeUtil() {
}
/** /**
* 获取当前配置的 DbType * 获取当前配置的 DbType
@ -97,8 +98,10 @@ public class DbTypeUtil {
return DbType.MARIADB; return DbType.MARIADB;
} else if (jdbcUrl.contains(":oracle:")) { } else if (jdbcUrl.contains(":oracle:")) {
return DbType.ORACLE; return DbType.ORACLE;
} else if (jdbcUrl.contains(":sqlserver:") || jdbcUrl.contains(":microsoft:") || jdbcUrl.contains(":sqlserver2012:")) { } else if (jdbcUrl.contains(":sqlserver2012:")) {
return DbType.SQLSERVER; return DbType.SQLSERVER;
} else if (jdbcUrl.contains(":sqlserver:") || jdbcUrl.contains(":microsoft:")) {
return DbType.SQLSERVER_2005;
} else if (jdbcUrl.contains(":postgresql:")) { } else if (jdbcUrl.contains(":postgresql:")) {
return DbType.POSTGRE_SQL; return DbType.POSTGRE_SQL;
} else if (jdbcUrl.contains(":hsqldb:")) { } else if (jdbcUrl.contains(":hsqldb:")) {

View File

@ -134,6 +134,8 @@ public class DialectFactory {
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.DERBY); return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.DERBY);
case SQLSERVER: case SQLSERVER:
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER); return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER);
case SQLSERVER_2005:
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER_2005);
case INFORMIX: case INFORMIX:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.INFORMIX); return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.INFORMIX);
case SYBASE: case SYBASE:

View File

@ -91,6 +91,22 @@ public interface LimitOffsetProcessor {
}; };
/**
* SqlServer 2005 limit 处理器
*/
LimitOffsetProcessor SQLSERVER_2005 = (sql, queryWrapper, limitRows, limitOffset) -> {
if (limitRows != null) {
if (limitOffset == null) {
limitOffset = 0;
}
StringBuilder newSql = new StringBuilder("SELECT * FROM (SELECT TEMP_DATAS.*, ROW_NUMBER() OVER() AS RN FROM (");
newSql.append(sql).append(") AS TEMP_DATAS) WHERE RN > ").append(limitOffset).append(" AND RN <= ").append(limitRows + limitRows);
return newSql;
}
return sql;
};
/** /**
* Informix 的处理器 * Informix 的处理器
* 适合 {@link DbType#INFORMIX} * 适合 {@link DbType#INFORMIX}