001/*
002 *  Copyright (c) 2022-2025, Mybatis-Flex (fuhai999@gmail.com).
003 *  <p>
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *  <p>
008 *  http://www.apache.org/licenses/LICENSE-2.0
009 *  <p>
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package com.mybatisflex.core.dialect;
017
018import com.mybatisflex.core.util.StringUtil;
019import java.util.Arrays;
020
021public enum DbType {
022
023    /** ClickHouse */
024    CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
025
026    /** CSIIDB */
027    CSIIDB("csiidb", "CSIIDB 数据库"),
028
029    /** CUBRID */
030    CUBRID("cubrid", "CUBRID 数据库"),
031
032    /** DB2 */
033    DB2("db2", "DB2 数据库"),
034    DB2_1005("db2_1005", "DB2 10.5版本数据库"),
035
036    /** derby */
037    DERBY("derby", "Derby 数据库"),
038
039    /** DM */
040    DM("dm", "达梦数据库"),
041
042    /** Doris 兼容 Mysql,使用 MySql 驱动和协议 */
043    DORIS("doris", "doris 数据库"),
044
045    /** Duckdb */
046    DUCKDB("duckdb", "duckdb 数据库"),
047
048    /** Firebird */
049    FIREBIRD("Firebird", "Firebird 数据库"),
050
051    /** Gauss */
052    GAUSS("gauss", "Gauss 数据库"),
053
054    /** GBase */
055    GBASE("gbase", "南大通用(华库)数据库"),
056
057    /** GBase-8c */
058    GBASE_8C("gbase-8c", "南大通用数据库 GBase 8c"),
059
060    /** GBase-8s */
061    GBASE_8S("gbase-8s", "南大通用数据库 GBase 8s"),
062
063    /** GBase-8s-pg */
064    GBASE_8S_PG("gbase-8s-pg", "南大通用数据库 GBase 8s兼容pg"),
065
066    /** GOLDENDB */
067    GOLDENDB("goldendb", "GoldenDB数据库"),
068
069    /** GOLDILOCKS */
070    GOLDILOCKS("goldilocks", "GOLDILOCKS 数据库"),
071
072    /** greenplum */
073    GREENPLUM("greenplum", "greenplum 数据库"),
074
075    /** H2 */
076    H2("h2", "H2 数据库"),
077
078    /** HighGo */
079    HIGH_GO("highgo", "瀚高数据库"),
080
081    /** Hive SQL */
082    HIVE("Hive", "Hive SQL"),
083
084    /** HSQL */
085    HSQL("hsql", "HSQL 数据库"),
086
087    /** Impala */
088    IMPALA("impala", "impala 数据库"),
089
090    /** Informix */
091    INFORMIX("informix", "Informix 数据库"),
092
093    /** Kingbase */
094    KINGBASE_ES("kingbasees", "人大金仓数据库"),
095
096    /** lealone */
097    LEALONE("lealone", "lealone 数据库"),
098
099    /** MARIADB */
100    MARIADB("mariadb", "MariaDB 数据库"),
101
102    /** MYSQL */
103    MYSQL("mysql", "MySql 数据库"),
104
105    /** OceanBase */
106    OCEAN_BASE("oceanbase", "OceanBase 数据库"),
107
108    /** openGauss */
109    OPENGAUSS("openGauss", "华为 openGauss 数据库"),
110
111    /** ORACLE */
112    ORACLE("oracle", "Oracle11g 及以下数据库"),
113
114    /** oracle12c */
115    ORACLE_12C("oracle12c", "Oracle12c 及以上数据库"),
116
117    /** Oscar */
118    OSCAR("oscar", "神通数据库"),
119
120    /** Phoenix */
121    PHOENIX("phoenix", "Phoenix HBase 数据库"),
122
123    /** POSTGRE_SQL */
124    POSTGRE_SQL("postgresql", "PostgreSQL 数据库"),
125
126    /** presto */
127    PRESTO("presto", "Presto数据库"),
128
129    /** redshift */
130    REDSHIFT("redshift", "亚马逊 redshift 数据库"),
131
132    /** SAP_HANA */
133    SAP_HANA("hana", "SAP_HANA 数据库"),
134
135    /** sinodb */
136    SINODB("sinodb", "SinoDB 数据库"),
137
138    /** SQLITE */
139    SQLITE("sqlite", "SQLite 数据库"),
140
141    /** SQLSERVER */
142    SQLSERVER("sqlserver", "SQLServer 数据库"),
143
144    /** SqlServer 2005 数据库 */
145    SQLSERVER_2005("sqlserver_2005", "SQLServer 数据库"),
146
147    /** SUNDB */
148    SUNDB("sundb", "SUNDB数据库"),
149
150    /** Sybase */
151    SYBASE("sybase", "Sybase ASE 数据库"),
152
153    /** TDengine */
154    TDENGINE("TDengine", "TDengine 数据库"),
155
156    /** Trino */
157    TRINO("trino", "trino 数据库"),
158
159    /** uxdb */
160    UXDB("uxdb", "优炫数据库"),
161
162    /** VASTBASE */
163    VASTBASE("vastbase", "Vastbase数据库"),
164
165    /** Vertica */
166    VERTICA("vertica", "vertica数据库"),
167
168    /** XCloud */
169    XCloud("xcloud", "行云数据库"),
170
171    /** xugu */
172    XUGU("xugu", "虚谷数据库"),
173
174    /** yasdb */
175    YASDB("yasdb", "崖山数据库"),
176
177    /** OTHER */
178    OTHER("other", "其他数据库");
179
180    /** 数据库名称 */
181    private final String name;
182
183    /** 描述 */
184    private final String remarks;
185
186    DbType(String name, String remarks) {
187        this.name = name;
188        this.remarks = remarks;
189    }
190
191    public String getName() {
192        return name;
193    }
194
195    /**
196     * 根据数据库类型名称自动识别数据库类型
197     *
198     * @param name 名称
199     * @return 数据库类型
200     */
201    public static DbType findByName(String name) {
202        if (StringUtil.noText(name)) {
203            return null;
204        }
205
206        return Arrays.stream(values())
207            .filter(em -> em.getName().equalsIgnoreCase(name))
208            .findFirst()
209            .orElse(null);
210    }
211}