提交 5ac868ee 编写于 作者: martianzhang's avatar martianzhang

daily update vendor

上级 c7a2fd32
......@@ -1117,7 +1117,36 @@ type LoadDataStmt struct {
// Restore implements Node interface.
func (n *LoadDataStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
ctx.WriteKeyWord("LOAD DATA ")
if n.IsLocal {
ctx.WriteKeyWord("LOCAL ")
}
ctx.WriteKeyWord("INFILE ")
ctx.WriteString(n.Path)
ctx.WriteKeyWord(" INTO TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore LoadDataStmt.Table")
}
n.FieldsInfo.Restore(ctx)
n.LinesInfo.Restore(ctx)
if n.IgnoreLines != 0 {
ctx.WriteKeyWord(" IGNORE ")
ctx.WritePlainf("%d", n.IgnoreLines)
ctx.WriteKeyWord(" LINES")
}
if len(n.Columns) != 0 {
ctx.WritePlain(" (")
for i, column := range n.Columns {
if i != 0 {
ctx.WritePlain(",")
}
if err := column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore LoadDataStmt.Columns")
}
}
ctx.WritePlain(")")
}
return nil
}
// Accept implements Node Accept interface.
......@@ -1151,12 +1180,52 @@ type FieldsClause struct {
Escaped byte
}
// Restore for FieldsClause
func (n *FieldsClause) Restore(ctx *RestoreCtx) error {
if n.Terminated != "\t" || n.Escaped != '\\' {
ctx.WriteKeyWord(" FIELDS")
if n.Terminated != "\t" {
ctx.WriteKeyWord(" TERMINATED BY ")
ctx.WriteString(n.Terminated)
}
if n.Enclosed != 0 {
ctx.WriteKeyWord(" ENCLOSED BY ")
ctx.WriteString(string(n.Enclosed))
}
if n.Escaped != '\\' {
ctx.WriteKeyWord(" ESCAPED BY ")
if n.Escaped == 0 {
ctx.WritePlain("''")
} else {
ctx.WriteString(string(n.Escaped))
}
}
}
return nil
}
// LinesClause represents lines references clause in load data statement.
type LinesClause struct {
Starting string
Terminated string
}
// Restore for LinesClause
func (n *LinesClause) Restore(ctx *RestoreCtx) error {
if n.Starting != "" || n.Terminated != "\n" {
ctx.WriteKeyWord(" LINES")
if n.Starting != "" {
ctx.WriteKeyWord(" STARTING BY ")
ctx.WriteString(n.Starting)
}
if n.Terminated != "\n" {
ctx.WriteKeyWord(" TERMINATED BY ")
ctx.WriteString(n.Terminated)
}
}
return nil
}
// InsertStmt is a statement to insert new rows into an existing table.
// See https://dev.mysql.com/doc/refman/5.7/en/insert.html
type InsertStmt struct {
......@@ -1515,6 +1584,7 @@ const (
ShowStatus
ShowCollation
ShowCreateTable
ShowCreateView
ShowCreateUser
ShowGrants
ShowTriggers
......@@ -1558,7 +1628,170 @@ type ShowStmt struct {
// Restore implements Node interface.
func (n *ShowStmt) Restore(ctx *RestoreCtx) error {
return errors.New("Not implemented")
restoreOptFull := func() {
if n.Full {
ctx.WriteKeyWord("FULL ")
}
}
restoreShowDatabaseNameOpt := func() {
if n.DBName != "" {
// FROM OR IN
ctx.WriteKeyWord(" IN ")
ctx.WriteName(n.DBName)
}
}
restoreGlobalScope := func() {
if n.GlobalScope {
ctx.WriteKeyWord("GLOBAL ")
} else {
ctx.WriteKeyWord("SESSION ")
}
}
restoreShowLikeOrWhereOpt := func() error {
if n.Pattern != nil && n.Pattern.Pattern != nil {
ctx.WriteKeyWord(" LIKE ")
if err := n.Pattern.Pattern.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Pattern")
}
} else if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Where")
}
}
return nil
}
restoreUserName := func() error {
if n.User.CurrentUser {
ctx.WriteKeyWord("CURRENT_USER")
} else {
ctx.WriteString(n.User.Username)
if n.User.Hostname != "" {
ctx.WritePlain("@")
ctx.WriteString(n.User.Hostname)
}
}
return nil
}
ctx.WriteKeyWord("SHOW ")
switch n.Tp {
case ShowCreateTable:
ctx.WriteKeyWord("CREATE TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
case ShowCreateView:
ctx.WriteKeyWord("CREATE VIEW ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.VIEW")
}
case ShowCreateDatabase:
ctx.WriteKeyWord("CREATE DATABASE ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.DBName)
case ShowCreateUser:
ctx.WriteKeyWord("CREATE USER ")
restoreUserName()
case ShowGrants:
ctx.WriteKeyWord("GRANTS")
if n.User != nil {
ctx.WriteKeyWord(" FOR ")
restoreUserName()
}
case ShowMasterStatus:
ctx.WriteKeyWord("MASTER STATUS")
case ShowProcessList:
restoreOptFull()
ctx.WriteKeyWord("PROCESSLIST")
case ShowStatsMeta:
ctx.WriteKeyWord("STATS_META")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsHistograms:
ctx.WriteKeyWord("STATS_HISTOGRAMS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsBuckets:
ctx.WriteKeyWord("STATS_BUCKETS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsHealthy:
ctx.WriteKeyWord("STATS_HEALTHY")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowProfiles:
ctx.WriteKeyWord("PROFILES")
case ShowPrivileges:
ctx.WriteKeyWord("PRIVILEGES")
// ShowTargetFilterable
default:
switch n.Tp {
case ShowEngines:
ctx.WriteKeyWord("ENGINES")
case ShowDatabases:
ctx.WriteKeyWord("DATABASES")
case ShowCharset:
ctx.WriteKeyWord("CHARSET")
case ShowTables:
restoreOptFull()
ctx.WriteKeyWord("TABLES")
restoreShowDatabaseNameOpt()
case ShowTableStatus:
ctx.WriteKeyWord("TABLE STATUS")
restoreShowDatabaseNameOpt()
case ShowIndex:
// here can be INDEX INDEXES KEYS
// FROM or IN
ctx.WriteKeyWord("INDEX IN ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while resotre ShowStmt.Table")
} // TODO: remember to check this case
case ShowColumns: // equivalent to SHOW FIELDS
restoreOptFull()
ctx.WriteKeyWord("COLUMNS")
if n.Table != nil {
// FROM or IN
ctx.WriteKeyWord(" IN ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while resotre ShowStmt.Table")
}
}
restoreShowDatabaseNameOpt()
case ShowWarnings:
ctx.WriteKeyWord("WARNINGS")
case ShowErrors:
ctx.WriteKeyWord("ERRORS")
case ShowVariables:
restoreGlobalScope()
ctx.WriteKeyWord("VARIABLES")
case ShowStatus:
restoreGlobalScope()
ctx.WriteKeyWord("STATUS")
case ShowCollation:
ctx.WriteKeyWord("COLLATION")
case ShowTriggers:
ctx.WriteKeyWord("TRIGGERS")
restoreShowDatabaseNameOpt()
case ShowProcedureStatus:
ctx.WriteKeyWord("PROCEDURE STATUS")
case ShowEvents:
ctx.WriteKeyWord("EVENTS")
restoreShowDatabaseNameOpt()
case ShowPlugins:
ctx.WriteKeyWord("PLUGINS")
default:
return errors.New("Unknown ShowStmt type")
}
restoreShowLikeOrWhereOpt()
}
return nil
}
// Accept implements Node Accept interface.
......
......@@ -5915,7 +5915,7 @@ ShowStmt:
{
stmt := $2.(*ast.ShowStmt)
if $3 != nil {
if x, ok := $3.(*ast.PatternLikeExpr); ok {
if x, ok := $3.(*ast.PatternLikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = $3.(ast.ExprNode)
......@@ -5930,6 +5930,13 @@ ShowStmt:
Table: $4.(*ast.TableName),
}
}
| "SHOW" "CREATE" "VIEW" TableName
{
$$ = &ast.ShowStmt{
Tp: ast.ShowCreateView,
Table: $4.(*ast.TableName),
}
}
| "SHOW" "CREATE" "DATABASE" IfNotExists DBName
{
$$ = &ast.ShowStmt{
......@@ -5978,7 +5985,7 @@ ShowStmt:
Tp: ast.ShowStatsMeta,
}
if $3 != nil {
if x, ok := $3.(*ast.PatternLikeExpr); ok {
if x, ok := $3.(*ast.PatternLikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = $3.(ast.ExprNode)
......@@ -5992,7 +5999,7 @@ ShowStmt:
Tp: ast.ShowStatsHistograms,
}
if $3 != nil {
if x, ok := $3.(*ast.PatternLikeExpr); ok {
if x, ok := $3.(*ast.PatternLikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = $3.(ast.ExprNode)
......@@ -6006,7 +6013,7 @@ ShowStmt:
Tp: ast.ShowStatsBuckets,
}
if $3 != nil {
if x, ok := $3.(*ast.PatternLikeExpr); ok {
if x, ok := $3.(*ast.PatternLikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = $3.(ast.ExprNode)
......@@ -6020,7 +6027,7 @@ ShowStmt:
Tp: ast.ShowStatsHealthy,
}
if $3 != nil {
if x, ok := $3.(*ast.PatternLikeExpr); ok {
if x, ok := $3.(*ast.PatternLikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = $3.(ast.ExprNode)
......
......@@ -1618,75 +1618,6 @@ func (d *Datum) convergeType(hasUint, hasDecimal, hasFloat *bool) (x Datum) {
return x
}
// CoerceDatum changes type.
// If a or b is Float, changes the both to Float.
// Else if a or b is Decimal, changes the both to Decimal.
// Else if a or b is Uint and op is not div, mod, or intDiv changes the both to Uint.
func CoerceDatum(sc *stmtctx.StatementContext, a, b Datum) (x, y Datum, err error) {
if a.IsNull() || b.IsNull() {
return x, y, nil
}
var hasUint, hasDecimal, hasFloat bool
x = a.convergeType(&hasUint, &hasDecimal, &hasFloat)
y = b.convergeType(&hasUint, &hasDecimal, &hasFloat)
if hasFloat {
switch x.Kind() {
case KindInt64:
x.SetFloat64(float64(x.GetInt64()))
case KindUint64:
x.SetFloat64(float64(x.GetUint64()))
case KindMysqlEnum:
x.SetFloat64(x.GetMysqlEnum().ToNumber())
case KindMysqlSet:
x.SetFloat64(x.GetMysqlSet().ToNumber())
case KindMysqlDecimal:
var fval float64
fval, err = x.ToFloat64(sc)
if err != nil {
return x, y, errors.Trace(err)
}
x.SetFloat64(fval)
}
switch y.Kind() {
case KindInt64:
y.SetFloat64(float64(y.GetInt64()))
case KindUint64:
y.SetFloat64(float64(y.GetUint64()))
case KindBinaryLiteral, KindMysqlBit:
var fval uint64
fval, err = y.GetBinaryLiteral().ToInt(sc)
if err != nil {
return x, y, errors.Trace(err)
}
y.SetFloat64(float64(fval))
case KindMysqlEnum:
y.SetFloat64(y.GetMysqlEnum().ToNumber())
case KindMysqlSet:
y.SetFloat64(y.GetMysqlSet().ToNumber())
case KindMysqlDecimal:
var fval float64
fval, err = y.ToFloat64(sc)
if err != nil {
return x, y, errors.Trace(err)
}
y.SetFloat64(fval)
}
} else if hasDecimal {
var dec *MyDecimal
dec, err = ConvertDatumToDecimal(sc, x)
if err != nil {
return x, y, errors.Trace(err)
}
x.SetMysqlDecimal(dec)
dec, err = ConvertDatumToDecimal(sc, y)
if err != nil {
return x, y, errors.Trace(err)
}
y.SetMysqlDecimal(dec)
}
return
}
// NewDatum creates a new Datum from an interface{}.
func NewDatum(in interface{}) (d Datum) {
switch x := in.(type) {
......
......@@ -111,106 +111,106 @@
"revisionTime": "2018-10-24T15:10:47Z"
},
{
"checksumSHA1": "NgMgQFss1kjQUJOhcK/zXD8q8x8=",
"checksumSHA1": "g4MBFiIkIQ8l4DWYGu60F8jPamQ=",
"path": "github.com/pingcap/parser",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "byPUPTMBKNbYNrDqojD61S3642s=",
"checksumSHA1": "n+s4Mdz2iK2Bm5LtsGr1vE6KE6A=",
"path": "github.com/pingcap/parser/ast",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "skWGV4FNvD3vr+5olepaPPnylUw=",
"path": "github.com/pingcap/parser/auth",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "t4UHo966WzU9Z0IJkyGHRp0loOk=",
"path": "github.com/pingcap/parser/charset",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "ohLJW2u9NJEzYIJL/AjOqcuKfMY=",
"path": "github.com/pingcap/parser/format",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "ZADwr2/PcEd9VI3XF9OvN4HkJ+8=",
"path": "github.com/pingcap/parser/model",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "0YvCqsNHKFZEA7vfi3Fq+eYkjW4=",
"path": "github.com/pingcap/parser/mysql",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "olapD16WCMBU9vrA5PtlERGFfXw=",
"path": "github.com/pingcap/parser/opcode",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "TF2rMYy9ewgZpFsJb+jaGXXqZqc=",
"path": "github.com/pingcap/parser/terror",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "sCYsaxxXBau10NOc5tuYQEtmAu0=",
"path": "github.com/pingcap/parser/types",
"revision": "c02a7ccd3d6bbed56fdd3a6be6f141cb2a32bbc4",
"revisionTime": "2019-01-17T10:47:31Z"
"revision": "05caf0a5ea61e774cd7c6694aa774b05d182bade",
"revisionTime": "2019-01-20T15:33:11Z"
},
{
"checksumSHA1": "uOrWw9c47zwN6COxonFJ0t2IMcM=",
"path": "github.com/pingcap/tidb/sessionctx/stmtctx",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "SxNV0h7Hb44wjJFvFmQ8daMSHyI=",
"checksumSHA1": "kENit8Wf5S1qoj0HVt2GIgH1khI=",
"path": "github.com/pingcap/tidb/types",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "7PiTQPW4ftgZIg8KBGCHZjdc0hE=",
"path": "github.com/pingcap/tidb/types/json",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "yKeU1hJFc7X3afXESYV0Wz5ZPXQ=",
"path": "github.com/pingcap/tidb/types/parser_driver",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "OOig47D9TSVOUAYkNj2yJok1Hmo=",
"path": "github.com/pingcap/tidb/util/execdetails",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "nUC7zVoAMNR2a+z2iGqHoN2AkFE=",
"path": "github.com/pingcap/tidb/util/hack",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "xSyepiuqsoaaeDch7cXeumvVHKM=",
"path": "github.com/pingcap/tidb/util/memory",
"revision": "5f8265a8f9bebc6d61c18d1e7c0aabb493ef2c41",
"revisionTime": "2019-01-17T12:13:24Z"
"revision": "818ec911c5abb2eeaabb1d094cf0eadc9ecc0b70",
"revisionTime": "2019-01-20T14:44:10Z"
},
{
"checksumSHA1": "SmYeIK/fIYXNu8IKxD6HOVQVTuU=",
......@@ -407,62 +407,62 @@
{
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "F5pcGq+2W1FHEjgktTdKOE6W8mk=",
"path": "vitess.io/vitess/go/sqltypes",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "vAIRxI6MHsq3x1hLQwIyw5AvqtI=",
"path": "vitess.io/vitess/go/vt/log",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "HHIcl3lpWkzLARkkNv94fVaObjo=",
"checksumSHA1": "quYYG+uo3v5HIKvG4QQtRhLC0HY=",
"path": "vitess.io/vitess/go/vt/proto/query",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "YLWTmL+rvz0htn0niRMrIUI6rKc=",
"path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "tNNlcSFFnlOauS2hXnrz/zA/wfk=",
"path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "qz32abYdmm9NfKTc++K0l1EvXXM=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "3yiiEdMrUONYMNI84Bs/KONvW94=",
"path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
},
{
"checksumSHA1": "Jx+gOh/kiBDSZxEIWHyYn9brjdo=",
"path": "vitess.io/vitess/go/vt/vterrors",
"revision": "19480ef5cc643591c67ff766755a4634a32be763",
"revisionTime": "2019-01-17T03:25:54Z"
"revision": "dbef792951a40d6ac55f4d58fe50c7ce8e4fc665",
"revisionTime": "2019-01-19T07:50:08Z"
}
],
"rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册