mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
!523 FIX [Bug]: sqlserver2022下方言识别不对,手动set也无效 https://gitee.com/mybatis-flex/mybatis-flex/issues/IBIHW3
Merge pull request !523 from macy0122/main
This commit is contained in:
parent
a7cf8f2713
commit
c01c476ecb
@ -19,12 +19,13 @@ package com.mybatisflex.core.dialect;
|
|||||||
import com.mybatisflex.core.exception.FlexExceptions;
|
import com.mybatisflex.core.exception.FlexExceptions;
|
||||||
import com.mybatisflex.core.exception.locale.LocalizedFormats;
|
import com.mybatisflex.core.exception.locale.LocalizedFormats;
|
||||||
import com.mybatisflex.core.util.StringUtil;
|
import com.mybatisflex.core.util.StringUtil;
|
||||||
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DbType 解析 工具类
|
* DbType 解析 工具类
|
||||||
@ -39,14 +40,46 @@ public class DbTypeUtil {
|
|||||||
*/
|
*/
|
||||||
public static DbType getDbType(DataSource dataSource) {
|
public static DbType getDbType(DataSource dataSource) {
|
||||||
String jdbcUrl = getJdbcUrl(dataSource);
|
String jdbcUrl = getJdbcUrl(dataSource);
|
||||||
|
|
||||||
if (StringUtil.hasText(jdbcUrl)) {
|
if (StringUtil.hasText(jdbcUrl)) {
|
||||||
|
//FIX [Bug]: sqlserver2022下方言识别不对,手动set也无效 https://gitee.com/mybatis-flex/mybatis-flex/issues/IBIHW3
|
||||||
|
if (jdbcUrl.contains(":sqlserver:")) {
|
||||||
|
return getSqlserverDbType(dataSource);
|
||||||
|
}
|
||||||
return parseDbType(jdbcUrl);
|
return parseDbType(jdbcUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalStateException("Can not get dataSource jdbcUrl: " + dataSource.getClass().getName());
|
throw new IllegalStateException("Can not get dataSource jdbcUrl: " + dataSource.getClass().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过数据源获取SQLserver 版本
|
||||||
|
*
|
||||||
|
* @return DbType
|
||||||
|
*/
|
||||||
|
private static DbType getSqlserverDbType(DataSource dataSource) {
|
||||||
|
try (ResultSet resultSet = dataSource.getConnection().prepareStatement("SELECT @@VERSION").executeQuery()) {
|
||||||
|
//SELECT @@VERSION 查询返回信息:
|
||||||
|
/*
|
||||||
|
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
|
||||||
|
Sep 24 2019 13:48:23
|
||||||
|
Copyright (C) 2019 Microsoft Corporation
|
||||||
|
Enterprise Edition (64-bit) on Windows Server 2019 Datacenter 10.0 <X64> (Build 17763: ) (Hypervisor)
|
||||||
|
*/
|
||||||
|
if (resultSet.next()) {
|
||||||
|
String version = resultSet.getString(1);
|
||||||
|
if (StringUtil.hasText(version)) {
|
||||||
|
String year = version.substring(21, 25);
|
||||||
|
if (StringUtil.hasText(year) && year.compareTo("2005") <= 0) {
|
||||||
|
return DbType.SQLSERVER_2005;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DbType.SQLSERVER;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
return DbType.SQLSERVER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过数据源中获取 jdbc 的 url 配置
|
* 通过数据源中获取 jdbc 的 url 配置
|
||||||
* 符合 HikariCP, druid, c3p0, DBCP, beecp 数据源框架 以及 MyBatis UnpooledDataSource 的获取规则
|
* 符合 HikariCP, druid, c3p0, DBCP, beecp 数据源框架 以及 MyBatis UnpooledDataSource 的获取规则
|
||||||
@ -89,10 +122,6 @@ 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(":sqlserver2012:")) {
|
|
||||||
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:")) {
|
||||||
@ -159,9 +188,9 @@ public class DbTypeUtil {
|
|||||||
return DbType.GREENPLUM;
|
return DbType.GREENPLUM;
|
||||||
} else if (jdbcUrl.contains(":lealone:")) {
|
} else if (jdbcUrl.contains(":lealone:")) {
|
||||||
return DbType.LEALONE;
|
return DbType.LEALONE;
|
||||||
} else if (jdbcUrl.contains(":hive2:")) {
|
} else if (jdbcUrl.contains(":hive2:")) {
|
||||||
return DbType.HIVE;
|
return DbType.HIVE;
|
||||||
} else if (jdbcUrl.contains(":duckdb:")) {
|
} else if (jdbcUrl.contains(":duckdb:")) {
|
||||||
return DbType.DUCKDB;
|
return DbType.DUCKDB;
|
||||||
} else {
|
} else {
|
||||||
return DbType.OTHER;
|
return DbType.OTHER;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user