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