parent
a901ab8593
commit
83fdc38834
|
@ -27,6 +27,12 @@ func (session *Session) Iterate(bean interface{}, fun IterFunc) error {
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session.autoResetStatement = false
|
||||||
|
defer func() {
|
||||||
|
session.autoResetStatement = true
|
||||||
|
session.resetStatement()
|
||||||
|
}()
|
||||||
|
|
||||||
if session.statement.LastError != nil {
|
if session.statement.LastError != nil {
|
||||||
return session.statement.LastError
|
return session.statement.LastError
|
||||||
}
|
}
|
||||||
|
@ -64,15 +70,15 @@ 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 {
|
||||||
var bufferSize = session.statement.BufferSize
|
bufferSize := session.statement.BufferSize
|
||||||
var pLimitN = session.statement.LimitN
|
pLimitN := session.statement.LimitN
|
||||||
if pLimitN != nil && bufferSize > *pLimitN {
|
if pLimitN != nil && bufferSize > *pLimitN {
|
||||||
bufferSize = *pLimitN
|
bufferSize = *pLimitN
|
||||||
}
|
}
|
||||||
var start = session.statement.Start
|
start := session.statement.Start
|
||||||
v := utils.ReflectValue(bean)
|
v := utils.ReflectValue(bean)
|
||||||
sliceType := reflect.SliceOf(v.Type())
|
sliceType := reflect.SliceOf(v.Type())
|
||||||
var idx = 0
|
idx := 0
|
||||||
session.autoResetStatement = false
|
session.autoResetStatement = false
|
||||||
defer func() {
|
defer func() {
|
||||||
session.autoResetStatement = true
|
session.autoResetStatement = true
|
||||||
|
|
|
@ -111,4 +111,25 @@ func TestBufferIterate(t *testing.T) {
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 10, cnt)
|
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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue