fix bug when buffersize with iterate

This commit is contained in:
Lunny Xiao 2018-05-11 16:44:05 +08:00
parent a18e35f7f5
commit 5a040502f8
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 16 additions and 4 deletions

View File

@ -60,10 +60,6 @@ func (session *Session) BufferSize(size int) *Session {
} }
func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error { func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error {
if session.isAutoClose {
defer session.Close()
}
var bufferSize = session.statement.bufferSize var bufferSize = session.statement.bufferSize
var limit = session.statement.LimitN var limit = session.statement.LimitN
if limit > 0 && bufferSize > limit { if limit > 0 && bufferSize > limit {
@ -73,6 +69,11 @@ func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error {
v := rValue(bean) v := rValue(bean)
sliceType := reflect.SliceOf(v.Type()) sliceType := reflect.SliceOf(v.Type())
var idx = 0 var idx = 0
session.autoResetStatement = false
defer func() {
session.autoResetStatement = true
}()
for { for {
slice := reflect.New(sliceType) slice := reflect.New(sliceType)
if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil { if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil {

View File

@ -89,4 +89,15 @@ func TestBufferIterate(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 7, cnt) 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)
} }