func (r *result) buildQuery(col db.Collection) (db.Result, error) { var res db.Result if r.args.where == nil { res = col.Find(db.Cond{}) } else { res = col.Find((*r.args.where)...) } if r.args.limit != nil { res = res.Limit(*r.args.limit) } if r.args.skip != nil { res = res.Skip(*r.args.skip) } if r.args.sort != nil { res = res.Sort((*r.args.sort)...) } if r.args.fields != nil { res = res.Select((*r.args.fields)...) } if r.args.group != nil { res = res.Group((*r.args.group)...) } return res, nil }
func TestExplicitAndDefaultMapping(t *testing.T) { var err error var col db.Collection var sess db.Database var res db.Result var testE mapE var testN mapN for _, wrapper := range wrappers { if settings[wrapper] == nil { t.Fatalf(`No such settings entry for wrapper %s.`, wrapper) } else { if sess, err = db.Open(wrapper, *settings[wrapper]); err != nil { t.Fatalf(`Test for wrapper %s failed: %q`, wrapper, err) } defer sess.Close() col, err = sess.Collection("Case_Test") if col, err = sess.Collection("CaSe_TesT"); err != nil { if wrapper == `mongo` && err == db.ErrCollectionDoesNotExist { // Nothing, it's expected. } else { t.Fatal(err) } } if err = col.Truncate(); err != nil { if wrapper == `mongo` { // Nothing, it's expected. } else { t.Fatal(err) } } // Testing explicit mapping. testE = mapE{ CaseTest: "Hello!", } if _, err = col.Append(testE); err != nil { t.Fatal(err) } res = col.Find(db.Cond{"Case_Test": "Hello!"}) if wrapper == `ql` { res = res.Select(`id() as ID`, `Case_Test`) } if err = res.One(&testE); err != nil { t.Fatal(err) } if wrapper == `mongo` { if testE.MongoID.Valid() == false { t.Fatalf("Expecting an ID.") } } else { if testE.ID == 0 { t.Fatalf("Expecting an ID.") } } // Testing default mapping. testN = mapN{ Casetest: "World!", } if _, err = col.Append(testN); err != nil { t.Fatal(err) } if wrapper == `mongo` { // We don't have this kind of control with mongodb. res = col.Find(db.Cond{"casetest": "World!"}) } else { res = col.Find(db.Cond{"Case_Test": "World!"}) } if wrapper == `ql` { res = res.Select(`id() as ID`, `Case_Test`) } if err = res.One(&testN); err != nil { t.Fatal(err) } if wrapper == `mongo` { if testN.MongoID.Valid() == false { t.Fatalf("Expecting an ID.") } } else { if testN.ID == 0 { t.Fatalf("Expecting an ID.") } } } } }