Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
552ccf9a
S
soar
项目概览
Xiaomi
/
soar
大约 1 年 前同步成功
通知
398
Star
8512
Fork
1328
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
552ccf9a
编写于
1月 05, 2019
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix explain result with multi rows error
上级
442f4147
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
14 addition
and
14 deletion
+14
-14
database/explain.go
database/explain.go
+14
-14
未找到文件。
database/explain.go
浏览文件 @
552ccf9a
...
@@ -66,9 +66,9 @@ var ExplainType = map[string]int{
...
@@ -66,9 +66,9 @@ var ExplainType = map[string]int{
type
ExplainInfo
struct
{
type
ExplainInfo
struct
{
SQL
string
SQL
string
ExplainFormat
int
ExplainFormat
int
ExplainRows
[]
*
ExplainRow
ExplainRows
[]
ExplainRow
ExplainJSON
*
ExplainJSON
ExplainJSON
*
ExplainJSON
Warnings
[]
*
ExplainWarning
Warnings
[]
ExplainWarning
QueryCost
float64
QueryCost
float64
}
}
...
@@ -419,12 +419,12 @@ func findTablesInJSON(explainJSON string, depth int) {
...
@@ -419,12 +419,12 @@ func findTablesInJSON(explainJSON string, depth int) {
}
}
// FormatJSONIntoTraditional 将JSON形式转换为TRADITIONAL形式,方便前端展现
// FormatJSONIntoTraditional 将JSON形式转换为TRADITIONAL形式,方便前端展现
func
FormatJSONIntoTraditional
(
explainJSON
string
)
[]
*
ExplainRow
{
func
FormatJSONIntoTraditional
(
explainJSON
string
)
[]
ExplainRow
{
// 查找JSON中的所有ExplainJSONTable
// 查找JSON中的所有ExplainJSONTable
explainJSONTables
=
[]
*
ExplainJSONTable
{}
explainJSONTables
=
[]
*
ExplainJSONTable
{}
findTablesInJSON
(
explainJSON
,
0
)
findTablesInJSON
(
explainJSON
,
0
)
var
explainRows
[]
*
ExplainRow
var
explainRows
[]
ExplainRow
id
:=
-
1
id
:=
-
1
for
_
,
table
:=
range
explainJSONTables
{
for
_
,
table
:=
range
explainJSONTables
{
keyLen
:=
table
.
KeyLength
keyLen
:=
table
.
KeyLength
...
@@ -435,7 +435,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow {
...
@@ -435,7 +435,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow {
if
filtered
>
100.00
{
if
filtered
>
100.00
{
filtered
=
100.00
filtered
=
100.00
}
}
explainRows
=
append
(
explainRows
,
&
ExplainRow
{
explainRows
=
append
(
explainRows
,
ExplainRow
{
ID
:
id
+
1
,
ID
:
id
+
1
,
SelectType
:
""
,
SelectType
:
""
,
TableName
:
table
.
TableName
,
TableName
:
table
.
TableName
,
...
@@ -456,7 +456,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow {
...
@@ -456,7 +456,7 @@ func FormatJSONIntoTraditional(explainJSON string) []*ExplainRow {
// ConvertExplainJSON2Row 将 JSON 格式转成 ROW 格式,为方便统一做优化建议
// ConvertExplainJSON2Row 将 JSON 格式转成 ROW 格式,为方便统一做优化建议
// 但是会损失一些 JSON 特有的分析结果
// 但是会损失一些 JSON 特有的分析结果
func
ConvertExplainJSON2Row
(
explainJSON
*
ExplainJSON
)
[]
*
ExplainRow
{
func
ConvertExplainJSON2Row
(
explainJSON
*
ExplainJSON
)
[]
ExplainRow
{
buf
,
err
:=
json
.
Marshal
(
explainJSON
)
buf
,
err
:=
json
.
Marshal
(
explainJSON
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
return
nil
...
@@ -751,7 +751,7 @@ func ParseExplainText(content string) (exp *ExplainInfo, err error) {
...
@@ -751,7 +751,7 @@ func ParseExplainText(content string) (exp *ExplainInfo, err error) {
}
}
// 解析文本形式传统形式Explain信息
// 解析文本形式传统形式Explain信息
func
parseTraditionalExplainText
(
content
string
)
(
explainRows
[]
*
ExplainRow
,
err
error
)
{
func
parseTraditionalExplainText
(
content
string
)
(
explainRows
[]
ExplainRow
,
err
error
)
{
LS
:=
regexp
.
MustCompile
(
`^\+`
)
// 华丽的分隔线:)
LS
:=
regexp
.
MustCompile
(
`^\+`
)
// 华丽的分隔线:)
// 格式正确性检查
// 格式正确性检查
...
@@ -827,7 +827,7 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err
...
@@ -827,7 +827,7 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err
}
}
// 拼接结构体
// 拼接结构体
explainRows
=
append
(
explainRows
,
&
ExplainRow
{
explainRows
=
append
(
explainRows
,
ExplainRow
{
ID
:
id
,
ID
:
id
,
SelectType
:
colsMap
[
"select_type"
],
SelectType
:
colsMap
[
"select_type"
],
TableName
:
colsMap
[
"table"
],
TableName
:
colsMap
[
"table"
],
...
@@ -847,9 +847,9 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err
...
@@ -847,9 +847,9 @@ func parseTraditionalExplainText(content string) (explainRows []*ExplainRow, err
}
}
// 解析文本形式竖排版 Explain信息
// 解析文本形式竖排版 Explain信息
func
parseVerticalExplainText
(
content
string
)
(
explainRows
[]
*
ExplainRow
,
err
error
)
{
func
parseVerticalExplainText
(
content
string
)
(
explainRows
[]
ExplainRow
,
err
error
)
{
var
lines
[]
string
var
lines
[]
string
explainRow
:=
&
ExplainRow
{
explainRow
:=
ExplainRow
{
Partitions
:
"NULL"
,
Partitions
:
"NULL"
,
Filtered
:
0.00
,
Filtered
:
0.00
,
}
}
...
@@ -961,7 +961,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
...
@@ -961,7 +961,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
// Different MySQL version has different columns define
// Different MySQL version has different columns define
var
selectType
,
table
,
partitions
,
accessType
,
possibleKeys
,
key
,
keyLen
,
ref
,
extra
[]
byte
var
selectType
,
table
,
partitions
,
accessType
,
possibleKeys
,
key
,
keyLen
,
ref
,
extra
[]
byte
expRow
:=
&
ExplainRow
{}
expRow
:=
ExplainRow
{}
explainFields
:=
make
([]
interface
{},
0
)
explainFields
:=
make
([]
interface
{},
0
)
fields
:=
map
[
string
]
interface
{}{
fields
:=
map
[
string
]
interface
{}{
"id"
:
&
expRow
.
ID
,
"id"
:
&
expRow
.
ID
,
...
@@ -990,7 +990,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
...
@@ -990,7 +990,7 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
}
}
// 补全 ExplainRows
// 补全 ExplainRows
var
explainRows
[]
*
ExplainRow
var
explainRows
[]
ExplainRow
for
res
.
Rows
.
Next
()
{
for
res
.
Rows
.
Next
()
{
err
:=
res
.
Rows
.
Scan
(
explainFields
...
)
err
:=
res
.
Rows
.
Scan
(
explainFields
...
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -1020,8 +1020,8 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
...
@@ -1020,8 +1020,8 @@ func ParseExplainResult(res QueryResult, formatType int) (exp *ExplainInfo, err
// check explain warning info
// check explain warning info
if
common
.
Config
.
ShowWarnings
{
if
common
.
Config
.
ShowWarnings
{
for
res
.
Warning
.
Next
()
{
for
res
.
Warning
.
Next
()
{
var
expWarning
*
ExplainWarning
var
expWarning
ExplainWarning
err
=
res
.
Warning
.
Scan
(
expWarning
.
Level
,
expWarning
.
Code
,
expWarning
.
Message
)
err
=
res
.
Warning
.
Scan
(
&
expWarning
.
Level
,
&
expWarning
.
Code
,
&
expWarning
.
Message
)
if
err
!=
nil
{
if
err
!=
nil
{
break
break
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录