diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbType.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbType.java index 2f273804..61f5a262 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbType.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbType.java @@ -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; diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbTypeUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbTypeUtil.java index 822111f1..aacbae23 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbTypeUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DbTypeUtil.java @@ -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 (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 (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; } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java index 574788e7..0489269f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java @@ -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(); }