doc/sql-dialect-support.md
Druid SQL 解析器当前支持 30 种数据库方言。每种方言都提供完整的 Lexer(词法分析器)、Parser(语法分析器)、AST(抽象语法树节点)和 Visitor(访问者)实现。
| 方言 | DbType | Lexer | Parser | OutputVisitor | SchemaStatVisitor | WallProvider |
|---|---|---|---|---|---|---|
| MySQL | mysql | Y | Y | Y | Y | Y |
| PostgreSQL | postgresql | Y | Y | Y | Y | Y |
| Oracle | oracle | Y | Y | Y | Y | Y |
| SQL Server | sqlserver | Y | Y | Y | Y | Y |
| DB2 | db2 | Y | Y | Y | Y | Y |
| H2 | h2 | Y | Y | Y | Y | - |
| Informix | informix | Y | Y | Y | Y | - |
| 达梦 (DM) | dm | Y | Y | Y | Y | - |
| Oscar | oscar | Y | Y | Y | Y | - |
| GaussDB | gaussdb | Y | Y | Y | Y | - |
| ClickHouse | clickhouse | Y | Y | Y | Y | - |
| Doris | doris | Y | Y | Y | Y | - |
| StarRocks | starrocks | Y | Y | Y | Y | - |
| Teradata | teradata | Y | Y | Y | Y | - |
| Redshift | redshift | Y | Y | Y | Y | - |
| BigQuery | bigquery | Y | Y | Y | Y | - |
| Snowflake | snowflake | Y | Y | Y | Y | - |
| Synapse | synapse | Y | Y | Y | Y | - |
| Hologres | hologres | Y | Y | Y | Y | - |
| ODPS (MaxCompute) | odps | Y | Y | Y | Y | - |
| Hive | hive | Y | Y | Y | Y | - |
| Spark | spark | Y | Y | Y | Y | - |
| Presto | presto | Y | Y | Y | Y | - |
| Impala | impala | Y | Y | Y | Y | - |
| Athena | athena | Y | Y | Y | Y | - |
| Blink | blink | Y | Y | Y | Y | - |
| Databricks | databricks | Y | Y | Y | Y | - |
| Phoenix | phoenix | Y | Y | Y | Y | - |
| SuperSQL | supersql | Y | Y | Y | Y | - |
| Transact-SQL | transact | Y | Y | Y | Y | - |
SHOW、DESCRIBE、EXPLAIN 等管理语句ON DUPLICATE KEY UPDATE INSERT 冲突处理LIMIT offset, count 分页语法FORCE INDEX、USE INDEX 索引提示GROUP_CONCAT、JSON_EXTRACT 等)RETURNING 子句ON CONFLICT (UPSERT) 语法LIMIT ... OFFSET 分页COPY 语句CONNECT BY 层次查询ROWNUM 伪列MERGE INTO 语句FLASHBACK 查询TOP 限制WITH (NOLOCK) 提示WITH ... AS)CROSS APPLY / OUTER APPLYALTER PROCEDURE、ALTER VIEWCONNECT BY 层次查询ENGINE = MergeTree() 等建表引擎PARTITION BY 分区语法SAMPLE 采样查询EXPORT DATA 语句STRUCT 和 ARRAY 类型`)import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
// 指定方言解析
List<SQLStatement> stmts = SQLUtils.parseStatements(sql, DbType.mysql);
// 指定方言格式化
String formatted = SQLUtils.format(sql, DbType.postgresql);
// 指定方言创建 Schema 统计
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(DbType.oracle);
每种方言通过 META-INF/druid/parser/<dialect>/ 下的配置文件注册:
META-INF/druid/parser/<dialect>/
├── dialect.properties # 方言属性配置(引号字符等)
└── builtin_datatypes # 内置数据类型列表
dialect.properties 示例:
# 引号字符
quoteChars=`,",[
builtin_datatypes 示例:
INTEGER
VARCHAR
TEXT
BLOB
REAL
参见 贡献指南 了解如何添加新的 SQL 方言支持。
The Druid SQL parser currently supports 30 database dialects. Each dialect provides complete Lexer, Parser, AST and Visitor implementations.
See the Chinese section above for the complete support matrix table.
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
// Parse with specific dialect
List<SQLStatement> stmts = SQLUtils.parseStatements(sql, DbType.mysql);
// Format with specific dialect
String formatted = SQLUtils.format(sql, DbType.postgresql);
// Create dialect-specific schema visitor
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(DbType.oracle);
SHOW, LIMIT, index hints, JSON functionsRETURNING, ON CONFLICT, array types, COPY, window functionsCONNECT BY, MERGE INTO, FLASHBACK, package bodiesTOP, WITH (NOLOCK), CROSS APPLY, CTEsPARTITION BY, SAMPLE, ClickHouse functionsEXPORT DATA, STRUCT/ARRAY types, backtick identifiersEach dialect registers via configuration files in META-INF/druid/parser/<dialect>/:
dialect.properties — Dialect properties (quote characters, etc.)builtin_datatypes — Built-in data type list