Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
古剑诛仙
soar
提交
296d7e45
S
soar
项目概览
古剑诛仙
/
soar
与 Fork 源项目一致
Fork自
Xiaomi / soar
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
296d7e45
编写于
1月 05, 2019
作者:
martianzhang
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into dev
上级
4e9b365a
552ccf9a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
56 addition
and
15 deletion
+56
-15
database/explain.go
database/explain.go
+17
-14
genver.sh
genver.sh
+4
-1
vendor/vendor.json
vendor/vendor.json
+35
-0
未找到文件。
database/explain.go
浏览文件 @
296d7e45
...
...
@@ -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
...
...
genver.sh
浏览文件 @
296d7e45
...
...
@@ -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
vendor/vendor.json
浏览文件 @
296d7e45
...
...
@@ -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="
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录