mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
feat: add sqlServer 2005 LimitOffsetProcessor
This commit is contained in:
parent
81016ec601
commit
9582f88cf7
@ -58,6 +58,10 @@ public enum DbType {
|
|||||||
* SQLSERVER
|
* SQLSERVER
|
||||||
*/
|
*/
|
||||||
SQLSERVER("sqlserver", "SQLServer 数据库"),
|
SQLSERVER("sqlserver", "SQLServer 数据库"),
|
||||||
|
/**
|
||||||
|
* SqlServer 2005 数据库
|
||||||
|
*/
|
||||||
|
SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
|
||||||
/**
|
/**
|
||||||
* DM
|
* DM
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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:")) {
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user