XiaoMi / soar

SQL Optimizer And Rewriter
Apache License 2.0
8.67k stars 1.32k forks source link

-report-type=json时,加入分值信息 #199

Closed hhyo closed 5 years ago

hhyo commented 5 years ago

Feature Description

最近尝试使用SOAR批量分析SQL,比如收集到的慢日志或者MyBatis的Mapper XML时,使用-report-type=json,发现分析结果中没有分值信息,不方便给出整体的质量报告和快速定位问题较多的SQL,不知道是否有计划在-report-type=json的结果中加入和markdown一样的分值信息,并且参考 #98 将建议信息分类合并

SQL ANALYZE

使用场景:批量分析,按照分值、建议信息给出整体质量,同时支持单SQL报告查看 image

Use Case(s)

-report-type=json

soar -query "select title,* from sakila.film where 1=1" -report-type=json
{
  "5AC5B10489F5C243": {
    "COL.001": {
      "Item": "COL.001",
      "Severity": "L1",
      "Summary": "不建议使用 SELECT * 类型查询",
      "Content": "当表结构变更时,使用 * 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。",
      "Case": "select * from tbl where id=1",
      "Position": 0
    },
    "RES.007": {
      "Item": "RES.007",
      "Severity": "L4",
      "Summary": "永远为真的比较条件",
      "Content": "查询条件永远为真,可能导致 WHERE 条件失效进行全表查询。",
      "Case": "select * from tbl where 1 = 1;",
      "Position": 0
    }
  }
}

-report-type=markdown

soar -query "select title,* from sakila.film where 1=1" -report-type=markdown     
# Query: 5AC5B10489F5C243

★ ★ ★ ☆ ☆ 75分

SELECT  
  title, * 
FROM  
  sakila. film  
WHERE  
  1= 1

## 不建议使用 SELECT * 类型查询

* **Item:**  COL.001

* **Severity:**  L1

* **Content:**  当表结构变更时,使用 \* 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。

## 永远为真的比较条件

* **Item:**  RES.007

* **Severity:**  L4

* **Content:**  查询条件永远为真,可能导致 WHERE 条件失效进行全表查询。