118 lines
2.8 KiB
Go
118 lines
2.8 KiB
Go
|
package ydb
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"xorm.io/builder"
|
||
|
)
|
||
|
|
||
|
func TestIterate(t *testing.T) {
|
||
|
engine, err := enginePool.GetScriptQueryEngine()
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
type UserIterate struct {
|
||
|
Uuid int64 `xorm:"pk"`
|
||
|
IsMan bool
|
||
|
}
|
||
|
|
||
|
assert.NoError(t, engine.NewSession().DropTable(&UserIterate{}))
|
||
|
|
||
|
assert.NoError(t, engine.Sync(new(UserIterate)))
|
||
|
|
||
|
_, err = engine.Insert(&UserIterate{
|
||
|
Uuid: int64(1),
|
||
|
IsMan: true,
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
_, err = engine.Insert(&UserIterate{
|
||
|
Uuid: int64(2),
|
||
|
IsMan: false,
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
cnt := int64(0)
|
||
|
err = engine.Iterate(new(UserIterate), func(i int, bean interface{}) error {
|
||
|
user := bean.(*UserIterate)
|
||
|
if cnt == int64(0) {
|
||
|
assert.EqualValues(t, 1, user.Uuid)
|
||
|
assert.EqualValues(t, true, user.IsMan)
|
||
|
} else {
|
||
|
assert.EqualValues(t, 2, user.Uuid)
|
||
|
assert.EqualValues(t, false, user.IsMan)
|
||
|
}
|
||
|
cnt++
|
||
|
return nil
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
assert.EqualValues(t, 2, cnt)
|
||
|
}
|
||
|
|
||
|
func TestBufferIterate(t *testing.T) {
|
||
|
engine, err := enginePool.GetScriptQueryEngine()
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
type UserBufferIterate struct {
|
||
|
Uuid int64 `xorm:"pk"`
|
||
|
IsMan bool
|
||
|
}
|
||
|
|
||
|
assert.NoError(t, engine.NewSession().DropTable(&UserBufferIterate{}))
|
||
|
|
||
|
assert.NoError(t, engine.Sync(new(UserBufferIterate)))
|
||
|
|
||
|
var size = 20
|
||
|
for i := 0; i < size; i++ {
|
||
|
_, err := engine.Insert(&UserBufferIterate{
|
||
|
Uuid: int64(i + 1),
|
||
|
IsMan: true,
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
var cnt int64 = 0
|
||
|
err = engine.BufferSize(9).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
|
||
|
user := bean.(*UserBufferIterate)
|
||
|
assert.EqualValues(t, cnt+1, user.Uuid)
|
||
|
assert.EqualValues(t, true, user.IsMan)
|
||
|
cnt++
|
||
|
return nil
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
assert.EqualValues(t, size, cnt)
|
||
|
|
||
|
cnt = int64(0)
|
||
|
err = engine.Limit(20).BufferSize(9).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
|
||
|
user := bean.(*UserBufferIterate)
|
||
|
assert.EqualValues(t, cnt+1, user.Uuid)
|
||
|
assert.EqualValues(t, true, user.IsMan)
|
||
|
cnt++
|
||
|
return nil
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
assert.EqualValues(t, size, cnt)
|
||
|
|
||
|
cnt = int64(0)
|
||
|
err = engine.Limit(7).BufferSize(9).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
|
||
|
user := bean.(*UserBufferIterate)
|
||
|
assert.EqualValues(t, cnt+1, user.Uuid)
|
||
|
assert.EqualValues(t, true, user.IsMan)
|
||
|
cnt++
|
||
|
return nil
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
assert.EqualValues(t, 7, cnt)
|
||
|
|
||
|
cnt = int64(0)
|
||
|
err = engine.Where(builder.Lte{"uuid": int64(10)}).BufferSize(2).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
|
||
|
user := bean.(*UserBufferIterate)
|
||
|
assert.EqualValues(t, cnt+1, user.Uuid)
|
||
|
assert.EqualValues(t, true, user.IsMan)
|
||
|
cnt++
|
||
|
return nil
|
||
|
})
|
||
|
assert.NoError(t, err)
|
||
|
assert.EqualValues(t, 10, cnt)
|
||
|
}
|