Reviewed-on: https://gitea.com/xorm/xorm/pulls/2395
This commit is contained in:
Lunny Xiao 2024-01-15 14:06:34 +00:00
parent 15c64a9dfb
commit e8e11aaba3
2 changed files with 27 additions and 0 deletions

View File

@ -27,6 +27,12 @@ func (session *Session) Iterate(bean any, fun IterFunc) error {
defer session.Close()
}
session.autoResetStatement = false
defer func() {
session.autoResetStatement = true
session.resetStatement()
}()
if session.statement.LastError != nil {
return session.statement.LastError
}

View File

@ -111,4 +111,25 @@ func TestBufferIterate(t *testing.T) {
})
assert.NoError(t, err)
assert.EqualValues(t, 10, cnt)
// test reset statement
cnt = 0
sess := testEngine.NewSession()
defer sess.Close()
// generate: SELECT `id`, `is_man` FROM `user_buffer_iterate` WHERE (`id` <= 10) LIMIT 2 OFFSET 10 []
err = sess.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)
beans := make([]*UserBufferIterate, 0, 10)
// generate: SELECT `id`, `is_man` FROM `user_buffer_iterate` WHERE (`id` <= 10) AND (`id` >= 10) LIMIT 2 OFFSET 10 []
err = sess.Where("`id` >= 10").Limit(2).Find(&beans)
assert.NoError(t, err)
assert.Len(t, beans, 2)
}