fix bug when buffersize with iterate
This commit is contained in:
parent
a18e35f7f5
commit
5a040502f8
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue