mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-07 21:09:14 +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
|
||||
err := e.session.DB(eq.Db()).Run(eq.ExplainCmd(), &result)
|
||||
err = e.session.DB(db).Run(eq.ExplainCmd(), &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@@ -138,21 +138,23 @@ func TestExplain(t *testing.T) {
|
||||
if err != nil {
|
||||
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()]
|
||||
gotErrMsg := fmt.Sprintf("%v", err)
|
||||
if gotErrMsg != expectErrMsg {
|
||||
t.Fatalf("explain error should be '%s' but was '%s'", expectErrMsg, gotErrMsg)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
result := proto.BsonD{}
|
||||
err = bson.UnmarshalJSON(got, &result)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot unmarshal json explain result: %s", err)
|
||||
if err == nil {
|
||||
result := proto.BsonD{}
|
||||
err = bson.UnmarshalJSON(got, &result)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot unmarshal json explain result: %s", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user