1. 增加 GBASE_8C、GBASE_8S_PG、GOLDENDB、SUNDB、VASTBASE、YASDB、PRESTO 驱动识别

2. 修正高斯企业版数据库驱动识别问题
This commit is contained in:
ZhengJin 2025-04-08 16:06:44 +08:00
parent 06a798eed7
commit 2bd5c039d1
No known key found for this signature in database
3 changed files with 241 additions and 291 deletions

View File

@ -15,250 +15,174 @@
*/ */
package com.mybatisflex.core.dialect; package com.mybatisflex.core.dialect;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import java.util.Arrays; import java.util.Arrays;
public enum DbType { public enum DbType {
/** /** ClickHouse */
* MYSQL CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
*/
MYSQL("mysql", "MySql 数据库"),
/** /** CSIIDB */
* MARIADB CSIIDB("csiidb", "CSIIDB 数据库"),
*/
MARIADB("mariadb", "MariaDB 数据库"),
/** /** CUBRID */
* ORACLE CUBRID("cubrid", "CUBRID 数据库"),
*/
ORACLE("oracle", "Oracle11g 及以下数据库"),
/** /** DB2 */
* oracle12c
*/
ORACLE_12C("oracle12c", "Oracle12c 及以上数据库"),
/**
* DB2
*/
DB2("db2", "DB2 数据库"), DB2("db2", "DB2 数据库"),
DB2_1005("db2_1005", "DB2 10.5版本数据库"), DB2_1005("db2_1005", "DB2 10.5版本数据库"),
/** /** derby */
* 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("derby", "Derby 数据库"),
/** /** DM */
* HighGo DM("dm", "达梦数据库"),
*/
HIGH_GO("highgo", "瀚高数据库"),
/** /** Doris 兼容 Mysql使用 MySql 驱动和协议 */
* 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("doris", "doris 数据库"), DORIS("doris", "doris 数据库"),
/** /** Duckdb */
* Trino
*/
TRINO("trino", "trino 数据库"),
/**
* Duckdb
*/
DUCKDB("duckdb", "duckdb 数据库"), DUCKDB("duckdb", "duckdb 数据库"),
/** /** Firebird */
* UNKNOWN DB 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", "其他数据库"); OTHER("other", "其他数据库");
/** /** 数据库名称 */
* 数据库名称
*/
private final String name; private final String name;
/** /** 描述 */
* 描述
*/
private final String remarks; private final String remarks;
DbType(String name, String remarks) { DbType(String name, String remarks) {
this.name = name; this.name = name;
this.remarks = remarks; this.remarks = remarks;

View File

@ -124,86 +124,106 @@ public class DbTypeUtil {
*/ */
public static DbType parseDbType(String jdbcUrl) { public static DbType parseDbType(String jdbcUrl) {
jdbcUrl = jdbcUrl.toLowerCase(); 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; return DbType.MYSQL;
} else if (jdbcUrl.contains(":mariadb:")) { } else if (jdbcUrl.contains(":csiidb:")) {
return DbType.MARIADB; return DbType.CSIIDB;
} else if (jdbcUrl.contains(":oracle:")) { } else if (jdbcUrl.contains(":cubrid:")) {
return DbType.ORACLE; return DbType.CUBRID;
} 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(":db2:")) { } else if (jdbcUrl.contains(":db2:")) {
return DbType.DB2; return DbType.DB2;
} else if (jdbcUrl.contains(":sqlite:")) { } else if (jdbcUrl.contains(":derby:")) {
return DbType.SQLITE; return DbType.DERBY;
} else if (jdbcUrl.contains(":h2:")) {
return DbType.H2;
} else if (isMatchedRegex(":dm\\d*:", jdbcUrl)) { } else if (isMatchedRegex(":dm\\d*:", jdbcUrl)) {
return DbType.DM; return DbType.DM;
} else if (jdbcUrl.contains(":xugu:")) { } else if (jdbcUrl.contains(":duckdb:")) {
return DbType.XUGU; return DbType.DUCKDB;
} else if (isMatchedRegex(":kingbase\\d*:", jdbcUrl)) { } else if (jdbcUrl.contains(":firebirdsql:")) {
return DbType.KINGBASE_ES; return DbType.FIREBIRD;
} else if (jdbcUrl.contains(":phoenix:")) { } else if (jdbcUrl.contains(":gaussdb:") || jdbcUrl.contains(":zenith:")) {
return DbType.PHOENIX;
} else if (jdbcUrl.contains(":zenith:")) {
return DbType.GAUSS; return DbType.GAUSS;
} else if (jdbcUrl.contains(":gbase:")) { } else if (jdbcUrl.contains(":gbase:")) {
return DbType.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:")) { } else if (jdbcUrl.contains(":gbasedbt-sqli:") || jdbcUrl.contains(":informix-sqli:")) {
return DbType.GBASE_8S; return DbType.GBASE_8S;
} else if (jdbcUrl.contains(":ch:") || jdbcUrl.contains(":clickhouse:")) { } else if (jdbcUrl.contains(":goldendb:")) {
return DbType.CLICK_HOUSE; return DbType.GOLDENDB;
} 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(":goldilocks:")) { } else if (jdbcUrl.contains(":goldilocks:")) {
return DbType.GOLDILOCKS; return DbType.GOLDILOCKS;
} else if (jdbcUrl.contains(":csiidb:")) { } else if (jdbcUrl.contains(":greenplum:")) {
return DbType.CSIIDB; return DbType.GREENPLUM;
} else if (jdbcUrl.contains(":sap:")) { } else if (jdbcUrl.contains(":h2:")) {
return DbType.SAP_HANA; 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:")) { } else if (jdbcUrl.contains(":impala:")) {
return DbType.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:")) { } else if (jdbcUrl.contains(":vertica:")) {
return DbType.VERTICA; return DbType.VERTICA;
} else if (jdbcUrl.contains(":xcloud:")) { } else if (jdbcUrl.contains(":xcloud:")) {
return DbType.XCloud; return DbType.XCloud;
} else if (jdbcUrl.contains(":firebirdsql:")) { } else if (jdbcUrl.contains(":xugu:")) {
return DbType.FIREBIRD; return DbType.XUGU;
} else if (jdbcUrl.contains(":redshift:")) { } else if (jdbcUrl.contains(":yasdb:")) {
return DbType.REDSHIFT; return DbType.YASDB;
} 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 { } else {
return DbType.OTHER; return DbType.OTHER;
} }

View File

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