From f16a6ef4ce52e0b6fd9f74713cfb6eda876521fa Mon Sep 17 00:00:00 2001 From: liipx Date: Mon, 26 Nov 2018 17:41:22 +0800 Subject: [PATCH] add case add content --- advisor/rules.go | 20 +++++++++---------- .../testdata/TestListHeuristicRules.golden | 20 +++++++++---------- .../TestMergeConflictHeuristicRules.golden | 10 +++++----- doc/heuristic.md | 20 +++++++++---------- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/advisor/rules.go b/advisor/rules.go index 0775929..e7c2a7e 100644 --- a/advisor/rules.go +++ b/advisor/rules.go @@ -623,24 +623,24 @@ func init() { Item: "FUN.007", Severity: "L1", Summary: "不建议使用触发器", - Content: ``, - Case: "", + Content: `触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。`, + Case: "CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());", Func: (*Query4Audit).RuleForbiddenTrigger, }, "FUN.008": { Item: "FUN.008", Severity: "L1", Summary: "不建议使用存储过程", - Content: ``, - Case: "", + Content: `存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。`, + Case: "CREATE PROCEDURE simpleproc (OUT param1 INT);", Func: (*Query4Audit).RuleForbiddenProcedure, }, "FUN.009": { Item: "FUN.009", Severity: "L1", Summary: "不建议使用自定义函数", - Content: ``, - Case: "", + Content: `不建议使用自定义函数`, + Case: "CREATE FUNCTION hello (s CHAR(20));", Func: (*Query4Audit).RuleForbiddenFunction, }, "GRP.001": { @@ -1085,16 +1085,16 @@ func init() { Item: "TBL.006", Severity: "L1", Summary: "不建议使用视图", - Content: ``, - Case: "", + Content: `不建议使用视图`, + Case: "create view v_today (today) AS SELECT CURRENT_DATE;", Func: (*Query4Audit).RuleForbiddenView, }, "TBL.007": { Item: "TBL.007", Severity: "L1", Summary: "不建议使用临时表", - Content: ``, - Case: "", + Content: `不建议使用临时表`, + Case: "CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;", Func: (*Query4Audit).RuleForbiddenTempTable, }, } diff --git a/advisor/testdata/TestListHeuristicRules.golden b/advisor/testdata/TestListHeuristicRules.golden index ab07c78..2696723 100644 --- a/advisor/testdata/TestListHeuristicRules.golden +++ b/advisor/testdata/TestListHeuristicRules.golden @@ -596,31 +596,31 @@ SELECT SUM(COL) FROM tbl; * **Item**:FUN.007 * **Severity**:L1 -* **Content**: +* **Content**:触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。 * **Case**: ```sql - +CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW()); ``` ## 不建议使用存储过程 * **Item**:FUN.008 * **Severity**:L1 -* **Content**: +* **Content**:存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。 * **Case**: ```sql - +CREATE PROCEDURE simpleproc (OUT param1 INT); ``` ## 不建议使用自定义函数 * **Item**:FUN.009 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用自定义函数 * **Case**: ```sql - +CREATE FUNCTION hello (s CHAR(20)); ``` ## 不建议对等值查询列使用 GROUP BY @@ -1166,19 +1166,19 @@ CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1; * **Item**:TBL.006 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用视图 * **Case**: ```sql - +create view v_today (today) AS SELECT CURRENT_DATE; ``` ## 不建议使用临时表 * **Item**:TBL.007 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用临时表 * **Case**: ```sql - +CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB; ``` diff --git a/advisor/testdata/TestMergeConflictHeuristicRules.golden b/advisor/testdata/TestMergeConflictHeuristicRules.golden index e2c12ca..444d2ff 100644 --- a/advisor/testdata/TestMergeConflictHeuristicRules.golden +++ b/advisor/testdata/TestMergeConflictHeuristicRules.golden @@ -56,9 +56,9 @@ advisor.Rule{Item:"FUN.003", Severity:"L3", Summary:"使用了合并为可空列 advisor.Rule{Item:"FUN.004", Severity:"L4", Summary:"不建议使用 SYSDATE() 函数", Content:"SYSDATE() 函数可能导致主从数据不一致,请使用 NOW() 函数替代 SYSDATE()。", Case:"SELECT SYSDATE();", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"FUN.005", Severity:"L1", Summary:"不建议使用 COUNT(col) 或 COUNT(常量)", Content:"不要使用 COUNT(col) 或 COUNT(常量) 来替代 COUNT(*), COUNT(*) 是 SQL92 定义的标准统计行数的方法,跟数据无关,跟 NULL 和非 NULL 也无关。", Case:"SELECT COUNT(1) FROM tbl;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"FUN.006", Severity:"L1", Summary:"使用 SUM(COL) 时需注意 NPE 问题", Content:"当某一列的值全是 NULL 时,COUNT(COL) 的返回结果为0,但 SUM(COL) 的返回结果为 NULL,因此使用 SUM() 时需注意 NPE 问题。可以使用如下方式来避免 SUM 的 NPE 问题: SELECT IF(ISNULL(SUM(COL)), 0, SUM(COL)) FROM tbl", Case:"SELECT SUM(COL) FROM tbl;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} -advisor.Rule{Item:"FUN.007", Severity:"L1", Summary:"不建议使用触发器", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} -advisor.Rule{Item:"FUN.008", Severity:"L1", Summary:"不建议使用存储过程", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} -advisor.Rule{Item:"FUN.009", Severity:"L1", Summary:"不建议使用自定义函数", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} +advisor.Rule{Item:"FUN.007", Severity:"L1", Summary:"不建议使用触发器", Content:"触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。", Case:"CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} +advisor.Rule{Item:"FUN.008", Severity:"L1", Summary:"不建议使用存储过程", Content:"存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。", Case:"CREATE PROCEDURE simpleproc (OUT param1 INT);", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} +advisor.Rule{Item:"FUN.009", Severity:"L1", Summary:"不建议使用自定义函数", Content:"不建议使用自定义函数", Case:"CREATE FUNCTION hello (s CHAR(20));", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"GRP.001", Severity:"L2", Summary:"不建议对等值查询列使用 GROUP BY", Content:"GROUP BY 中的列在前面的 WHERE 条件中使用了等值查询,对这样的列进行 GROUP BY 意义不大。", Case:"select film_id, title from film where release_year='2006' group by release_year", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"JOI.001", Severity:"L2", Summary:"JOIN 语句混用逗号和 ANSI 模式", Content:"表连接的时候混用逗号和 ANSI JOIN 不便于人类理解,并且MySQL不同版本的表连接行为和优先级均有所不同,当 MySQL 版本变化后可能会引入错误。", Case:"select c1,c2,c3 from t1,t2 join t3 on t1.c1=t2.c1,t1.c3=t3,c1 where id>1000", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"JOI.002", Severity:"L4", Summary:"同一张表被连接两次", Content:"相同的表在 FROM 子句中至少出现两次,可以简化为对该表的单次访问。", Case:"select tb1.col from (tb1, tb2) join tb2 on tb1.id=tb.id where tb1.id=1", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} @@ -110,5 +110,5 @@ advisor.Rule{Item:"TBL.002", Severity:"L4", Summary:"请为表选择合适的存 advisor.Rule{Item:"TBL.003", Severity:"L8", Summary:"以DUAL命名的表在数据库中有特殊含义", Content:"DUAL表为虚拟表,不需要创建即可使用,也不建议服务以DUAL命名表。", Case:"create table dual(id int, primary key (id));", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"TBL.004", Severity:"L2", Summary:"表的初始AUTO_INCREMENT值不为0", Content:"AUTO_INCREMENT不为0会导致数据空洞。", Case:"CREATE TABLE tbl (a int) AUTO_INCREMENT = 10;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} advisor.Rule{Item:"TBL.005", Severity:"L4", Summary:"请使用推荐的字符集", Content:"表字符集只允许设置为utf8,utf8mb4", Case:"CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} -advisor.Rule{Item:"TBL.006", Severity:"L1", Summary:"不建议使用视图", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} -advisor.Rule{Item:"TBL.007", Severity:"L1", Summary:"不建议使用临时表", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} +advisor.Rule{Item:"TBL.006", Severity:"L1", Summary:"不建议使用视图", Content:"不建议使用视图", Case:"create view v_today (today) AS SELECT CURRENT_DATE;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} +advisor.Rule{Item:"TBL.007", Severity:"L1", Summary:"不建议使用临时表", Content:"不建议使用临时表", Case:"CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}} diff --git a/doc/heuristic.md b/doc/heuristic.md index ab07c78..2696723 100644 --- a/doc/heuristic.md +++ b/doc/heuristic.md @@ -596,31 +596,31 @@ SELECT SUM(COL) FROM tbl; * **Item**:FUN.007 * **Severity**:L1 -* **Content**: +* **Content**:触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。 * **Case**: ```sql - +CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW()); ``` ## 不建议使用存储过程 * **Item**:FUN.008 * **Severity**:L1 -* **Content**: +* **Content**:存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。 * **Case**: ```sql - +CREATE PROCEDURE simpleproc (OUT param1 INT); ``` ## 不建议使用自定义函数 * **Item**:FUN.009 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用自定义函数 * **Case**: ```sql - +CREATE FUNCTION hello (s CHAR(20)); ``` ## 不建议对等值查询列使用 GROUP BY @@ -1166,19 +1166,19 @@ CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1; * **Item**:TBL.006 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用视图 * **Case**: ```sql - +create view v_today (today) AS SELECT CURRENT_DATE; ``` ## 不建议使用临时表 * **Item**:TBL.007 * **Severity**:L1 -* **Content**: +* **Content**:不建议使用临时表 * **Case**: ```sql - +CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB; ``` -- GitLab