mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 01:28:24 +08:00
fix:DB2 V10.5 不支持SUBSTRING函数,把SUBSTRING替换成SUBSTR
This commit is contained in:
parent
8724014d12
commit
7228387ec2
@ -1,5 +1,6 @@
|
||||
package com.mybatisflex.core.dialect.impl;
|
||||
|
||||
import static com.mybatisflex.core.constant.FuncName.SUBSTRING;
|
||||
import static com.mybatisflex.core.constant.SqlConsts.DELIMITER;
|
||||
import static com.mybatisflex.core.constant.SqlConsts.NULLS_FIRST;
|
||||
import static com.mybatisflex.core.constant.SqlConsts.NULLS_LAST;
|
||||
@ -18,14 +19,24 @@ public class DB2105Dialect extends CommonsDialectImpl {
|
||||
//TODO: 根据DatabaseMetaData获取数据库厂商名和版本号
|
||||
public static final String DB2_1005_PRODUCT_VERSION = "1005";
|
||||
public static final String DB2_PRODUCT_NAME = "DB2";
|
||||
private static final Pattern pattern = Pattern.compile("(\\S+)\\s+(\\S*)\\s*("+NULLS_FIRST.trim()+"|"+NULLS_LAST.trim()+")");
|
||||
|
||||
private static final Pattern ORDERBY_PATTERN = Pattern.compile("(\\S+)\\s+(\\S*)\\s*("+NULLS_FIRST.trim()+"|"+NULLS_LAST.trim()+")");
|
||||
private static final Pattern SUBSTRING_PATTERN = Pattern.compile("((?i)"+SUBSTRING.trim()+")(\\s*)(\\(.*?\\))");
|
||||
|
||||
public DB2105Dialect(KeywordWrap keywordWrap, LimitOffsetProcessor limitOffsetProcessor) {
|
||||
super(keywordWrap, limitOffsetProcessor);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public String buildSelectSql(QueryWrapper queryWrapper){
|
||||
String sql = super.buildSelectSql(queryWrapper);
|
||||
if(sql!=null){
|
||||
Matcher matcher = SUBSTRING_PATTERN.matcher(sql);
|
||||
sql = matcher.replaceAll("SUBSTR$2$3");
|
||||
}
|
||||
return sql;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildOrderBySql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, List<QueryTable> queryTables) {
|
||||
List<QueryOrderBy> orderBys = CPI.getOrderBys(queryWrapper);
|
||||
if (orderBys != null && !orderBys.isEmpty()) {
|
||||
@ -33,7 +44,7 @@ public class DB2105Dialect extends CommonsDialectImpl {
|
||||
int index = 0;
|
||||
for (QueryOrderBy orderBy : orderBys) {
|
||||
String orderBySql = orderBy.toSql(queryTables, this);
|
||||
orderBySql = convertOderbySqlForDB2105(orderBySql); // 转换SQL语句
|
||||
orderBySql = convertOrderBySqlForDB2105(orderBySql); // 转换SQL语句
|
||||
sqlBuilder.append(orderBySql);
|
||||
if (index != orderBys.size() - 1) {
|
||||
sqlBuilder.append(DELIMITER);
|
||||
@ -43,8 +54,8 @@ public class DB2105Dialect extends CommonsDialectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
private String convertOderbySqlForDB2105(String sql) {
|
||||
Matcher matcher = pattern.matcher(sql);
|
||||
private String convertOrderBySqlForDB2105(String sql) {
|
||||
Matcher matcher = ORDERBY_PATTERN.matcher(sql);
|
||||
if (matcher.find()) {
|
||||
String column = matcher.group(1);
|
||||
String orderType = matcher.group(2);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user