diff --git a/database/explain.go b/database/explain.go index a41a9d80561a731fa2d022fbaa765e896404533b..75c3f728b968b7448f26718212b9f5373aef936a 100644 --- a/database/explain.go +++ b/database/explain.go @@ -66,9 +66,9 @@ var ExplainType = map[string]int{ type ExplainInfo struct { SQL string ExplainFormat int - ExplainRows []*ExplainRow + ExplainRows []ExplainRow ExplainJSON *ExplainJSON - Warnings []*ExplainWarning + Warnings []ExplainWarning QueryCost float64 } @@ -419,12 +419,12 @@ func findTablesInJSON(explainJSON string, depth int) { } // FormatJSONIntoTraditional 将JSON形式转换为TRADITIONAL形式,方便前端展现 -func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow { +func FormatJSONIntoTraditional(explainJSON string) []ExplainRow { // 查找JSON中的所有ExplainJSONTable explainJSONTables = []*ExplainJSONTable{} findTablesInJSON(explainJSON, 0) - var explainRows []*ExplainRow + var explainRows []ExplainRow id := -1 for _, table := range explainJSONTables { keyLen := table.KeyLength @@ -435,7 +435,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow { if filtered > 100.00 { filtered = 100.00 } - explainRows = append(explainRows, &ExplainRow{ + explainRows = append(explainRows, ExplainRow{ ID: id + 1, SelectType: "", TableName: table.TableName, @@ -456,7 +456,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow { // ConvertExplainJSON2Row 将 JSON 格式转成 ROW 格式,为方便统一做优化建议 // 但是会损失一些 JSON 特有的分析结果 -func ConvertExplainJSON2Row(explainJSON *ExplainJSON) []*ExplainRow { +func ConvertExplainJSON2Row(explainJSON *ExplainJSON) []ExplainRow { buf, err := json.Marshal(explainJSON) if err != nil { return nil @@ -751,7 +751,7 @@ func ParseExplainText(content string) (exp *ExplainInfo, err error) { } // 解析文本形式传统形式Explain信息 -func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err error) { +func parseTraditionalExplainText(content string) (explainRows []ExplainRow, err error) { LS := regexp.MustCompile(`^\+`) // 华丽的分隔线:) // 格式正确性检查 @@ -827,7 +827,7 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err } // 拼接结构体 - explainRows = append(explainRows, &ExplainRow{ + explainRows = append(explainRows, ExplainRow{ ID: id, SelectType: colsMap["select_type"], TableName: colsMap["table"], @@ -847,9 +847,9 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err } // 解析文本形式竖排版 Explain信息 -func parseVerticalExplainText(content string) (explainRows []*ExplainRow, err error) { +func parseVerticalExplainText(content string) (explainRows []ExplainRow, err error) { var lines []string - explainRow := &ExplainRow{ + explainRow := ExplainRow{ Partitions: "NULL", Filtered: 0.00, } @@ -961,7 +961,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err // Different MySQL version has different columns define var selectType, table, partitions, accessType, possibleKeys, key, keyLen, ref, extra []byte - expRow := &ExplainRow{} + expRow := ExplainRow{} explainFields := make([]interface{}, 0) fields := map[string]interface{}{ "id": &expRow.ID, @@ -990,7 +990,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err } // 补全 ExplainRows - var explainRows []*ExplainRow + var explainRows []ExplainRow for res.Rows.Next() { err := res.Rows.Scan(explainFields...) if err != nil { @@ -1020,8 +1020,8 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err // check explain warning info if common.Config.ShowWarnings { for res.Warning.Next() { - var expWarning *ExplainWarning - err = res.Warning.Scan(expWarning.Level, expWarning.Code, expWarning.Message) + var expWarning ExplainWarning + err = res.Warning.Scan(&expWarning.Level, &expWarning.Code, &expWarning.Message) if err != nil { break } @@ -1059,6 +1059,9 @@ func (db *Connector) Explain(sql string, explainType int, formatType int) (exp * // 执行EXPLAIN请求 exp.SQL = db.explainQuery(sql, explainType, formatType) + if exp.SQL == "" { + return exp, nil + } res, err := db.Query(exp.SQL) if err != nil { return exp, err diff --git a/genver.sh b/genver.sh index 56cc0ff8e11a126445ba36f54b618a03ba4df976..9495ff69a2bf2f8e30a73801019f2d7f6d926e8c 100755 --- a/genver.sh +++ b/genver.sh @@ -32,4 +32,7 @@ const ( ) EOF -echo "${tag}" | awk -F '-' '{print $1}' > VERSION +XIAOMI=$(git ls-remote --get-url | grep XiaoMi) +if [ "x${XIAOMI}" != "x" ]; then + echo "${tag}" | awk -F '-' '{print $1}' > VERSION +fi diff --git a/vendor/vendor.json b/vendor/vendor.json index 72445dccadc24532a5ba215a70ff3bfde67b34af..a1cc39085d762e3636e2db72f0127842dcb3600e 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -173,44 +173,79 @@ { "checksumSHA1": "MxoLdFWi8nwd0uqTJnYqw+JaDAY=", "path": "github.com/pingcap/tidb/sessionctx/stmtctx", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "wlD7aGqTJ5eBQYK0ub4b2Ick1j8=", "path": "github.com/pingcap/tidb/types", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "DWVD7+ygtT66IQ+cqXmMJ5OVqUk=", "path": "github.com/pingcap/tidb/types/json", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "6vi/eCZXqNTa5eAUpxDZet4LPlY=", "path": "github.com/pingcap/tidb/types/parser_driver", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "SS7twHZofFKr8w/pwIKmkp3u5qU=", "path": "github.com/pingcap/tidb/util/execdetails", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "nUC7zVoAMNR2a+z2iGqHoN2AkFE=", "path": "github.com/pingcap/tidb/util/hack", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "xSyepiuqsoaaeDch7cXeumvVHKM=", "path": "github.com/pingcap/tidb/util/memory", +<<<<<<< HEAD "revision": "78a51a4626999279749c460f3f42a2e92897c2e3", "revisionTime": "2019-01-05T13:32:32Z" +======= + "revision": "081a2c5cccf4d82ca2ad33cdc9f2f21d3319e2d5", + "revisionTime": "2019-01-05T02:32:10Z" +>>>>>>> master }, { "checksumSHA1": "SmYeIK/fIYXNu8IKxD6HOVQVTuU=",