diff --git a/orm/orm_queryset.go b/orm/orm_queryset.go index 87229cfb..f1aa45c8 100644 --- a/orm/orm_queryset.go +++ b/orm/orm_queryset.go @@ -192,16 +192,11 @@ func (o *querySet) All(container interface{}, cols ...string) (int64, error) { // query one row data and map to containers. // cols means the columns when querying. func (o *querySet) One(container interface{}, cols ...string) error { - if o.limit != 1 { - o.limit = 2 - } + o.limit = 1 num, err := o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ, cols) if err != nil { return err } - if num > 1 { - return ErrMultiRows - } if num == 0 { return ErrNoRows } diff --git a/orm/orm_test.go b/orm/orm_test.go index ec0f0d3a..60f4e75a 100644 --- a/orm/orm_test.go +++ b/orm/orm_test.go @@ -969,13 +969,19 @@ func TestOne(t *testing.T) { var user User qs := dORM.QueryTable("user") err := qs.One(&user) - throwFail(t, AssertIs(err, ErrMultiRows)) + throwFail(t, err) + throwFail(t, AssertIs(user.UserName, "slene")) user = User{} err = qs.OrderBy("Id").Limit(1).One(&user) throwFailNow(t, err) throwFail(t, AssertIs(user.UserName, "slene")) + user = User{} + err = qs.OrderBy("-Id").Limit(100).One(&user) + throwFailNow(t, err) + throwFail(t, AssertIs(user.UserName, "nobody")) + err = qs.Filter("user_name", "nothing").One(&user) throwFail(t, AssertIs(err, ErrNoRows))