Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
b1c977b1
S
soar
项目概览
Xiaomi
/
soar
大约 2 年 前同步成功
通知
467
Star
8513
Fork
1329
代码
文件
提交
分支
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看板
提交
b1c977b1
编写于
12月 18, 2018
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
try to fix #169
RES.009 not consider about "and", "or"... Operator in BinaryOperationExpr
上级
a76075f4
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
138 addition
and
74 deletion
+138
-74
CHANGES.md
CHANGES.md
+21
-11
advisor/heuristic.go
advisor/heuristic.go
+9
-3
advisor/heuristic_test.go
advisor/heuristic_test.go
+4
-0
common/config.go
common/config.go
+1
-1
vendor/github.com/pingcap/parser/ast/expressions.go
vendor/github.com/pingcap/parser/ast/expressions.go
+48
-4
vendor/vendor.json
vendor/vendor.json
+55
-55
未找到文件。
CHANGES.md
浏览文件 @
b1c977b1
# CHANGELOG
## 2018-12
-
DOING: english translation
## 2018-11
-
add all third-party lib into vendor
-
support
`-report-type chardet`
-
add more heuristic rules: TBL.008, KEY.010, ARG.012, KWR.004
...
...
@@ -21,33 +23,36 @@
-
fix #112 multi-line comment will cause line counter error, when -report-type=lint
-
fix #110 remove bom before auditing
-
fix #104 case insensitive regex @ CLA.009
-
fix #87 RuleImplicitConversion value type mis
ta
ch check bug
-
fix #87 RuleImplicitConversion value type mis
mat
ch check bug
-
fix #38 always true where condition check
-
abandon stdin terminal interactive mod, which may seems like hangup
## 2018-10
-
Fix SplitStatement mulitstatement eof bug #66
-
Fix SplitStatement multistatement eof bug #66
-
Fix pretty func hangup issue #47
-
Fix some foolish code spell error
-
Use travis for CI
-
Fix Go 1.8 defa
pth
GOPATH compatible issue BUG #5
-
Fix Go 1.8 defa
ult
GOPATH compatible issue BUG #5
-
2018-10-20 开源先锋日(OSCAR)对外正式开源发布代码
## 2018-09
-
修复多个启发式建议不准确BUG,优化部分建议文案使得建议更清晰
-
基于
TiDB Parser完善多个DDL
类型语句的建议
-
基于
TiDB Parser 完善多个 DDL
类型语句的建议
-
新增lint report-type类型,支持Vim Plugin优化建议输出
-
更新整理项目文档,开源准备
-
2018-09-21 Gdevops SOAR首次对外进行技术分享宣传
## 2018-08
-
利用docker临时容器进行daily测试
-
利用 docker 临时容器进行 daily 测试
-
添加main_test全功能回归测试
-
修复在测试中发现的问题
-
mymysql
合并MySQL8.0
相关PR,修改vendor依赖
-
mymysql
合并 MySQL8.0
相关PR,修改vendor依赖
-
改善HeuristicRule中的文案
-
持续集成Vitess Parser的改进
-
NewQuery4Audit
结构体中引入
TiDB Parser
-
NewQuery4Audit
结构体中引入
TiDB Parser
-
通过TiAST完成大量与 DDL 相关的TODO
-
修改heuristic rules检查的返回值,提升拓展性
-
建议中引入Position,用于表示建议产生于SQL的位置
...
...
@@ -58,22 +63,25 @@
-
优化 doc 文档
## 2018-07
-
补充文档,添加项目LOGO
-
改善代码质量提升测试覆盖度
-
mymysql升级,支持MySQL 8.0
-
提供remove-comment小工具
-
提供索引重复检查小工具
-
HeuristicRule
新增
RuleSpaceAfterDot
-
HeuristicRule
新增
RuleSpaceAfterDot
-
支持字符集和Collation不相同时的隐式数据类型转换的检查
## 2018-06
-
支持更多的SQL Rewrite规则
-
添加SQL执行超时限制
-
索引优化建议支持对约束的检查
-
修复数据采样中
null
值处理不正确的问题
-
Explain
支持
last_query_cost
-
修复数据采样中
NULL
值处理不正确的问题
-
Explain
支持
last_query_cost
## 2018-05
-
添加数据采样功能
-
添加语句执行安全检查
-
支持DDL语法检查
...
...
@@ -84,6 +92,7 @@
-
支持SQL Pretty输出
## 2018-04
-
支持语法检查
-
支持测试环境
-
支持MySQL原数据的获取
...
...
@@ -93,7 +102,8 @@
-
引入配置文件
## 2018-03
-
基本架构设计
-
添加大量底层函数用于处理AST
-
添加Insert、Delete、Update
转写成Select
的基本函数
-
添加Insert、Delete、Update
转写成 Select
的基本函数
-
支持MySQL Explain信息输出
advisor/heuristic.go
浏览文件 @
b1c977b1
...
...
@@ -1319,28 +1319,34 @@ func (q *Query4Audit) RuleMultiCompare() Rule {
case
*
tidb
.
BinaryOperationExpr
:
switch
where
.
L
.
(
type
)
{
case
*
tidb
.
BinaryOperationExpr
:
if
where
.
Op
.
String
()
==
"eq"
{
rule
=
HeuristicRules
[
"RES.009"
]
}
}
}
case
*
tidb
.
UpdateStmt
:
switch
where
:=
node
.
Where
.
(
type
)
{
case
*
tidb
.
BinaryOperationExpr
:
switch
where
.
L
.
(
type
)
{
case
*
tidb
.
BinaryOperationExpr
:
if
where
.
Op
.
String
()
==
"eq"
{
rule
=
HeuristicRules
[
"RES.009"
]
}
}
}
case
*
tidb
.
DeleteStmt
:
switch
where
:=
node
.
Where
.
(
type
)
{
case
*
tidb
.
BinaryOperationExpr
:
switch
where
.
L
.
(
type
)
{
case
*
tidb
.
BinaryOperationExpr
:
if
where
.
Op
.
String
()
==
"eq"
{
rule
=
HeuristicRules
[
"RES.009"
]
}
}
}
}
}
}
return
rule
}
...
...
advisor/heuristic_test.go
浏览文件 @
b1c977b1
...
...
@@ -952,6 +952,10 @@ func TestRuleMultiCompare(t *testing.T) {
},
{
"SELECT * FROM tbl WHERE col = 'abc'"
,
// https://github.com/XiaoMi/soar/issues/169
"SELECT * FROM tbl WHERE col = 'abc' and c = 1"
,
"update tb set c = 1 where a = 2 and b = 3"
,
"delete from tb where a = 2 and b = 3"
,
},
}
...
...
common/config.go
浏览文件 @
b1c977b1
...
...
@@ -512,7 +512,7 @@ func readCmdFlags() error {
maxGroupByColsCount
:=
flag
.
Int
(
"max-group-by-cols-count"
,
Config
.
MaxGroupByColsCount
,
"MaxGroupByColsCount, 单条 SQL 中 GroupBy 包含列的最大数量"
)
maxDistinctCount
:=
flag
.
Int
(
"max-distinct-count"
,
Config
.
MaxDistinctCount
,
"MaxDistinctCount, 单条 SQL 中 Distinct 的最大数量"
)
maxIdxColsCount
:=
flag
.
Int
(
"max-index-cols-count"
,
Config
.
MaxIdxColsCount
,
"MaxIdxColsCount, 复合索引中包含列的最大数量"
)
maxTextColsCount
:=
flag
.
Int
(
"max-tex
s
t-cols-count"
,
Config
.
MaxTextColsCount
,
"MaxTextColsCount, 表中含有的 text/blob 列的最大数量"
)
maxTextColsCount
:=
flag
.
Int
(
"max-text-cols-count"
,
Config
.
MaxTextColsCount
,
"MaxTextColsCount, 表中含有的 text/blob 列的最大数量"
)
maxTotalRows
:=
flag
.
Int64
(
"max-total-rows"
,
Config
.
MaxTotalRows
,
"MaxTotalRows, 计算散粒度时,当数据行数大于MaxTotalRows即开启数据库保护模式,不计算散粒度"
)
maxQueryCost
:=
flag
.
Int64
(
"max-query-cost"
,
Config
.
MaxQueryCost
,
"MaxQueryCost, last_query_cost 超过该值时将给予警告"
)
spaghettiQueryLength
:=
flag
.
Int
(
"spaghetti-query-length"
,
Config
.
SpaghettiQueryLength
,
"SpaghettiQueryLength, SQL最大长度警告,超过该长度会给警告"
)
...
...
vendor/github.com/pingcap/parser/ast/expressions.go
浏览文件 @
b1c977b1
...
...
@@ -154,7 +154,17 @@ type BinaryOperationExpr struct {
// Restore implements Node interface.
func
(
n
*
BinaryOperationExpr
)
Restore
(
ctx
*
RestoreCtx
)
error
{
return
errors
.
New
(
"Not implemented"
)
if
err
:=
n
.
L
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred when restore BinaryOperationExpr.L"
)
}
if
err
:=
n
.
Op
.
Restore
(
ctx
.
In
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred when restore BinaryOperationExpr.Op"
)
}
if
err
:=
n
.
R
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred when restore BinaryOperationExpr.R"
)
}
return
nil
}
// Format the ExprNode into a Writer.
...
...
@@ -200,7 +210,15 @@ type WhenClause struct {
// Restore implements Node interface.
func
(
n
*
WhenClause
)
Restore
(
ctx
*
RestoreCtx
)
error
{
return
errors
.
New
(
"Not implemented"
)
ctx
.
WriteKeyWord
(
"WHEN "
)
if
err
:=
n
.
Expr
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred while restore WhenClauses.Expr"
)
}
ctx
.
WriteKeyWord
(
" THEN "
)
if
err
:=
n
.
Result
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred while restore WhenClauses.Result"
)
}
return
nil
}
// Accept implements Node Accept interface.
...
...
@@ -238,7 +256,28 @@ type CaseExpr struct {
// Restore implements Node interface.
func
(
n
*
CaseExpr
)
Restore
(
ctx
*
RestoreCtx
)
error
{
return
errors
.
New
(
"Not implemented"
)
ctx
.
WriteKeyWord
(
"CASE"
)
if
n
.
Value
!=
nil
{
ctx
.
WritePlain
(
" "
)
if
err
:=
n
.
Value
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred while restore CaseExpr.Value"
)
}
}
for
_
,
clause
:=
range
n
.
WhenClauses
{
ctx
.
WritePlain
(
" "
)
if
err
:=
clause
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred while restore CaseExpr.WhenClauses"
)
}
}
if
n
.
ElseClause
!=
nil
{
ctx
.
WriteKeyWord
(
" ELSE "
)
if
err
:=
n
.
ElseClause
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred while restore CaseExpr.ElseClause"
)
}
}
ctx
.
WriteKeyWord
(
" END"
)
return
nil
}
// Format the ExprNode into a Writer.
...
...
@@ -777,7 +816,12 @@ type ParenthesesExpr struct {
// Restore implements Node interface.
func
(
n
*
ParenthesesExpr
)
Restore
(
ctx
*
RestoreCtx
)
error
{
return
errors
.
New
(
"Not implemented"
)
ctx
.
WritePlain
(
"("
)
if
err
:=
n
.
Expr
.
Restore
(
ctx
);
err
!=
nil
{
return
errors
.
Annotate
(
err
,
"An error occurred when restore ParenthesesExpr.Expr"
)
}
ctx
.
WritePlain
(
")"
)
return
nil
}
// Format the ExprNode into a Writer.
...
...
vendor/vendor.json
浏览文件 @
b1c977b1
...
...
@@ -107,104 +107,104 @@
{
"checksumSHA1"
:
"fjZ4hf54cBBlV260wsAMZJ5T3po="
,
"path"
:
"github.com/pingcap/parser"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"
nRo2Z/Gyb1ziK+CKQi1OAOMa4hc
="
,
"checksumSHA1"
:
"
dk8IFRGPUrMidLa7QfmI/prTXTA
="
,
"path"
:
"github.com/pingcap/parser/ast"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"skWGV4FNvD3vr+5olepaPPnylUw="
,
"path"
:
"github.com/pingcap/parser/auth"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"t4UHo966WzU9Z0IJkyGHRp0loOk="
,
"path"
:
"github.com/pingcap/parser/charset"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"SInoXbsRe0tnBwmatmtZYfSFbdk="
,
"path"
:
"github.com/pingcap/parser/format"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"WZYTGDMnc1UfTdjdZoBbISsnpRY="
,
"path"
:
"github.com/pingcap/parser/model"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"QBa9yiMDQNl2cLLwqlRoNTpCPNg="
,
"path"
:
"github.com/pingcap/parser/mysql"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"+O6CYIE0jT8pIDxWRP9FtKwFZjI="
,
"path"
:
"github.com/pingcap/parser/opcode"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"XvnUllvwMYd6HrMvMiKnn4cGN2M="
,
"path"
:
"github.com/pingcap/parser/terror"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"YoDiJ3sniNqxkP5X/BDkx6efteA="
,
"path"
:
"github.com/pingcap/parser/types"
,
"revision"
:
"
b7f4816358997259f649a06fd126db3542b644c8
"
,
"revisionTime"
:
"2018-12-1
7T08:17:10
Z"
"revision"
:
"
deacf026787e7b6867b7083dcc461393ac700224
"
,
"revisionTime"
:
"2018-12-1
8T07:19:12
Z"
},
{
"checksumSHA1"
:
"fWqL/7jTYOiqDNmiUcQi3u45Hw0="
,
"path"
:
"github.com/pingcap/tidb/sessionctx/stmtctx"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"kXyszfR2fQ6bHvuCCFlHRkt1mF0="
,
"path"
:
"github.com/pingcap/tidb/types"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"DWVD7+ygtT66IQ+cqXmMJ5OVqUk="
,
"path"
:
"github.com/pingcap/tidb/types/json"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"6vi/eCZXqNTa5eAUpxDZet4LPlY="
,
"path"
:
"github.com/pingcap/tidb/types/parser_driver"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"s709bhSrG2Ec35406mGtrySid4s="
,
"path"
:
"github.com/pingcap/tidb/util/execdetails"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"nUC7zVoAMNR2a+z2iGqHoN2AkFE="
,
"path"
:
"github.com/pingcap/tidb/util/hack"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"xSyepiuqsoaaeDch7cXeumvVHKM="
,
"path"
:
"github.com/pingcap/tidb/util/memory"
,
"revision"
:
"
ab88f0b1c3b6db829f3e553963673a9bf7752899
"
,
"revisionTime"
:
"2018-12-1
7T12:08:05
Z"
"revision"
:
"
4899ce5e923b5833cc684ea8d301f73773718330
"
,
"revisionTime"
:
"2018-12-1
8T06:47:23
Z"
},
{
"checksumSHA1"
:
"SmYeIK/fIYXNu8IKxD6HOVQVTuU="
,
...
...
@@ -401,62 +401,62 @@
{
"checksumSHA1"
:
"aKn1oKcY74N8TRLm3Ayt7Q4bbI4="
,
"path"
:
"vitess.io/vitess/go/bytes2"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"JVCEN4UGRmg3TofIBdzZMZ3G0Ww="
,
"path"
:
"vitess.io/vitess/go/hack"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"F5pcGq+2W1FHEjgktTdKOE6W8mk="
,
"path"
:
"vitess.io/vitess/go/sqltypes"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"ntFIQYkBS51G6y+FEkjFW40+HOU="
,
"path"
:
"vitess.io/vitess/go/vt/log"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"tPQFPwbMdjuX0qjNl4Zl8zc37JQ="
,
"path"
:
"vitess.io/vitess/go/vt/proto/query"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"o0tR/c7lgr0pLkxk7CdvjiNDAKU="
,
"path"
:
"vitess.io/vitess/go/vt/proto/topodata"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"77UojBqi0yyeQvR70j7C3kcKclQ="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtgate"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"QpWGhoVDwM+8+sgYLI/YU+95iGU="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtrpc"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"lENrUY/YyxwYFHYN+21TBH92P3U="
,
"path"
:
"vitess.io/vitess/go/vt/sqlparser"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
},
{
"checksumSHA1"
:
"Jx+gOh/kiBDSZxEIWHyYn9brjdo="
,
"path"
:
"vitess.io/vitess/go/vt/vterrors"
,
"revision"
:
"
935bf8ac1ad1e75bc8fd26a74fbfc906f15aa7d0
"
,
"revisionTime"
:
"2018-12-1
7T04:01:44
Z"
"revision"
:
"
bbff624145ae9e6c797b2a1b9e04fdddc92af3a9
"
,
"revisionTime"
:
"2018-12-1
8T04:30:55
Z"
}
],
"rootPath"
:
"github.com/XiaoMi/soar"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录