PMM-685: let explain operate on []byte

This commit is contained in:
Kamil Dziedzic
2017-08-31 17:14:21 +02:00
parent 5393a2b001
commit 05558d8406
2 changed files with 25 additions and 11 deletions

View File

@@ -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
}

View File

@@ -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)
}
}
})
}