5. 自定义扫描规则

在使用在线扫描模式时,工具同时提供了在线web编辑器,可点击右上角的图标进入兼容性清单JSON文件的在线编辑器,如下图:

image-2023103100004

在线编辑器页面如图:

image-2023103100002

5.1. 新增目标库

编辑器支持新增一种目标库,点击按钮“新增目标库”弹框如下图:

image-2024051100001

说明:

  • 新目标库名:新增目标库的名字

  • 模板库:现有目标库的列表。本次新增的目标库将以选中的模板库的数据为基础,并清除“正则表达式”和“兼容建议”两列的数据后形成新目标库的规则数据。

5.2. 新增规则

点击“新增规则”按钮,会在当前列表的最下面插入一条空行,编辑该行可插入一条新的扫描规则。

image-2024051100002

5.3. 删除规则

点击操作列中的“删除”图标,可以移除该行的规则。

image-2024051100005

5.4. 单元格编辑

编辑器提供可编辑表格,双击单元格可以编辑扫描规则(注意单元格中不要有多余的空行)。

image-2024051100003

5.5. 生成JSON文件

点击“生成JSON文件”按钮,可触发浏览器下载新的rules.json文件。

image-2024051100004

说明:

  • 编辑器读取的json文件就是 application.yaml 中 ruleFile 字段配置的文件。

  • 编辑完成后点击“生成JSON文件”按钮,下载新的rules.json文件,替换原json文件即可以生效。

5.6. 直接修改rule.json文件的方式

想要调整规则,也可以直接修改rule.json文件的内容,层级设计如下:

{
    "MySQL": {
        "LightDB-MySQL": {
            "DML": [
                {
                    "desc": "[向分区]插入数据",
                    "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
                    "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
                    "regexp": "INSERT\\s+INTO\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
                    "recommend": "直接插入数据到父表,无法指定分区表",
                    "isSupportUnisql": "N",
                    "level": "阻断"
                },
                ...
            ],
            "DQL": [],
            "DDL": [],
            "FUNCTION": [],
            "HINTS": [],
            "VAR": [],
            "FEATURE": []
        },
        "DM8": {},
        "OB-MySQL": {},
        "openGauss": {},
        "TDSQL-PostgreSQL": {}
    },
    "Oracle": {
        "LightDB-Oracle": {},
        "LightDB-MySQL": {},
        "LightDB-PostgreSQL": {},
        "openGauss": {},
        "PostgreSQL": {},
        "OB-Oracle": {},
        "OB-MySQL": {},
        "DM8": {},
        "TDMySQL8": {},
        "TDMySQL57": {},
        "GaussDB-Oracle": {}
    }
}
  • 第一层”MySQL”、”Oracle”,表示源数据库

  • 第二层”LightDB-MySQL”、”DM8”、”openGauss”等等,表示以MySQL或Oracle为源数据库时,支持兼容评估的目标数据库

  • 第三层”DML”、”DQL”、”DDL”、”FUNCTION”、”HINTS”、”VAR”、”FEATURE”表示特性的分类,其数据类型为数组

  • 第四层是数组中的对象,每个对象元素表示一种语法特性,说明如下

    • “desc”:语法描述

    • “syntax”:语法

    • “originExample”:语法用例

    • “regexp”:正则表达式

    • “recommend”:兼容建议

    • “isSupportUnisql”:统一SQL是否支持,可选值”Y”或”N”

    • “level”:阻断级别,可选值”阻断”或”警告”

警告

JSON格式中,字符串内包含双引号(””)、反斜杠(\)时,需要前面加反斜杠转义。 常见的比如:

  1. 正则中存在 \b ,在JSON字符串中需要填写为 \\b

  2. 语法用例中存在 "Joe" ,在JSON字符串中需要填写为 \"Joe\"