WebcatEE 自动提示


本文档主要介绍如何自定义 SQL 编辑器提示。

WebcatEE SQL 编辑器支持如下类型的自动提示:

  1. 数据库 SQL 关键字;
  2. 数据库 SQL 函数;
  3. 表名, 字段名;

配置自动提示

  1. 不同的数据库关键字和函数是不同的,默认情况下,SQL 关键字和 SQL 函数可以通过 JDBC API 获取,但是有些数据库的 JDBC 驱动可能不支持这些 API。如果数据库的 JDBC 驱动不支持这些 API,那么自动提示仅支持基本的 SQL 关键字。
  2. 通过 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");