From 3344b42b4bb59e9ef8ba58ba43764ee464fce536 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 15 Jan 2024 14:51:06 +0000 Subject: [PATCH] Fix #2393 (#2395) (#2396) Reviewed-on: https://gitea.com/xorm/xorm/pulls/2395 Reviewed-on: https://gitea.com/xorm/xorm/pulls/2396 --- iterate.go | 6 ++++++ tests/session_iterate_test.go | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/iterate.go b/iterate.go index 46b1a1f2..a7d8ccc5 100644 --- a/iterate.go +++ b/iterate.go @@ -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 } diff --git a/tests/session_iterate_test.go b/tests/session_iterate_test.go index 4d839b46..ea9ab837 100644 --- a/tests/session_iterate_test.go +++ b/tests/session_iterate_test.go @@ -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) }