From 5a040502f80a115d8b903aade365b37559582ffd Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 11 May 2018 16:44:05 +0800 Subject: [PATCH] fix bug when buffersize with iterate --- session_iterate.go | 9 +++++---- session_iterate_test.go | 11 +++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/session_iterate.go b/session_iterate.go index ca996c28..1e484d85 100644 --- a/session_iterate.go +++ b/session_iterate.go @@ -60,10 +60,6 @@ func (session *Session) BufferSize(size int) *Session { } func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error { - if session.isAutoClose { - defer session.Close() - } - var bufferSize = session.statement.bufferSize var limit = session.statement.LimitN if limit > 0 && bufferSize > limit { @@ -73,6 +69,11 @@ func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error { v := rValue(bean) sliceType := reflect.SliceOf(v.Type()) var idx = 0 + session.autoResetStatement = false + defer func() { + session.autoResetStatement = true + }() + for { slice := reflect.New(sliceType) if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil { diff --git a/session_iterate_test.go b/session_iterate_test.go index 9a7ec25f..bb0c59c4 100644 --- a/session_iterate_test.go +++ b/session_iterate_test.go @@ -89,4 +89,15 @@ func TestBufferIterate(t *testing.T) { }) assert.NoError(t, err) assert.EqualValues(t, 7, cnt) + + cnt = 0 + err = testEngine.Where("id <= 10").BufferSize(2).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error { + user := bean.(*UserBufferIterate) + assert.EqualValues(t, cnt+1, user.Id) + assert.EqualValues(t, true, user.IsMan) + cnt++ + return nil + }) + assert.NoError(t, err) + assert.EqualValues(t, 10, cnt) }