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, 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) }