mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-10 13:11:32 +00:00
PMM-685: let explain operate on []byte
This commit is contained in:
@@ -16,9 +16,21 @@ func New(session pmgo.SessionManager) *explain {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *explain) Explain(eq proto.ExampleQuery) ([]byte, error) {
|
func (e *explain) Explain(db string, query []byte) ([]byte, error) {
|
||||||
|
var err error
|
||||||
|
var eq proto.ExampleQuery
|
||||||
|
|
||||||
|
err = bson.UnmarshalJSON(query, &eq)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if db == "" {
|
||||||
|
db = eq.Db()
|
||||||
|
}
|
||||||
|
|
||||||
var result proto.BsonD
|
var result proto.BsonD
|
||||||
err := e.session.DB(eq.Db()).Run(eq.ExplainCmd(), &result)
|
err = e.session.DB(db).Run(eq.ExplainCmd(), &result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -138,22 +138,24 @@ func TestExplain(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("cannot load sample %s: %s", dir+file.Name(), err)
|
t.Fatalf("cannot load sample %s: %s", dir+file.Name(), err)
|
||||||
}
|
}
|
||||||
got, err := ex.Explain(eq)
|
query, err := bson.MarshalJSON(eq)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("cannot marshal json %s: %s", dir+file.Name(), err)
|
||||||
|
}
|
||||||
|
got, err := ex.Explain("", query)
|
||||||
expectErrMsg := expectError[file.Name()]
|
expectErrMsg := expectError[file.Name()]
|
||||||
gotErrMsg := fmt.Sprintf("%v", err)
|
gotErrMsg := fmt.Sprintf("%v", err)
|
||||||
if gotErrMsg != expectErrMsg {
|
if gotErrMsg != expectErrMsg {
|
||||||
t.Fatalf("explain error should be '%s' but was '%s'", expectErrMsg, gotErrMsg)
|
t.Fatalf("explain error should be '%s' but was '%s'", expectErrMsg, gotErrMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err == nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
result := proto.BsonD{}
|
result := proto.BsonD{}
|
||||||
err = bson.UnmarshalJSON(got, &result)
|
err = bson.UnmarshalJSON(got, &result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("cannot unmarshal json explain result: %s", err)
|
t.Fatalf("cannot unmarshal json explain result: %s", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user