Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

Commit 9c4cbad

Browse files
committed
fix bug when buffersize with iterate
1 parent ab17aa2 commit 9c4cbad

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

session_iterate.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ func (session *Session) BufferSize(size int) *Session {
5656
}
5757

5858
func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error {
59-
if session.isAutoClose {
60-
defer session.Close()
61-
}
62-
6359
var bufferSize = session.statement.bufferSize
6460
var limit = session.statement.LimitN
6561
if limit > 0 && bufferSize > limit {
@@ -69,6 +65,11 @@ func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error {
6965
v := rValue(bean)
7066
sliceType := reflect.SliceOf(v.Type())
7167
var idx = 0
68+
session.autoResetStatement = false
69+
defer func() {
70+
session.autoResetStatement = true
71+
}()
72+
7273
for {
7374
slice := reflect.New(sliceType)
7475
if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil {

session_iterate_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,15 @@ func TestBufferIterate(t *testing.T) {
8989
})
9090
assert.NoError(t, err)
9191
assert.EqualValues(t, 7, cnt)
92+
93+
cnt = 0
94+
err = testEngine.Where("id <= 10").BufferSize(2).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
95+
user := bean.(*UserBufferIterate)
96+
assert.EqualValues(t, cnt+1, user.Id)
97+
assert.EqualValues(t, true, user.IsMan)
98+
cnt++
99+
return nil
100+
})
101+
assert.NoError(t, err)
102+
assert.EqualValues(t, 10, cnt)
92103
}

0 commit comments

Comments
 (0)