Merge pull request #225 from farukonfly/main

Add support for DB2 10.5 version
This commit is contained in:
Michael Yang 2023-12-03 12:03:43 +08:00 committed by GitHub
commit 0c42f45d90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 4 deletions

View File

@ -42,6 +42,7 @@ public enum DbType {
* DB2 * DB2
*/ */
DB2("db2", "DB2 数据库"), DB2("db2", "DB2 数据库"),
DB2_1005("db2_1005", "DB2 10.5版本数据库"),
/** /**
* H2 * H2

View File

@ -16,15 +16,15 @@
package com.mybatisflex.core.dialect; package com.mybatisflex.core.dialect;
import java.util.EnumMap;
import java.util.Map;
import org.apache.ibatis.util.MapUtil;
import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.dialect.impl.CommonsDialectImpl; import com.mybatisflex.core.dialect.impl.CommonsDialectImpl;
import com.mybatisflex.core.dialect.impl.DB2105Dialect;
import com.mybatisflex.core.dialect.impl.DmDialect; import com.mybatisflex.core.dialect.impl.DmDialect;
import com.mybatisflex.core.dialect.impl.OracleDialect; import com.mybatisflex.core.dialect.impl.OracleDialect;
import com.mybatisflex.core.util.ObjectUtil; import com.mybatisflex.core.util.ObjectUtil;
import org.apache.ibatis.util.MapUtil;
import java.util.EnumMap;
import java.util.Map;
/** /**
* 方言工厂类用于创建方言 * 方言工厂类用于创建方言
@ -139,6 +139,8 @@ public class DialectFactory {
case FIREBIRD: case FIREBIRD:
case DB2: case DB2:
return new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.DERBY); return new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.DERBY);
case DB2_1005:
return new DB2105Dialect(KeywordWrap.NONE, DB2105Dialect.DB2105LimitOffsetProcessor.DB2105);
case SQLSERVER: case SQLSERVER:
return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER); return new CommonsDialectImpl(KeywordWrap.SQUARE_BRACKETS, LimitOffsetProcessor.SQLSERVER);
case SQLSERVER_2005: case SQLSERVER_2005:

View File

@ -0,0 +1,36 @@
package com.mybatisflex.core.dialect.impl;
import com.mybatisflex.core.dialect.KeywordWrap;
import com.mybatisflex.core.dialect.LimitOffsetProcessor;
public class DB2105Dialect extends CommonsDialectImpl {
//TODO: 根据DatabaseMetaData获取数据库厂商名和版本号
public static final String DB2_1005_PRODUCT_VERSION = "1005";
public static final String DB2_PRODUCT_NAME = "DB2";
public DB2105Dialect(KeywordWrap keywordWrap, LimitOffsetProcessor limitOffsetProcessor) {
super(keywordWrap, limitOffsetProcessor);
}
public interface DB2105LimitOffsetProcessor {
LimitOffsetProcessor DB2105 = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
StringBuilder limitSqlFragment = new StringBuilder(
"select * from ( select u_.*,rownumber() over() as rn from ( ");
limitSqlFragment.append(sql);
limitSqlFragment.append(" )u_ ) temp_ where temp_.rn between ");
if (limitRows != null && limitOffset != null) {
limitSqlFragment.append(limitOffset + 1);
limitSqlFragment.append(" and ");
limitSqlFragment.append(limitRows + limitOffset);
} else if (limitRows != null) {
limitSqlFragment.append("1 and ");
limitSqlFragment.append(limitRows);
} else {
return sql;
}
return limitSqlFragment;
};
}
}