提交 5533b049 编写于 作者: martianzhang's avatar martianzhang
上级 ba20f34c
......@@ -222,7 +222,7 @@ func DigestExplainText(text string) {
return
}
expSuggest := ExplainAdvisor(explainInfo)
_, output := FormatSuggest("", common.Config.ReportType, expSuggest)
_, output := FormatSuggest("", "", common.Config.ReportType, expSuggest)
if common.Config.ReportType == "html" {
fmt.Println(common.MarkdownHTMLHeader())
fmt.Println(common.Markdown2HTML(output))
......
......@@ -1202,7 +1202,7 @@ func InBlackList(sql string) bool {
}
// FormatSuggest 格式化输出优化建议
func FormatSuggest(sql string, format string, suggests ...map[string]Rule) (map[string]Rule, string) {
func FormatSuggest(sql string, currentDB string, format string, suggests ...map[string]Rule) (map[string]Rule, string) {
common.Log.Debug("FormatSuggest, Query: %s", sql)
var fingerprint, id string
var buf []string
......@@ -1252,17 +1252,7 @@ func FormatSuggest(sql string, format string, suggests ...map[string]Rule) (map[
common.Log.Debug("FormatSuggest, format: %s", format)
switch format {
case "json":
js, err := json.MarshalIndent(Result{
ID: id,
Fingerprint: fingerprint,
Sample: sql,
Suggest: suggest,
}, "", " ")
if err == nil {
buf = append(buf, fmt.Sprintln(string(js)))
} else {
common.Log.Error("FormatSuggest json.Marshal Error: %v", err)
}
buf = append(buf, formatJSON(sql, currentDB, suggest))
case "text":
for item, rule := range suggest {
......@@ -1452,6 +1442,80 @@ func FormatSuggest(sql string, format string, suggests ...map[string]Rule) (map[
return suggest, str
}
// JSONSuggest json format suggestion
type JSONSuggest struct {
ID string `json:"ID"`
Fingerprint string `json:"Fingerprint"`
Score int `json:"Score"`
Sample string `json:"Sample"`
Explain []Rule `json:"Explain"`
HeuristicRules []Rule `json:"HeuristicRules"`
IndexRules []Rule `json:"IndexRules"`
Tables []string `json:"Tables"`
}
func formatJSON(sql string, db string, suggest map[string]Rule) string {
var id, fingerprint, result string
fingerprint = query.Fingerprint(sql)
id = query.Id(fingerprint)
sug := JSONSuggest{
ID: id,
Fingerprint: fingerprint,
Sample: sql,
Tables: ast.SchemaMetaInfo(sql, db),
}
// Explain info
var sortItem []string
for item := range suggest {
if strings.HasPrefix(item, "EXP") {
sortItem = append(sortItem, item)
}
}
sort.Strings(sortItem)
for _, i := range sortItem {
sug.Explain = append(sug.Explain, suggest[i])
}
sortItem = make([]string, 0)
// Index advisor
for item := range suggest {
if strings.HasPrefix(item, "IDX") {
sortItem = append(sortItem, item)
}
}
sort.Strings(sortItem)
for _, i := range sortItem {
sug.IndexRules = append(sug.IndexRules, suggest[i])
}
sortItem = make([]string, 0)
// Heuristic rules
for item := range suggest {
if !strings.HasPrefix(item, "EXP") && !strings.HasPrefix(item, "IDX") {
if strings.HasPrefix(item, "ERR") && suggest[item].Content == "" {
continue
}
sortItem = append(sortItem, item)
}
}
sort.Strings(sortItem)
for _, i := range sortItem {
sug.HeuristicRules = append(sug.HeuristicRules, suggest[i])
}
sortItem = make([]string, 0)
js, err := json.MarshalIndent(sug, "", " ")
if err == nil {
result = fmt.Sprint(string(js))
} else {
common.Log.Error("formatJSON json.Marshal Error: %v", err)
}
return result
}
// ListHeuristicRules 打印支持的启发式规则,对应命令行参数-list-heuristic-rules
func ListHeuristicRules(rules ...map[string]Rule) {
switch common.Config.ReportType {
......
......@@ -3,7 +3,7 @@
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *country* | NULL | index | PRIMARY,<br>country\_id | country | 152 | NULL | 0 | 0.00% | ☠️ **O(n)** | Using index |
| 1 | SIMPLE | *city* | NULL | ref | idx\_fk\_country\_id,<br>idx\_country\_id\_city,<br>idx\_all,<br>idx\_other | idx\_fk\_country\_id | 2 | sakila.country.country\_id | 0 | 0.00% | ☠️ **O(n)** | Using index |
| 1 | SIMPLE | *city* | NULL | ref | idx\_fk\_country\_id,<br>idx\_country\_id\_city,<br>idx\_all,<br>idx\_other | idx\_fk\_country\_id | 2 | sakila.country.country\_id | 0 | 0.00% | O(log n) | Using index |
......@@ -105,7 +105,7 @@ a:link,a:visited{text-decoration:none}h3,h4{margin-top:2em}h5,h6{margin-top:20px
<td>sakila.country.country_id</td>
<td>0</td>
<td>0.00%</td>
<td>☠️ <strong>O(n)</strong></td>
<td>O(log n)</td>
<td>Using index</td>
</tr>
</tbody>
......
......@@ -37,11 +37,13 @@ func main() {
// 全局变量
var err error
var sql string // 单条评审指定的 sql 或 explain
var currentDB string // 当前 SQL 使用的 database
sqlCounter := 1 // SQL 计数器
lineCounter := 1 // 行计数器
var alterSQLs []string // 待评审的 SQL 中所有 ALTER 请求
alterTableTimes := make(map[string]int) // 待评审的 SQL 中同一经表 ALTER 请求计数器
suggestMerged := make(map[string]map[string]advisor.Rule) // 优化建议去重, key 为 sql 的 fingerprint.ID
var suggestStr []string // string 形式格式化之后的优化建议,用于 -report-type json
tables := make(map[string][]string) // SQL 使用的库表名
// 配置文件&命令行参数解析
......@@ -74,7 +76,7 @@ func main() {
// 对指定的库表进行索引重复检查
if common.Config.ReportType == "duplicate-key-checker" {
dupKeySuggest := advisor.DuplicateKeyChecker(rEnv)
_, str := advisor.FormatSuggest("", common.Config.ReportType, dupKeySuggest)
_, str := advisor.FormatSuggest("", currentDB, common.Config.ReportType, dupKeySuggest)
if str == "" {
fmt.Printf("%s/%s 未发现重复索引\n", common.Config.OnlineDSN.Addr, common.Config.OnlineDSN.Schema)
} else {
......@@ -129,6 +131,7 @@ func main() {
// +++++++++++++++++++++小工具集[开始]+++++++++++++++++++++++{
fingerprint := strings.TrimSpace(query.Fingerprint(sql))
currentDB = env.CurrentDB(sql, currentDB)
switch common.Config.ReportType {
case "fingerprint":
// SQL 指纹
......@@ -176,6 +179,7 @@ func main() {
continue
}
}
tables[id] = ast.SchemaMetaInfo(sql, currentDB)
// +++++++++++++++++++++小工具集[结束]+++++++++++++++++++++++}
// +++++++++++++++++++++语法检查[开始]+++++++++++++++++++++++{
......@@ -202,8 +206,6 @@ func main() {
switch common.Config.ReportType {
case "tables":
env.ChangeDB(vEnv.Connector, q.Query)
tables[id] = ast.SchemaMetaInfo(sql, vEnv.Database)
continue
case "query-type":
fmt.Println(syntaxErr)
......@@ -384,10 +386,11 @@ func main() {
// +++++++++++++++++++++打印单条 SQL 优化建议[开始]++++++++++++++++++++++++++{
common.Log.Debug("start of print suggestions, Query: %s", q.Query)
sug, str := advisor.FormatSuggest(q.Query, common.Config.ReportType, heuristicSuggest, idxSuggest, expSuggest, proSuggest, traceSuggest, mysqlSuggest)
sug, str := advisor.FormatSuggest(q.Query, currentDB, common.Config.ReportType, heuristicSuggest, idxSuggest, expSuggest, proSuggest, traceSuggest, mysqlSuggest)
suggestMerged[id] = sug
switch common.Config.ReportType {
case "json":
suggestStr = append(suggestStr, str)
case "tables":
case "duplicate-key-checker":
case "rewrite":
......@@ -428,13 +431,7 @@ func main() {
// 以 JSON 格式化输出
if common.Config.ReportType == "json" {
js, err := json.MarshalIndent(suggestMerged, "", " ")
if err == nil {
fmt.Println(string(js))
} else {
common.Log.Error("FormatSuggest json.Marshal Error: %v", err)
}
return
fmt.Println("[\n", strings.Join(suggestStr, ",\n"), "\n]")
}
// 以 JSON 格式输出 SQL 影响的库表名
......
Syntax check OK!
MySQL environment verbose info
* test-dsn: 127.0.0.1:3306 is disable, please check log.
* online-dsn: 127.0.0.1:3306 is disable, please check log.
MySQL environment verbose info
* test-dsn: 127.0.0.1:3306 is disable, please check log.
* online-dsn: 127.0.0.1:3306 is disable, please check log.
......@@ -882,7 +882,7 @@ var ReportTypes = []ReportType{
{
Name: "tables",
Description: "以 JSON 格式输出 SQL 使用的库表名",
Example: `echo "select * from film" | soar -report-type meta`,
Example: `echo "select * from film" | soar -report-type tables`,
},
{
Name: "query-type",
......
......@@ -58,13 +58,21 @@ echo "select * from film" | soar -report-type tiast
```bash
echo "select * from film" | soar -report-type tiast-json
```
## meta
## tables
* **Description**:以 JSON 格式输出 SQL 使用的库表名
* **Example**:
```bash
echo "select * from film" | soar -report-type meta
echo "select * from film" | soar -report-type tables
```
## query-type
* **Description**:SQL 语句的请求类型
* **Example**:
```bash
echo "select * from film" | soar -report-type query-type
```
## fingerprint
* **Description**:输出SQL的指纹
......
......@@ -12,9 +12,9 @@
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -34,9 +34,9 @@ user:password@hostname:3307/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -56,9 +56,9 @@ user:password@hostname:3307/database?charset=utf8
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -78,9 +78,9 @@ user:password@hostname:3307
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -100,9 +100,9 @@ user:password@hostname:/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -122,9 +122,9 @@ user:password@:3307/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -144,9 +144,9 @@ user@hostname/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -166,9 +166,9 @@ user:pwd:pwd@pwd/pwd@hostname/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -188,9 +188,9 @@ user:password@
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -210,9 +210,9 @@ hostname:3307/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -232,9 +232,9 @@ hostname:3307/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -254,9 +254,9 @@ hostname:3307/database
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -276,9 +276,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -298,9 +298,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -320,9 +320,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -342,9 +342,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -364,9 +364,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "3s",
ReadTimeout: "",
WriteTimeout: "",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -386,9 +386,9 @@ hostname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -408,9 +408,9 @@ user@unix(/path/to/socket)/dbname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -430,9 +430,9 @@ root:pw@unix(/tmp/mysql.sock)/myDatabase?loc=Local
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -452,9 +452,9 @@ user:password@tcp(localhost:5555)/dbname?tls=skip-verify&autocommit=true
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {"autocommit":"true"},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -474,9 +474,9 @@ user:password@/dbname?sql_mode=TRADITIONAL
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {"sql_mode":"TRADITIONAL"},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -496,9 +496,9 @@ user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname?timeout=90s&collation=utf8mb4_
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 90,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "1m30s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -518,9 +518,9 @@ id:password@tcp(your-amazonaws-uri.com:3306)/dbname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -540,9 +540,9 @@ user@cloudsql(project-id:instance-name)/dbname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -562,9 +562,9 @@ user@cloudsql(project-id:regionname:instance-name)/dbname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -584,9 +584,9 @@ user:password@tcp/dbname?charset=utf8mb4,utf8&sys_var=esc%40ped
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {"charset":"utf8mb4,utf8", "sys_var":"esc@ped"},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -606,9 +606,9 @@ user:password@/dbname
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -628,9 +628,9 @@ user:password@/
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {},
Timeout: 0,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "0s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......@@ -650,9 +650,9 @@ user:password@tcp(localhost:3307)/database?charset=utf8&timeout=5s
ServerPubKey: "",
MaxAllowedPacket: 4194304,
Params: {"charset":"utf8"},
Timeout: 5,
ReadTimeout: 0,
WriteTimeout: 0,
Timeout: "5s",
ReadTimeout: "0s",
WriteTimeout: "0s",
AllowNativePasswords: true,
AllowOldPasswords: false,
Disable: false,
......
......@@ -12,9 +12,9 @@ online-dsn:
maxallowedpacket: 4194304
params:
charset: utf8
timeout: 0
read-timeout: 0
write-timeout: 0
timeout: 3s
read-timeout: 0s
write-timeout: 0s
allow-native-passwords: true
allow-old-passwords: false
disable: false
......@@ -32,9 +32,9 @@ test-dsn:
maxallowedpacket: 4194304
params:
charset: utf8
timeout: 0
read-timeout: 0
write-timeout: 0
timeout: 3s
read-timeout: 0s
write-timeout: 0s
allow-native-passwords: true
allow-old-passwords: false
disable: false
......
char(10) latin7 10
char(256) latin7 255
binary(10) latin7 10
binary(256) latin7 255
varchar(10) latin7 11
varbinary(10) latin7 11
enum('G','PG','PG-13','R','NC-17') latin7 1
set('one', 'two') latin7 1
not_exist latin7 0
char(-1) latin7 0
char(10) ujis 30
char(256) ujis 765
binary(10) ujis 10
binary(256) ujis 255
varchar(10) ujis 31
varbinary(10) ujis 31
enum('G','PG','PG-13','R','NC-17') ujis 1
set('one', 'two') ujis 1
not_exist ujis 0
char(-1) ujis 0
char(10) cp1256 10
char(256) cp1256 255
binary(10) cp1256 10
binary(256) cp1256 255
varchar(10) cp1256 11
varbinary(10) cp1256 11
enum('G','PG','PG-13','R','NC-17') cp1256 1
set('one', 'two') cp1256 1
not_exist cp1256 0
char(-1) cp1256 0
char(10) hebrew 10
char(256) hebrew 255
binary(10) hebrew 10
binary(256) hebrew 255
varchar(10) hebrew 11
varbinary(10) hebrew 11
enum('G','PG','PG-13','R','NC-17') hebrew 1
set('one', 'two') hebrew 1
not_exist hebrew 0
char(-1) hebrew 0
char(10) latin2 10
char(256) latin2 255
binary(10) latin2 10
binary(256) latin2 255
varchar(10) latin2 11
varbinary(10) latin2 11
enum('G','PG','PG-13','R','NC-17') latin2 1
set('one', 'two') latin2 1
not_exist latin2 0
char(-1) latin2 0
char(10) big5 20
char(256) big5 510
binary(10) big5 10
binary(256) big5 255
varchar(10) big5 21
varbinary(10) big5 21
enum('G','PG','PG-13','R','NC-17') big5 1
set('one', 'two') big5 1
not_exist big5 0
char(-1) big5 0
char(10) cp1250 10
char(256) cp1250 255
binary(10) cp1250 10
binary(256) cp1250 255
varchar(10) cp1250 11
varbinary(10) cp1250 11
enum('G','PG','PG-13','R','NC-17') cp1250 1
set('one', 'two') cp1250 1
not_exist cp1250 0
char(-1) cp1250 0
char(10) eucjpms 30
char(256) eucjpms 765
binary(10) eucjpms 10
binary(256) eucjpms 255
varchar(10) eucjpms 31
varbinary(10) eucjpms 31
enum('G','PG','PG-13','R','NC-17') eucjpms 1
set('one', 'two') eucjpms 1
not_exist eucjpms 0
char(-1) eucjpms 0
char(10) latin1 10
char(256) latin1 255
binary(10) latin1 10
binary(256) latin1 255
varchar(10) latin1 11
varbinary(10) latin1 11
enum('G','PG','PG-13','R','NC-17') latin1 1
set('one', 'two') latin1 1
not_exist latin1 0
char(-1) latin1 0
char(10) macce 10
char(256) macce 255
binary(10) macce 10
binary(256) macce 255
varchar(10) macce 11
varbinary(10) macce 11
enum('G','PG','PG-13','R','NC-17') macce 1
set('one', 'two') macce 1
not_exist macce 0
char(-1) macce 0
char(10) tis620 10
char(256) tis620 255
binary(10) tis620 10
binary(256) tis620 255
varchar(10) tis620 11
varbinary(10) tis620 11
enum('G','PG','PG-13','R','NC-17') tis620 1
set('one', 'two') tis620 1
not_exist tis620 0
char(-1) tis620 0
char(10) utf16 40
char(256) utf16 1020
binary(10) utf16 10
binary(256) utf16 255
varchar(10) utf16 41
varbinary(10) utf16 41
enum('G','PG','PG-13','R','NC-17') utf16 1
set('one', 'two') utf16 1
not_exist utf16 0
char(-1) utf16 0
char(10) utf16le 40
char(256) utf16le 1020
binary(10) utf16le 10
binary(256) utf16le 255
varchar(10) utf16le 41
varbinary(10) utf16le 41
enum('G','PG','PG-13','R','NC-17') utf16le 1
set('one', 'two') utf16le 1
not_exist utf16le 0
char(-1) utf16le 0
char(10) binary 10
char(256) binary 255
binary(10) binary 10
binary(256) binary 255
varchar(10) binary 11
varbinary(10) binary 11
enum('G','PG','PG-13','R','NC-17') binary 1
set('one', 'two') binary 1
not_exist binary 0
char(-1) binary 0
char(10) cp852 10
char(256) cp852 255
binary(10) cp852 10
......@@ -38,36 +118,36 @@ enum('G','PG','PG-13','R','NC-17') cp852 1
set('one', 'two') cp852 1
not_exist cp852 0
char(-1) cp852 0
char(10) cp866 10
char(256) cp866 255
binary(10) cp866 10
binary(256) cp866 255
varchar(10) cp866 11
varbinary(10) cp866 11
enum('G','PG','PG-13','R','NC-17') cp866 1
set('one', 'two') cp866 1
not_exist cp866 0
char(-1) cp866 0
char(10) geostd8 10
char(256) geostd8 255
binary(10) geostd8 10
binary(256) geostd8 255
varchar(10) geostd8 11
varbinary(10) geostd8 11
enum('G','PG','PG-13','R','NC-17') geostd8 1
set('one', 'two') geostd8 1
not_exist geostd8 0
char(-1) geostd8 0
char(10) keybcs2 10
char(256) keybcs2 255
binary(10) keybcs2 10
binary(256) keybcs2 255
varchar(10) keybcs2 11
varbinary(10) keybcs2 11
enum('G','PG','PG-13','R','NC-17') keybcs2 1
set('one', 'two') keybcs2 1
not_exist keybcs2 0
char(-1) keybcs2 0
char(10) cp932 20
char(256) cp932 510
binary(10) cp932 10
binary(256) cp932 255
varchar(10) cp932 21
varbinary(10) cp932 21
enum('G','PG','PG-13','R','NC-17') cp932 1
set('one', 'two') cp932 1
not_exist cp932 0
char(-1) cp932 0
char(10) gbk 20
char(256) gbk 510
binary(10) gbk 10
binary(256) gbk 255
varchar(10) gbk 21
varbinary(10) gbk 21
enum('G','PG','PG-13','R','NC-17') gbk 1
set('one', 'two') gbk 1
not_exist gbk 0
char(-1) gbk 0
char(10) hp8 10
char(256) hp8 255
binary(10) hp8 10
binary(256) hp8 255
varchar(10) hp8 11
varbinary(10) hp8 11
enum('G','PG','PG-13','R','NC-17') hp8 1
set('one', 'two') hp8 1
not_exist hp8 0
char(-1) hp8 0
char(10) ucs2 20
char(256) ucs2 510
binary(10) ucs2 10
......@@ -78,36 +158,26 @@ enum('G','PG','PG-13','R','NC-17') ucs2 1
set('one', 'two') ucs2 1
not_exist ucs2 0
char(-1) ucs2 0
char(10) utf32 40
char(256) utf32 1020
binary(10) utf32 10
binary(256) utf32 255
varchar(10) utf32 41
varbinary(10) utf32 41
enum('G','PG','PG-13','R','NC-17') utf32 1
set('one', 'two') utf32 1
not_exist utf32 0
char(-1) utf32 0
char(10) armscii8 10
char(256) armscii8 255
binary(10) armscii8 10
binary(256) armscii8 255
varchar(10) armscii8 11
varbinary(10) armscii8 11
enum('G','PG','PG-13','R','NC-17') armscii8 1
set('one', 'two') armscii8 1
not_exist armscii8 0
char(-1) armscii8 0
char(10) ascii 10
char(256) ascii 255
binary(10) ascii 10
binary(256) ascii 255
varchar(10) ascii 11
varbinary(10) ascii 11
enum('G','PG','PG-13','R','NC-17') ascii 1
set('one', 'two') ascii 1
not_exist ascii 0
char(-1) ascii 0
char(10) cp1251 10
char(256) cp1251 255
binary(10) cp1251 10
binary(256) cp1251 255
varchar(10) cp1251 11
varbinary(10) cp1251 11
enum('G','PG','PG-13','R','NC-17') cp1251 1
set('one', 'two') cp1251 1
not_exist cp1251 0
char(-1) cp1251 0
char(10) cp1256 10
char(256) cp1256 255
binary(10) cp1256 10
binary(256) cp1256 255
varchar(10) cp1256 11
varbinary(10) cp1256 11
enum('G','PG','PG-13','R','NC-17') cp1256 1
set('one', 'two') cp1256 1
not_exist cp1256 0
char(-1) cp1256 0
char(10) dec8 10
char(256) dec8 255
binary(10) dec8 10
......@@ -118,56 +188,26 @@ enum('G','PG','PG-13','R','NC-17') dec8 1
set('one', 'two') dec8 1
not_exist dec8 0
char(-1) dec8 0
char(10) eucjpms 30
char(256) eucjpms 765
binary(10) eucjpms 10
binary(256) eucjpms 255
varchar(10) eucjpms 31
varbinary(10) eucjpms 31
enum('G','PG','PG-13','R','NC-17') eucjpms 1
set('one', 'two') eucjpms 1
not_exist eucjpms 0
char(-1) eucjpms 0
char(10) latin2 10
char(256) latin2 255
binary(10) latin2 10
binary(256) latin2 255
varchar(10) latin2 11
varbinary(10) latin2 11
enum('G','PG','PG-13','R','NC-17') latin2 1
set('one', 'two') latin2 1
not_exist latin2 0
char(-1) latin2 0
char(10) cp1257 10
char(256) cp1257 255
binary(10) cp1257 10
binary(256) cp1257 255
varchar(10) cp1257 11
varbinary(10) cp1257 11
enum('G','PG','PG-13','R','NC-17') cp1257 1
set('one', 'two') cp1257 1
not_exist cp1257 0
char(-1) cp1257 0
char(10) cp932 20
char(256) cp932 510
binary(10) cp932 10
binary(256) cp932 255
varchar(10) cp932 21
varbinary(10) cp932 21
enum('G','PG','PG-13','R','NC-17') cp932 1
set('one', 'two') cp932 1
not_exist cp932 0
char(-1) cp932 0
char(10) cp1250 10
char(256) cp1250 255
binary(10) cp1250 10
binary(256) cp1250 255
varchar(10) cp1250 11
varbinary(10) cp1250 11
enum('G','PG','PG-13','R','NC-17') cp1250 1
set('one', 'two') cp1250 1
not_exist cp1250 0
char(-1) cp1250 0
char(10) euckr 20
char(256) euckr 510
binary(10) euckr 10
binary(256) euckr 255
varchar(10) euckr 21
varbinary(10) euckr 21
enum('G','PG','PG-13','R','NC-17') euckr 1
set('one', 'two') euckr 1
not_exist euckr 0
char(-1) euckr 0
char(10) geostd8 10
char(256) geostd8 255
binary(10) geostd8 10
binary(256) geostd8 255
varchar(10) geostd8 11
varbinary(10) geostd8 11
enum('G','PG','PG-13','R','NC-17') geostd8 1
set('one', 'two') geostd8 1
not_exist geostd8 0
char(-1) geostd8 0
char(10) greek 10
char(256) greek 255
binary(10) greek 10
......@@ -178,36 +218,26 @@ enum('G','PG','PG-13','R','NC-17') greek 1
set('one', 'two') greek 1
not_exist greek 0
char(-1) greek 0
char(10) swe7 10
char(256) swe7 255
binary(10) swe7 10
binary(256) swe7 255
varchar(10) swe7 11
varbinary(10) swe7 11
enum('G','PG','PG-13','R','NC-17') swe7 1
set('one', 'two') swe7 1
not_exist swe7 0
char(-1) swe7 0
char(10) utf8 30
char(256) utf8 765
binary(10) utf8 10
binary(256) utf8 255
varchar(10) utf8 31
varbinary(10) utf8 31
enum('G','PG','PG-13','R','NC-17') utf8 1
set('one', 'two') utf8 1
not_exist utf8 0
char(-1) utf8 0
char(10) utf8mb4 40
char(256) utf8mb4 1020
binary(10) utf8mb4 10
binary(256) utf8mb4 255
varchar(10) utf8mb4 41
varbinary(10) utf8mb4 41
enum('G','PG','PG-13','R','NC-17') utf8mb4 1
set('one', 'two') utf8mb4 1
not_exist utf8mb4 0
char(-1) utf8mb4 0
char(10) macroman 10
char(256) macroman 255
binary(10) macroman 10
binary(256) macroman 255
varchar(10) macroman 11
varbinary(10) macroman 11
enum('G','PG','PG-13','R','NC-17') macroman 1
set('one', 'two') macroman 1
not_exist macroman 0
char(-1) macroman 0
char(10) armscii8 10
char(256) armscii8 255
binary(10) armscii8 10
binary(256) armscii8 255
varchar(10) armscii8 11
varbinary(10) armscii8 11
enum('G','PG','PG-13','R','NC-17') armscii8 1
set('one', 'two') armscii8 1
not_exist armscii8 0
char(-1) armscii8 0
char(10) cp850 10
char(256) cp850 255
binary(10) cp850 10
......@@ -218,26 +248,6 @@ enum('G','PG','PG-13','R','NC-17') cp850 1
set('one', 'two') cp850 1
not_exist cp850 0
char(-1) cp850 0
char(10) euckr 20
char(256) euckr 510
binary(10) euckr 10
binary(256) euckr 255
varchar(10) euckr 21
varbinary(10) euckr 21
enum('G','PG','PG-13','R','NC-17') euckr 1
set('one', 'two') euckr 1
not_exist euckr 0
char(-1) euckr 0
char(10) hp8 10
char(256) hp8 255
binary(10) hp8 10
binary(256) hp8 255
varchar(10) hp8 11
varbinary(10) hp8 11
enum('G','PG','PG-13','R','NC-17') hp8 1
set('one', 'two') hp8 1
not_exist hp8 0
char(-1) hp8 0
char(10) koi8u 10
char(256) koi8u 255
binary(10) koi8u 10
......@@ -248,36 +258,36 @@ enum('G','PG','PG-13','R','NC-17') koi8u 1
set('one', 'two') koi8u 1
not_exist koi8u 0
char(-1) koi8u 0
char(10) macce 10
char(256) macce 255
binary(10) macce 10
binary(256) macce 255
varchar(10) macce 11
varbinary(10) macce 11
enum('G','PG','PG-13','R','NC-17') macce 1
set('one', 'two') macce 1
not_exist macce 0
char(-1) macce 0
char(10) binary 10
char(256) binary 255
binary(10) binary 10
binary(256) binary 255
varchar(10) binary 11
varbinary(10) binary 11
enum('G','PG','PG-13','R','NC-17') binary 1
set('one', 'two') binary 1
not_exist binary 0
char(-1) binary 0
char(10) gb18030 40
char(256) gb18030 1020
binary(10) gb18030 10
binary(256) gb18030 255
varchar(10) gb18030 41
varbinary(10) gb18030 41
enum('G','PG','PG-13','R','NC-17') gb18030 1
set('one', 'two') gb18030 1
not_exist gb18030 0
char(-1) gb18030 0
char(10) ujis 30
char(256) ujis 765
binary(10) ujis 10
binary(256) ujis 255
varchar(10) ujis 31
varbinary(10) ujis 31
enum('G','PG','PG-13','R','NC-17') ujis 1
set('one', 'two') ujis 1
not_exist ujis 0
char(-1) ujis 0
char(10) utf32 40
char(256) utf32 1020
binary(10) utf32 10
binary(256) utf32 255
varchar(10) utf32 41
varbinary(10) utf32 41
enum('G','PG','PG-13','R','NC-17') utf32 1
set('one', 'two') utf32 1
not_exist utf32 0
char(-1) utf32 0
char(10) cp866 10
char(256) cp866 255
binary(10) cp866 10
binary(256) cp866 255
varchar(10) cp866 11
varbinary(10) cp866 11
enum('G','PG','PG-13','R','NC-17') cp866 1
set('one', 'two') cp866 1
not_exist cp866 0
char(-1) cp866 0
char(10) gb2312 20
char(256) gb2312 510
binary(10) gb2312 10
......@@ -288,6 +298,36 @@ enum('G','PG','PG-13','R','NC-17') gb2312 1
set('one', 'two') gb2312 1
not_exist gb2312 0
char(-1) gb2312 0
char(10) swe7 10
char(256) swe7 255
binary(10) swe7 10
binary(256) swe7 255
varchar(10) swe7 11
varbinary(10) swe7 11
enum('G','PG','PG-13','R','NC-17') swe7 1
set('one', 'two') swe7 1
not_exist swe7 0
char(-1) swe7 0
char(10) utf8mb4 40
char(256) utf8mb4 1020
binary(10) utf8mb4 10
binary(256) utf8mb4 255
varchar(10) utf8mb4 41
varbinary(10) utf8mb4 41
enum('G','PG','PG-13','R','NC-17') utf8mb4 1
set('one', 'two') utf8mb4 1
not_exist utf8mb4 0
char(-1) utf8mb4 0
char(10) ascii 10
char(256) ascii 255
binary(10) ascii 10
binary(256) ascii 255
varchar(10) ascii 11
varbinary(10) ascii 11
enum('G','PG','PG-13','R','NC-17') ascii 1
set('one', 'two') ascii 1
not_exist ascii 0
char(-1) ascii 0
char(10) latin5 10
char(256) latin5 255
binary(10) latin5 10
......@@ -298,16 +338,6 @@ enum('G','PG','PG-13','R','NC-17') latin5 1
set('one', 'two') latin5 1
not_exist latin5 0
char(-1) latin5 0
char(10) big5 20
char(256) big5 510
binary(10) big5 10
binary(256) big5 255
varchar(10) big5 21
varbinary(10) big5 21
enum('G','PG','PG-13','R','NC-17') big5 1
set('one', 'two') big5 1
not_exist big5 0
char(-1) big5 0
char(10) koi8r 10
char(256) koi8r 255
binary(10) koi8r 10
......@@ -318,6 +348,16 @@ enum('G','PG','PG-13','R','NC-17') koi8r 1
set('one', 'two') koi8r 1
not_exist koi8r 0
char(-1) koi8r 0
char(10) latin7 10
char(256) latin7 255
binary(10) latin7 10
binary(256) latin7 255
varchar(10) latin7 11
varbinary(10) latin7 11
enum('G','PG','PG-13','R','NC-17') latin7 1
set('one', 'two') latin7 1
not_exist latin7 0
char(-1) latin7 0
char(10) sjis 20
char(256) sjis 510
binary(10) sjis 10
......@@ -328,83 +368,43 @@ enum('G','PG','PG-13','R','NC-17') sjis 1
set('one', 'two') sjis 1
not_exist sjis 0
char(-1) sjis 0
char(10) utf16le 40
char(256) utf16le 1020
binary(10) utf16le 10
binary(256) utf16le 255
varchar(10) utf16le 41
varbinary(10) utf16le 41
enum('G','PG','PG-13','R','NC-17') utf16le 1
set('one', 'two') utf16le 1
not_exist utf16le 0
char(-1) utf16le 0
char(10) tis620 10
char(256) tis620 255
binary(10) tis620 10
binary(256) tis620 255
varchar(10) tis620 11
varbinary(10) tis620 11
enum('G','PG','PG-13','R','NC-17') tis620 1
set('one', 'two') tis620 1
not_exist tis620 0
char(-1) tis620 0
char(10) utf16 40
char(256) utf16 1020
binary(10) utf16 10
binary(256) utf16 255
varchar(10) utf16 41
varbinary(10) utf16 41
enum('G','PG','PG-13','R','NC-17') utf16 1
set('one', 'two') utf16 1
not_exist utf16 0
char(-1) utf16 0
char(10) cp1251 10
char(256) cp1251 255
binary(10) cp1251 10
binary(256) cp1251 255
varchar(10) cp1251 11
varbinary(10) cp1251 11
enum('G','PG','PG-13','R','NC-17') cp1251 1
set('one', 'two') cp1251 1
not_exist cp1251 0
char(-1) cp1251 0
char(10) gbk 20
char(256) gbk 510
binary(10) gbk 10
binary(256) gbk 255
varchar(10) gbk 21
varbinary(10) gbk 21
enum('G','PG','PG-13','R','NC-17') gbk 1
set('one', 'two') gbk 1
not_exist gbk 0
char(-1) gbk 0
char(10) hebrew 10
char(256) hebrew 255
binary(10) hebrew 10
binary(256) hebrew 255
varchar(10) hebrew 11
varbinary(10) hebrew 11
enum('G','PG','PG-13','R','NC-17') hebrew 1
set('one', 'two') hebrew 1
not_exist hebrew 0
char(-1) hebrew 0
char(10) latin1 10
char(256) latin1 255
binary(10) latin1 10
binary(256) latin1 255
varchar(10) latin1 11
varbinary(10) latin1 11
enum('G','PG','PG-13','R','NC-17') latin1 1
set('one', 'two') latin1 1
not_exist latin1 0
char(-1) latin1 0
char(10) macroman 10
char(256) macroman 255
binary(10) macroman 10
binary(256) macroman 255
varchar(10) macroman 11
varbinary(10) macroman 11
enum('G','PG','PG-13','R','NC-17') macroman 1
set('one', 'two') macroman 1
not_exist macroman 0
char(-1) macroman 0
char(10) utf8 30
char(256) utf8 765
binary(10) utf8 10
binary(256) utf8 255
varchar(10) utf8 31
varbinary(10) utf8 31
enum('G','PG','PG-13','R','NC-17') utf8 1
set('one', 'two') utf8 1
not_exist utf8 0
char(-1) utf8 0
char(10) cp1257 10
char(256) cp1257 255
binary(10) cp1257 10
binary(256) cp1257 255
varchar(10) cp1257 11
varbinary(10) cp1257 11
enum('G','PG','PG-13','R','NC-17') cp1257 1
set('one', 'two') cp1257 1
not_exist cp1257 0
char(-1) cp1257 0
char(10) gb18030 40
char(256) gb18030 1020
binary(10) gb18030 10
binary(256) gb18030 255
varchar(10) gb18030 41
varbinary(10) gb18030 41
enum('G','PG','PG-13','R','NC-17') gb18030 1
set('one', 'two') gb18030 1
not_exist gb18030 0
char(-1) gb18030 0
char(10) keybcs2 10
char(256) keybcs2 255
binary(10) keybcs2 10
binary(256) keybcs2 255
varchar(10) keybcs2 11
varbinary(10) keybcs2 11
enum('G','PG','PG-13','R','NC-17') keybcs2 1
set('one', 'two') keybcs2 1
not_exist keybcs2 0
char(-1) keybcs2 0
......@@ -21,3 +21,6 @@ sales_by_store
staff
staff_list
store
t_clinic_info
t_partition_list
test_id
......@@ -64,7 +64,7 @@ echo "select * from film" | soar -report-type tiast-json
* **Example**:
```bash
echo "select * from film" | soar -report-type meta
echo "select * from film" | soar -report-type tables
```
## query-type
* **Description**:SQL 语句的请求类型
......
......@@ -209,6 +209,24 @@ func ChangeDB(env *database.Connector, sql string) {
}
}
func CurrentDB(sql, db string) string {
stmt, err := sqlparser.Parse(sql)
if err != nil {
return common.Config.TestDSN.Schema
}
switch stmt := stmt.(type) {
case *sqlparser.Use:
if stmt.DBName.String() != "" {
db = stmt.DBName.String()
}
}
if db == "" {
db = common.Config.TestDSN.Schema
}
return db
}
// BuildVirtualEnv rEnv 为 SQL 源环境,DB 使用的信息从接口获取
// 注意:如果是 USE, DDL 等语句,执行完第一条就会返回,后面的 SQL 不会执行
func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string) bool {
......
{
"687D590364E29465": {
"CLA.001": {
[
{
"ID": "687D590364E29465",
"Fingerprint": "select * from film",
"Score": 0,
"Sample": "select * from film",
"Explain": null,
"HeuristicRules": [
{
"Item": "CLA.001",
"Severity": "L4",
"Summary": "最外层 SELECT 未指定 WHERE 条件",
......@@ -8,7 +14,7 @@
"Case": "select id from tbl",
"Position": 0
},
"COL.001": {
{
"Item": "COL.001",
"Severity": "L1",
"Summary": "不建议使用 SELECT * 类型查询",
......@@ -16,5 +22,10 @@
"Case": "select * from tbl where id=1",
"Position": 0
}
}
}
],
"IndexRules": null,
"Tables": [
"`information_schema`.`film`"
]
}
]
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册