WebcatEE 自动提示
本文档主要介绍如何自定义 SQL 编辑器提示。
WebcatEE SQL 编辑器支持如下类型的自动提示:
- 数据库 SQL 关键字;
- 数据库 SQL 函数;
- 表名, 字段名;
配置自动提示
- 不同的数据库关键字和函数是不同的,默认情况下,SQL 关键字和 SQL 函数可以通过 JDBC API 获取,但是有些数据库的 JDBC 驱动可能不支持这些 API。如果数据库的 JDBC 驱动不支持这些 API,那么自动提示仅支持基本的 SQL 关键字。
- 通过 JDBC API 获取的 SQL 关键字和函数比较有限,而且不包含更多信息,例如函数的参数等。
为了使 SQL 编辑器的提示信息更加丰富,WebcatEE 支持自定义提示。配置文件的位置:
# 其中 DB_TYPE 是数据库的类型,例如:mysql,其他数据库可参看下方的附录。
~/WEB-INF/webcat/dialect/DB_TYPE/keywords.
# 也可参考 mysql 的配置:
~/WEB-INF/webcat/dialect/mysql/keywords.json
示例:
{
// 关键字配置
// version: 如果有则显示在提示后面
// MySQL 中的 R 表示保留字, 例如 select, insert 等都是保留字。
// 5.7.6+ 表示该关键字在 5.7.6 版本中添加。
// [5.7.4+ - 5.7.8-] 表示该关键字在 5.7.4 中添加,在 5.7.8 中又移除了。
"keywords": [
{"keyword": "ACCESSIBLE", "version":"(R)"},
{"keyword": "ACCOUNT", "version":"[5.7.6+]"},
...
],
// 一般函数配置
// url: 帮助连接, 允许空
"functions": [
{"text": "LEFT(str, len)", "url": "https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_left"},
{"text": "LENGTH(str)", "url": "https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_length"},
...
],
// 聚合函数配置
"aggregates": [
{"text": "AVG([DISTINCT] expr)", "url": "https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_avg"},
{"text": "COUNT(expr)", "url": "https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count"},
...
]
}
为了减少服务端请求,加快客户端显示速度,自动提示的元数据会缓存在浏览器的本地存储中,有效期是七天。
如果数据库的表很多,WebcatEE 最多支持 4096 张表的自动提示,超过 4096 的表仅支持提示表名,不支持字段名提示;
附录
## 数据库类型
ACCESS("access", "Access"),
DB2("db2", "DB2"),
DERBY("derby", "Derby"),
H2("h2", "H2"),
MARIADB("mariadb", "MariaDB"),
MYSQL("mysql", "MySql"),
ORACLE("oracle", "Oracle"),
POSTGRESQL("postgresql", "PostgreSql"),
SQLITE("sqlite", "SQLite"),
SQLSERVER("sqlserver", "SQLServer"),
SYBASE("sybase", "Sybase"),
REDIS("redis", "Redis"),
MONGO("mongo", "MongoDB"),
MEMCACHED("memcached", "Memcached"),
/** since 1.1.9 */
HSQL("hsql", "HSQL"),
HBASE("hbase", "HBase"),
HIVE("hive", "Hive"),
ALIORACLE("alioracle", "AliOracle"),
CLICKHOUSE("clickhouse", "ClickHouse"),
DM("dm", "DM"),
EDB("edb", "EDB"),
GBASE("gbase", "GBase"),
KDB("kdb", "KDB"),
KINGBASE("kingbase", "KingBase"),
KYLIN("kylin", "Kylin"),
INFORMIX("informix", "Informix"),
LOG4JDBC("log4jdbc", "Log4jdbc"),
ODPS("odps", "ODPS"),
OCEANBASE("oceanbase", "OceanBase"),
TERADATA("teradata", "TeraData"),
PHOENIX("phoenix", "Phoenix"),
PRESTO("presto", "Presto"),
ELASTICSEARCH("elasticsearch", "ElasticSearch"),
POLARDB("polardb", "PolarDB"),
XUGU("xugu", "XuGu");