From 3bddd228e71f9a80bc9377141facc6c3497ebb68 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 23 Mar 2020 14:38:01 +0000 Subject: [PATCH] Fix find and count bug (#1618) Fix find and count bug Reviewed-on: https://gitea.com/xorm/xorm/pulls/1618 --- session_find.go | 9 +++++++++ session_find_test.go | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/session_find.go b/session_find.go index 960c1085..45811cd7 100644 --- a/session_find.go +++ b/session_find.go @@ -11,6 +11,7 @@ import ( "xorm.io/builder" "xorm.io/xorm/caches" + "xorm.io/xorm/internal/statements" "xorm.io/xorm/internal/utils" "xorm.io/xorm/schemas" ) @@ -387,6 +388,12 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in slices := reflect.New(reflect.SliceOf(t)) beans := slices.Interface() + statement := session.statement + session.statement = statements.NewStatement( + session.engine.dialect, + session.engine.tagParser, + session.engine.DatabaseTZ, + ) if len(table.PrimaryKeys) == 1 { ff := make([]interface{}, 0, len(ides)) for _, ie := range ides { @@ -409,6 +416,8 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in return err } + session.statement = statement + vs := reflect.Indirect(reflect.ValueOf(beans)) for i := 0; i < vs.Len(); i++ { rv := vs.Index(i) diff --git a/session_find_test.go b/session_find_test.go index c16d0a1b..70ed988c 100644 --- a/session_find_test.go +++ b/session_find_test.go @@ -493,6 +493,12 @@ func TestFindAndCountOneFunc(t *testing.T) { assert.EqualValues(t, 2, cnt) var results = make([]FindAndCountStruct, 0, 2) + cnt, err = testEngine.Limit(1).FindAndCount(&results) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(results)) + assert.EqualValues(t, 2, cnt) + + results = make([]FindAndCountStruct, 0, 2) cnt, err = testEngine.FindAndCount(&results) assert.NoError(t, err) assert.EqualValues(t, 2, len(results))