Skip to content

Commit 9582f88

Browse files
committed
feat: add sqlServer 2005 LimitOffsetProcessor
1 parent 81016ec commit 9582f88

File tree

4 files changed

+293
-268
lines changed

4 files changed

+293
-268
lines changed

mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbType.java

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ public enum DbType {
5858
* SQLSERVER
5959
*/
6060
SQLSERVER("sqlserver", "SQLServer 数据库"),
61+
/**
62+
* SqlServer 2005 数据库
63+
*/
64+
SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
6165
/**
6266
* DM
6367
*/

mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbTypeUtil.java

+139-136
Original file line numberDiff line numberDiff line change
@@ -31,148 +31,151 @@
3131
*/
3232
public class DbTypeUtil {
3333

34-
private DbTypeUtil() {}
34+
private DbTypeUtil() {
35+
}
3536

36-
/**
37-
* 获取当前配置的 DbType
38-
*/
39-
public static DbType getDbType(DataSource dataSource) {
40-
String jdbcUrl = getJdbcUrl(dataSource);
37+
/**
38+
* 获取当前配置的 DbType
39+
*/
40+
public static DbType getDbType(DataSource dataSource) {
41+
String jdbcUrl = getJdbcUrl(dataSource);
4142

42-
if (StringUtil.isNotBlank(jdbcUrl)) {
43-
return parseDbType(jdbcUrl);
44-
}
43+
if (StringUtil.isNotBlank(jdbcUrl)) {
44+
return parseDbType(jdbcUrl);
45+
}
4546

46-
throw new IllegalStateException("Can not get dataSource jdbcUrl: " + dataSource.getClass().getName());
47-
}
47+
throw new IllegalStateException("Can not get dataSource jdbcUrl: " + dataSource.getClass().getName());
48+
}
4849

49-
/**
50-
* 通过数据源中获取 jdbc 的 url 配置
51-
* 符合 HikariCP, druid, c3p0, DBCP, beecp 数据源框架 以及 MyBatis UnpooledDataSource 的获取规则
52-
* UnpooledDataSource 参考 @{@link UnpooledDataSource#getUrl()}
53-
*
54-
* @return jdbc url 配置
55-
*/
56-
public static String getJdbcUrl(DataSource dataSource) {
57-
String[] methodNames = new String[]{"getUrl", "getJdbcUrl"};
58-
for (String methodName : methodNames) {
59-
try {
60-
Method method = dataSource.getClass().getMethod(methodName);
61-
return (String) method.invoke(dataSource);
62-
} catch (Exception e) {
63-
//ignore
64-
}
65-
}
50+
/**
51+
* 通过数据源中获取 jdbc 的 url 配置
52+
* 符合 HikariCP, druid, c3p0, DBCP, beecp 数据源框架 以及 MyBatis UnpooledDataSource 的获取规则
53+
* UnpooledDataSource 参考 @{@link UnpooledDataSource#getUrl()}
54+
*
55+
* @return jdbc url 配置
56+
*/
57+
public static String getJdbcUrl(DataSource dataSource) {
58+
String[] methodNames = new String[]{"getUrl", "getJdbcUrl"};
59+
for (String methodName : methodNames) {
60+
try {
61+
Method method = dataSource.getClass().getMethod(methodName);
62+
return (String) method.invoke(dataSource);
63+
} catch (Exception e) {
64+
//ignore
65+
}
66+
}
6667

67-
Connection connection = null;
68-
try {
69-
connection = dataSource.getConnection();
70-
return connection.getMetaData().getURL();
71-
} catch (Exception e) {
72-
throw FlexExceptions.wrap("Can not get the dataSource jdbcUrl", e);
73-
} finally {
74-
if (connection != null) {
75-
try {
76-
connection.close();
77-
} catch (SQLException e) { //ignore
78-
}
79-
}
80-
}
81-
}
68+
Connection connection = null;
69+
try {
70+
connection = dataSource.getConnection();
71+
return connection.getMetaData().getURL();
72+
} catch (Exception e) {
73+
throw FlexExceptions.wrap("Can not get the dataSource jdbcUrl", e);
74+
} finally {
75+
if (connection != null) {
76+
try {
77+
connection.close();
78+
} catch (SQLException e) { //ignore
79+
}
80+
}
81+
}
82+
}
8283

8384

84-
/**
85-
* 参考 druid 和 MyBatis-plus 的 JdbcUtils
86-
* {@link com.alibaba.druid.util.JdbcUtils#getDbType(String, String)}
87-
* {@link com.baomidou.mybatisplus.extension.toolkit.JdbcUtils#getDbType(String)}
88-
*
89-
* @param jdbcUrl jdbcURL
90-
* @return 返回数据库类型
91-
*/
92-
public static DbType parseDbType(String jdbcUrl) {
93-
jdbcUrl = jdbcUrl.toLowerCase();
94-
if (jdbcUrl.contains(":mysql:") || jdbcUrl.contains(":cobar:")) {
95-
return DbType.MYSQL;
96-
} else if (jdbcUrl.contains(":mariadb:")) {
97-
return DbType.MARIADB;
98-
} else if (jdbcUrl.contains(":oracle:")) {
99-
return DbType.ORACLE;
100-
} else if (jdbcUrl.contains(":sqlserver:") || jdbcUrl.contains(":microsoft:") || jdbcUrl.contains(":sqlserver2012:")) {
101-
return DbType.SQLSERVER;
102-
} else if (jdbcUrl.contains(":postgresql:")) {
103-
return DbType.POSTGRE_SQL;
104-
} else if (jdbcUrl.contains(":hsqldb:")) {
105-
return DbType.HSQL;
106-
} else if (jdbcUrl.contains(":db2:")) {
107-
return DbType.DB2;
108-
} else if (jdbcUrl.contains(":sqlite:")) {
109-
return DbType.SQLITE;
110-
} else if (jdbcUrl.contains(":h2:")) {
111-
return DbType.H2;
112-
} else if (isMatchedRegex(":dm\\d*:", jdbcUrl)) {
113-
return DbType.DM;
114-
} else if (jdbcUrl.contains(":xugu:")) {
115-
return DbType.XUGU;
116-
} else if (isMatchedRegex(":kingbase\\d*:", jdbcUrl)) {
117-
return DbType.KINGBASE_ES;
118-
} else if (jdbcUrl.contains(":phoenix:")) {
119-
return DbType.PHOENIX;
120-
} else if (jdbcUrl.contains(":zenith:")) {
121-
return DbType.GAUSS;
122-
} else if (jdbcUrl.contains(":gbase:")) {
123-
return DbType.GBASE;
124-
} else if (jdbcUrl.contains(":gbasedbt-sqli:") || jdbcUrl.contains(":informix-sqli:")) {
125-
return DbType.GBASE_8S;
126-
} else if (jdbcUrl.contains(":ch:") || jdbcUrl.contains(":clickhouse:")) {
127-
return DbType.CLICK_HOUSE;
128-
} else if (jdbcUrl.contains(":oscar:")) {
129-
return DbType.OSCAR;
130-
} else if (jdbcUrl.contains(":sybase:")) {
131-
return DbType.SYBASE;
132-
} else if (jdbcUrl.contains(":oceanbase:")) {
133-
return DbType.OCEAN_BASE;
134-
} else if (jdbcUrl.contains(":highgo:")) {
135-
return DbType.HIGH_GO;
136-
} else if (jdbcUrl.contains(":cubrid:")) {
137-
return DbType.CUBRID;
138-
} else if (jdbcUrl.contains(":goldilocks:")) {
139-
return DbType.GOLDILOCKS;
140-
} else if (jdbcUrl.contains(":csiidb:")) {
141-
return DbType.CSIIDB;
142-
} else if (jdbcUrl.contains(":sap:")) {
143-
return DbType.SAP_HANA;
144-
} else if (jdbcUrl.contains(":impala:")) {
145-
return DbType.IMPALA;
146-
} else if (jdbcUrl.contains(":vertica:")) {
147-
return DbType.VERTICA;
148-
} else if (jdbcUrl.contains(":xcloud:")) {
149-
return DbType.XCloud;
150-
} else if (jdbcUrl.contains(":firebirdsql:")) {
151-
return DbType.FIREBIRD;
152-
} else if (jdbcUrl.contains(":redshift:")) {
153-
return DbType.REDSHIFT;
154-
} else if (jdbcUrl.contains(":opengauss:")) {
155-
return DbType.OPENGAUSS;
156-
} else if (jdbcUrl.contains(":taos:") || jdbcUrl.contains(":taos-rs:")) {
157-
return DbType.TDENGINE;
158-
} else if (jdbcUrl.contains(":informix")) {
159-
return DbType.INFORMIX;
160-
} else if (jdbcUrl.contains(":uxdb:")) {
161-
return DbType.UXDB;
162-
} else if (jdbcUrl.contains(":greenplum:")) {
163-
return DbType.GREENPLUM;
164-
} else {
165-
return DbType.OTHER;
166-
}
167-
}
85+
/**
86+
* 参考 druid 和 MyBatis-plus 的 JdbcUtils
87+
* {@link com.alibaba.druid.util.JdbcUtils#getDbType(String, String)}
88+
* {@link com.baomidou.mybatisplus.extension.toolkit.JdbcUtils#getDbType(String)}
89+
*
90+
* @param jdbcUrl jdbcURL
91+
* @return 返回数据库类型
92+
*/
93+
public static DbType parseDbType(String jdbcUrl) {
94+
jdbcUrl = jdbcUrl.toLowerCase();
95+
if (jdbcUrl.contains(":mysql:") || jdbcUrl.contains(":cobar:")) {
96+
return DbType.MYSQL;
97+
} else if (jdbcUrl.contains(":mariadb:")) {
98+
return DbType.MARIADB;
99+
} else if (jdbcUrl.contains(":oracle:")) {
100+
return DbType.ORACLE;
101+
} else if (jdbcUrl.contains(":sqlserver2012:")) {
102+
return DbType.SQLSERVER;
103+
} else if (jdbcUrl.contains(":sqlserver:") || jdbcUrl.contains(":microsoft:")) {
104+
return DbType.SQLSERVER_2005;
105+
} else if (jdbcUrl.contains(":postgresql:")) {
106+
return DbType.POSTGRE_SQL;
107+
} else if (jdbcUrl.contains(":hsqldb:")) {
108+
return DbType.HSQL;
109+
} else if (jdbcUrl.contains(":db2:")) {
110+
return DbType.DB2;
111+
} else if (jdbcUrl.contains(":sqlite:")) {
112+
return DbType.SQLITE;
113+
} else if (jdbcUrl.contains(":h2:")) {
114+
return DbType.H2;
115+
} else if (isMatchedRegex(":dm\\d*:", jdbcUrl)) {
116+
return DbType.DM;
117+
} else if (jdbcUrl.contains(":xugu:")) {
118+
return DbType.XUGU;
119+
} else if (isMatchedRegex(":kingbase\\d*:", jdbcUrl)) {
120+
return DbType.KINGBASE_ES;
121+
} else if (jdbcUrl.contains(":phoenix:")) {
122+
return DbType.PHOENIX;
123+
} else if (jdbcUrl.contains(":zenith:")) {
124+
return DbType.GAUSS;
125+
} else if (jdbcUrl.contains(":gbase:")) {
126+
return DbType.GBASE;
127+
} else if (jdbcUrl.contains(":gbasedbt-sqli:") || jdbcUrl.contains(":informix-sqli:")) {
128+
return DbType.GBASE_8S;
129+
} else if (jdbcUrl.contains(":ch:") || jdbcUrl.contains(":clickhouse:")) {
130+
return DbType.CLICK_HOUSE;
131+
} else if (jdbcUrl.contains(":oscar:")) {
132+
return DbType.OSCAR;
133+
} else if (jdbcUrl.contains(":sybase:")) {
134+
return DbType.SYBASE;
135+
} else if (jdbcUrl.contains(":oceanbase:")) {
136+
return DbType.OCEAN_BASE;
137+
} else if (jdbcUrl.contains(":highgo:")) {
138+
return DbType.HIGH_GO;
139+
} else if (jdbcUrl.contains(":cubrid:")) {
140+
return DbType.CUBRID;
141+
} else if (jdbcUrl.contains(":goldilocks:")) {
142+
return DbType.GOLDILOCKS;
143+
} else if (jdbcUrl.contains(":csiidb:")) {
144+
return DbType.CSIIDB;
145+
} else if (jdbcUrl.contains(":sap:")) {
146+
return DbType.SAP_HANA;
147+
} else if (jdbcUrl.contains(":impala:")) {
148+
return DbType.IMPALA;
149+
} else if (jdbcUrl.contains(":vertica:")) {
150+
return DbType.VERTICA;
151+
} else if (jdbcUrl.contains(":xcloud:")) {
152+
return DbType.XCloud;
153+
} else if (jdbcUrl.contains(":firebirdsql:")) {
154+
return DbType.FIREBIRD;
155+
} else if (jdbcUrl.contains(":redshift:")) {
156+
return DbType.REDSHIFT;
157+
} else if (jdbcUrl.contains(":opengauss:")) {
158+
return DbType.OPENGAUSS;
159+
} else if (jdbcUrl.contains(":taos:") || jdbcUrl.contains(":taos-rs:")) {
160+
return DbType.TDENGINE;
161+
} else if (jdbcUrl.contains(":informix")) {
162+
return DbType.INFORMIX;
163+
} else if (jdbcUrl.contains(":uxdb:")) {
164+
return DbType.UXDB;
165+
} else if (jdbcUrl.contains(":greenplum:")) {
166+
return DbType.GREENPLUM;
167+
} else {
168+
return DbType.OTHER;
169+
}
170+
}
168171

169-
/**
170-
* 正则匹配,验证成功返回 true,验证失败返回 false
171-
*/
172-
public static boolean isMatchedRegex(String regex, String jdbcUrl) {
173-
if (null == jdbcUrl) {
174-
return false;
175-
}
176-
return Pattern.compile(regex).matcher(jdbcUrl).find();
177-
}
172+
/**
173+
* 正则匹配,验证成功返回 true,验证失败返回 false
174+
*/
175+
public static boolean isMatchedRegex(String regex, String jdbcUrl) {
176+
if (null == jdbcUrl) {
177+
return false;
178+
}
179+
return Pattern.compile(regex).matcher(jdbcUrl).find();
180+
}
178181
}

mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java

+2
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ private static IDialect createDialect(DbType dbType) {
134134
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.DERBY);
135135
case SQLSERVER:
136136
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER);
137+
case SQLSERVER_2005:
138+
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER_2005);
137139
case INFORMIX:
138140
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.INFORMIX);
139141
case SYBASE:

0 commit comments

Comments
 (0)