This commit is contained in:
Michael Yang 2025-04-24 18:28:09 +08:00
commit a12f528388
3 changed files with 241 additions and 291 deletions

View File

@ -15,250 +15,174 @@
*/
package com.mybatisflex.core.dialect;
import com.mybatisflex.core.util.StringUtil;
import java.util.Arrays;
public enum DbType {
/**
* MYSQL
*/
MYSQL("mysql", "MySql 数据库"),
/** ClickHouse */
CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
/**
* MARIADB
*/
MARIADB("mariadb", "MariaDB 数据库"),
/** CSIIDB */
CSIIDB("csiidb", "CSIIDB 数据库"),
/**
* ORACLE
*/
ORACLE("oracle", "Oracle11g 及以下数据库"),
/** CUBRID */
CUBRID("cubrid", "CUBRID 数据库"),
/**
* oracle12c
*/
ORACLE_12C("oracle12c", "Oracle12c 及以上数据库"),
/**
* DB2
*/
/** DB2 */
DB2("db2", "DB2 数据库"),
DB2_1005("db2_1005", "DB2 10.5版本数据库"),
/**
* H2
*/
H2("h2", "H2 数据库"),
/**
* HSQL
*/
HSQL("hsql", "HSQL 数据库"),
/**
* SQLITE
*/
SQLITE("sqlite", "SQLite 数据库"),
/**
* POSTGRE
*/
POSTGRE_SQL("postgresql", "PostgreSQL 数据库"),
/**
* SQLSERVER
*/
SQLSERVER("sqlserver", "SQLServer 数据库"),
/**
* SqlServer 2005 数据库
*/
SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
/**
* DM
*/
DM("dm", "达梦数据库"),
/**
* xugu
*/
XUGU("xugu", "虚谷数据库"),
/**
* Kingbase
*/
KINGBASE_ES("kingbasees", "人大金仓数据库"),
/**
* Phoenix
*/
PHOENIX("phoenix", "Phoenix HBase 数据库"),
/**
* Gauss
*/
GAUSS("gauss", "Gauss 数据库"),
/**
* ClickHouse
*/
CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
/**
* GBase
*/
GBASE("gbase", "南大通用(华库)数据库"),
/**
* GBase-8s
*/
GBASE_8S("gbase-8s", "南大通用数据库 GBase 8s"),
/**
* Oscar
*/
OSCAR("oscar", "神通数据库"),
/**
* Sybase
*/
SYBASE("sybase", "Sybase ASE 数据库"),
/**
* OceanBase
*/
OCEAN_BASE("oceanbase", "OceanBase 数据库"),
/**
* Firebird
*/
FIREBIRD("Firebird", "Firebird 数据库"),
/**
* derby
*/
/** derby */
DERBY("derby", "Derby 数据库"),
/**
* HighGo
*/
HIGH_GO("highgo", "瀚高数据库"),
/** DM */
DM("dm", "达梦数据库"),
/**
* CUBRID
*/
CUBRID("cubrid", "CUBRID 数据库"),
/**
* GOLDILOCKS
*/
GOLDILOCKS("goldilocks", "GOLDILOCKS 数据库"),
/**
* CSIIDB
*/
CSIIDB("csiidb", "CSIIDB 数据库"),
/**
* CSIIDB
*/
SAP_HANA("hana", "SAP_HANA 数据库"),
/**
* Impala
*/
IMPALA("impala", "impala 数据库"),
/**
* Vertica
*/
VERTICA("vertica", "vertica数据库"),
/**
* 东方国信 xcloud
*/
XCloud("xcloud", "行云数据库"),
/**
* redshift
*/
REDSHIFT("redshift", "亚马逊 redshift 数据库"),
/**
* openGauss
*/
OPENGAUSS("openGauss", "华为 openGauss 数据库"),
/**
* TDengine
*/
TDENGINE("TDengine", "TDengine 数据库"),
/**
* Informix
*/
INFORMIX("informix", "Informix 数据库"),
/**
* sinodb
*/
SINODB("sinodb", "SinoDB 数据库"),
/**
* uxdb
*/
UXDB("uxdb", "优炫数据库"),
/**
* greenplum
*/
GREENPLUM("greenplum", "greenplum 数据库"),
/**
* lealone
*/
LEALONE("lealone", "lealone 数据库"),
/**
* Hive SQL
*/
HIVE("Hive", "Hive SQL"),
/**
* Doris 兼容 Mysql使用 MySql 驱动和协议
*/
/** Doris 兼容 Mysql使用 MySql 驱动和协议 */
DORIS("doris", "doris 数据库"),
/**
* Trino
*/
TRINO("trino", "trino 数据库"),
/**
* Duckdb
*/
/** Duckdb */
DUCKDB("duckdb", "duckdb 数据库"),
/**
* UNKNOWN DB
*/
/** Firebird */
FIREBIRD("Firebird", "Firebird 数据库"),
/** Gauss */
GAUSS("gauss", "Gauss 数据库"),
/** GBase */
GBASE("gbase", "南大通用(华库)数据库"),
/** GBase-8c */
GBASE_8C("gbase-8c", "南大通用数据库 GBase 8c"),
/** GBase-8s */
GBASE_8S("gbase-8s", "南大通用数据库 GBase 8s"),
/** GBase-8s-pg */
GBASE_8S_PG("gbase-8s-pg", "南大通用数据库 GBase 8s兼容pg"),
/** GOLDENDB */
GOLDENDB("goldendb", "GoldenDB数据库"),
/** GOLDILOCKS */
GOLDILOCKS("goldilocks", "GOLDILOCKS 数据库"),
/** greenplum */
GREENPLUM("greenplum", "greenplum 数据库"),
/** H2 */
H2("h2", "H2 数据库"),
/** HighGo */
HIGH_GO("highgo", "瀚高数据库"),
/** Hive SQL */
HIVE("Hive", "Hive SQL"),
/** HSQL */
HSQL("hsql", "HSQL 数据库"),
/** Impala */
IMPALA("impala", "impala 数据库"),
/** Informix */
INFORMIX("informix", "Informix 数据库"),
/** Kingbase */
KINGBASE_ES("kingbasees", "人大金仓数据库"),
/** lealone */
LEALONE("lealone", "lealone 数据库"),
/** MARIADB */
MARIADB("mariadb", "MariaDB 数据库"),
/** MYSQL */
MYSQL("mysql", "MySql 数据库"),
/** OceanBase */
OCEAN_BASE("oceanbase", "OceanBase 数据库"),
/** openGauss */
OPENGAUSS("openGauss", "华为 openGauss 数据库"),
/** ORACLE */
ORACLE("oracle", "Oracle11g 及以下数据库"),
/** oracle12c */
ORACLE_12C("oracle12c", "Oracle12c 及以上数据库"),
/** Oscar */
OSCAR("oscar", "神通数据库"),
/** Phoenix */
PHOENIX("phoenix", "Phoenix HBase 数据库"),
/** POSTGRE_SQL */
POSTGRE_SQL("postgresql", "PostgreSQL 数据库"),
/** presto */
PRESTO("presto", "Presto数据库"),
/** redshift */
REDSHIFT("redshift", "亚马逊 redshift 数据库"),
/** SAP_HANA */
SAP_HANA("hana", "SAP_HANA 数据库"),
/** sinodb */
SINODB("sinodb", "SinoDB 数据库"),
/** SQLITE */
SQLITE("sqlite", "SQLite 数据库"),
/** SQLSERVER */
SQLSERVER("sqlserver", "SQLServer 数据库"),
/** SqlServer 2005 数据库 */
SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
/** SUNDB */
SUNDB("sundb", "SUNDB数据库"),
/** Sybase */
SYBASE("sybase", "Sybase ASE 数据库"),
/** TDengine */
TDENGINE("TDengine", "TDengine 数据库"),
/** Trino */
TRINO("trino", "trino 数据库"),
/** uxdb */
UXDB("uxdb", "优炫数据库"),
/** VASTBASE */
VASTBASE("vastbase", "Vastbase数据库"),
/** Vertica */
VERTICA("vertica", "vertica数据库"),
/** XCloud */
XCloud("xcloud", "行云数据库"),
/** xugu */
XUGU("xugu", "虚谷数据库"),
/** yasdb */
YASDB("yasdb", "崖山数据库"),
/** OTHER */
OTHER("other", "其他数据库");
/**
* 数据库名称
*/
/** 数据库名称 */
private final String name;
/**
* 描述
*/
/** 描述 */
private final String remarks;
DbType(String name, String remarks) {
this.name = name;
this.remarks = remarks;

View File

@ -63,15 +63,15 @@ public class DbTypeUtil {
*/
private static DbType getSqlserverDbType(DataSource dataSource) {
try (Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT @@VERSION");
ResultSet resultSet = preparedStatement.executeQuery()) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT @@VERSION");
ResultSet resultSet = preparedStatement.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)
*/
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)) {
@ -124,86 +124,106 @@ public class DbTypeUtil {
*/
public static DbType parseDbType(String jdbcUrl) {
jdbcUrl = jdbcUrl.toLowerCase();
if (jdbcUrl.contains(":mysql:") || jdbcUrl.contains(":cobar:")) {
if (jdbcUrl.contains(":ch:") || jdbcUrl.contains(":clickhouse:")) {
return DbType.CLICK_HOUSE;
} else if (jdbcUrl.contains(":cobar:")) {
return DbType.MYSQL;
} else if (jdbcUrl.contains(":mariadb:")) {
return DbType.MARIADB;
} else if (jdbcUrl.contains(":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:")) {
return DbType.POSTGRE_SQL;
} else if (jdbcUrl.contains(":hsqldb:")) {
return DbType.HSQL;
} else if (jdbcUrl.contains(":csiidb:")) {
return DbType.CSIIDB;
} else if (jdbcUrl.contains(":cubrid:")) {
return DbType.CUBRID;
} else if (jdbcUrl.contains(":db2:")) {
return DbType.DB2;
} else if (jdbcUrl.contains(":sqlite:")) {
return DbType.SQLITE;
} else if (jdbcUrl.contains(":h2:")) {
return DbType.H2;
} else if (jdbcUrl.contains(":derby:")) {
return DbType.DERBY;
} else if (isMatchedRegex(":dm\\d*:", jdbcUrl)) {
return DbType.DM;
} else if (jdbcUrl.contains(":xugu:")) {
return DbType.XUGU;
} else if (isMatchedRegex(":kingbase\\d*:", jdbcUrl)) {
return DbType.KINGBASE_ES;
} else if (jdbcUrl.contains(":phoenix:")) {
return DbType.PHOENIX;
} else if (jdbcUrl.contains(":zenith:")) {
} else if (jdbcUrl.contains(":duckdb:")) {
return DbType.DUCKDB;
} else if (jdbcUrl.contains(":firebirdsql:")) {
return DbType.FIREBIRD;
} else if (jdbcUrl.contains(":gaussdb:") || jdbcUrl.contains(":zenith:")) {
return DbType.GAUSS;
} else if (jdbcUrl.contains(":gbase:")) {
return DbType.GBASE;
} else if (jdbcUrl.contains(":gbase8c:")) {
return DbType.GBASE_8C;
} else if (jdbcUrl.contains(":gbase8s-pg:")) {
return DbType.GBASE_8S_PG;
} else if (jdbcUrl.contains(":gbasedbt-sqli:") || jdbcUrl.contains(":informix-sqli:")) {
return DbType.GBASE_8S;
} else if (jdbcUrl.contains(":ch:") || jdbcUrl.contains(":clickhouse:")) {
return DbType.CLICK_HOUSE;
} else if (jdbcUrl.contains(":oscar:")) {
return DbType.OSCAR;
} else if (jdbcUrl.contains(":sybase:")) {
return DbType.SYBASE;
} else if (jdbcUrl.contains(":oceanbase:")) {
return DbType.OCEAN_BASE;
} else if (jdbcUrl.contains(":highgo:")) {
return DbType.HIGH_GO;
} else if (jdbcUrl.contains(":cubrid:")) {
return DbType.CUBRID;
} else if (jdbcUrl.contains(":goldendb:")) {
return DbType.GOLDENDB;
} else if (jdbcUrl.contains(":goldilocks:")) {
return DbType.GOLDILOCKS;
} else if (jdbcUrl.contains(":csiidb:")) {
return DbType.CSIIDB;
} else if (jdbcUrl.contains(":sap:")) {
return DbType.SAP_HANA;
} else if (jdbcUrl.contains(":greenplum:")) {
return DbType.GREENPLUM;
} else if (jdbcUrl.contains(":h2:")) {
return DbType.H2;
} else if (jdbcUrl.contains(":highgo:")) {
return DbType.HIGH_GO;
} else if (jdbcUrl.contains(":hive2:") || jdbcUrl.contains(":inceptor2:")) {
return DbType.HIVE;
} else if (jdbcUrl.contains(":hsqldb:")) {
return DbType.HSQL;
} else if (jdbcUrl.contains(":impala:")) {
return DbType.IMPALA;
} else if (jdbcUrl.contains(":informix")) {
return DbType.INFORMIX;
} else if (jdbcUrl.contains(":kingbase\\d*:") && isMatchedRegex(":kingbase\\d*:", jdbcUrl)) {
return DbType.KINGBASE_ES;
} else if (jdbcUrl.contains(":lealone:")) {
return DbType.LEALONE;
} else if (jdbcUrl.contains(":mariadb:")) {
return DbType.MARIADB;
} else if (jdbcUrl.contains(":mysql:")) {
return DbType.MYSQL;
} else if (jdbcUrl.contains(":oceanbase:")) {
return DbType.OCEAN_BASE;
} else if (jdbcUrl.contains(":opengauss:")) {
return DbType.OPENGAUSS;
} else if (jdbcUrl.contains(":oracle:")) {
return DbType.ORACLE;
} else if (jdbcUrl.contains(":oscar:")) {
return DbType.OSCAR;
} else if (jdbcUrl.contains(":phoenix:")) {
return DbType.PHOENIX;
} else if (jdbcUrl.contains(":postgresql:")) {
return DbType.POSTGRE_SQL;
} else if (jdbcUrl.contains(":presto:")) {
return DbType.PRESTO;
} else if (jdbcUrl.contains(":redshift:")) {
return DbType.REDSHIFT;
} else if (jdbcUrl.contains(":sap:")) {
return DbType.SAP_HANA;
} else if (jdbcUrl.contains(":sinodb")) {
return DbType.SINODB;
} else if (jdbcUrl.contains(":sqlite:")) {
return DbType.SQLITE;
} else if (jdbcUrl.contains(":sqlserver:")) {
return DbType.SQLSERVER_2005;
} else if (jdbcUrl.contains(":sqlserver2012:")) {
return DbType.SQLSERVER;
} else if (jdbcUrl.contains(":sundb:")) {
return DbType.SUNDB;
} else if (jdbcUrl.contains(":sybase:")) {
return DbType.SYBASE;
} else if (jdbcUrl.contains(":taos:") || jdbcUrl.contains(":taos-rs:")) {
return DbType.TDENGINE;
} else if (jdbcUrl.contains(":trino:")) {
return DbType.TRINO;
} else if (jdbcUrl.contains(":uxdb:")) {
return DbType.UXDB;
} else if (jdbcUrl.contains(":vastbase:")) {
return DbType.VASTBASE;
} else if (jdbcUrl.contains(":vertica:")) {
return DbType.VERTICA;
} else if (jdbcUrl.contains(":xcloud:")) {
return DbType.XCloud;
} else if (jdbcUrl.contains(":firebirdsql:")) {
return DbType.FIREBIRD;
} else if (jdbcUrl.contains(":redshift:")) {
return DbType.REDSHIFT;
} else if (jdbcUrl.contains(":opengauss:")) {
return DbType.OPENGAUSS;
} else if (jdbcUrl.contains(":taos:") || jdbcUrl.contains(":taos-rs:")) {
return DbType.TDENGINE;
} else if (jdbcUrl.contains(":informix")) {
return DbType.INFORMIX;
} else if (jdbcUrl.contains(":sinodb")) {
return DbType.SINODB;
} else if (jdbcUrl.contains(":uxdb:")) {
return DbType.UXDB;
} else if (jdbcUrl.contains(":greenplum:")) {
return DbType.GREENPLUM;
} else if (jdbcUrl.contains(":lealone:")) {
return DbType.LEALONE;
} else if (jdbcUrl.contains(":hive2:")) {
return DbType.HIVE;
} else if (jdbcUrl.contains(":duckdb:")) {
return DbType.DUCKDB;
} else if (jdbcUrl.contains(":xugu:")) {
return DbType.XUGU;
} else if (jdbcUrl.contains(":yasdb:")) {
return DbType.YASDB;
} else {
return DbType.OTHER;
}

View File

@ -106,6 +106,9 @@ public class DialectFactory {
case CSIIDB:
case HIVE:
case DORIS:
case GOLDENDB:
case SUNDB:
case YASDB:
return new CommonsDialectImpl(KeywordWrap.BACK_QUOTE, LimitOffsetProcessor.MYSQL);
case CLICK_HOUSE:
return new ClickhouseDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.MYSQL);
@ -131,6 +134,11 @@ public class DialectFactory {
case UXDB:
case LEALONE:
case DUCKDB:
case GBASE_8C:
case GBASE_8S_PG:
case VASTBASE:
case TRINO:
case PRESTO:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.POSTGRESQL);
case TDENGINE:
return new CommonsDialectImpl(KeywordWrap.BACK_QUOTE, LimitOffsetProcessor.POSTGRESQL);
@ -151,8 +159,6 @@ public class DialectFactory {
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.SINODB);
case SYBASE:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.SYBASE);
case TRINO:
return new CommonsDialectImpl(KeywordWrap.NONE, LimitOffsetProcessor.SQLSERVER);
default:
return new CommonsDialectImpl();
}