From 3344b42b4bb59e9ef8ba58ba43764ee464fce536 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 15 Jan 2024 14:51:06 +0000 Subject: [PATCH 1/2] 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) } From 93326c6991636e28c055c877cbe1c617a5cb1eb5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 5 Feb 2024 11:13:25 +0000 Subject: [PATCH 2/2] Fix oracle legacy (#2406) Fix #2399 Reviewed-on: https://gitea.com/xorm/xorm/pulls/2406 --- internal/statements/legacy_select.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/statements/legacy_select.go b/internal/statements/legacy_select.go index 144ad96d..c6fd86b7 100644 --- a/internal/statements/legacy_select.go +++ b/internal/statements/legacy_select.go @@ -34,6 +34,7 @@ func (statement *Statement) writeOracleLegacySelect(buf *builder.BytesWriter, co return statement.writeMultiple(buf, statement.writeSelectColumns(columnStr), statement.writeFrom, + statement.writeWhere, statement.writeOracleLimit(columnStr), statement.writeGroupBy, statement.writeHaving,