Fix find and count bug #1618
|
@ -11,6 +11,7 @@ import (
|
||||||
|
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
"xorm.io/xorm/caches"
|
"xorm.io/xorm/caches"
|
||||||
|
"xorm.io/xorm/internal/statements"
|
||||||
"xorm.io/xorm/internal/utils"
|
"xorm.io/xorm/internal/utils"
|
||||||
"xorm.io/xorm/schemas"
|
"xorm.io/xorm/schemas"
|
||||||
)
|
)
|
||||||
|
@ -387,6 +388,12 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in
|
||||||
slices := reflect.New(reflect.SliceOf(t))
|
slices := reflect.New(reflect.SliceOf(t))
|
||||||
beans := slices.Interface()
|
beans := slices.Interface()
|
||||||
|
|
||||||
|
statement := session.statement
|
||||||
|
session.statement = statements.NewStatement(
|
||||||
|
session.engine.dialect,
|
||||||
|
session.engine.tagParser,
|
||||||
|
session.engine.DatabaseTZ,
|
||||||
|
)
|
||||||
if len(table.PrimaryKeys) == 1 {
|
if len(table.PrimaryKeys) == 1 {
|
||||||
ff := make([]interface{}, 0, len(ides))
|
ff := make([]interface{}, 0, len(ides))
|
||||||
for _, ie := range ides {
|
for _, ie := range ides {
|
||||||
|
@ -409,6 +416,8 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session.statement = statement
|
||||||
|
|
||||||
vs := reflect.Indirect(reflect.ValueOf(beans))
|
vs := reflect.Indirect(reflect.ValueOf(beans))
|
||||||
for i := 0; i < vs.Len(); i++ {
|
for i := 0; i < vs.Len(); i++ {
|
||||||
rv := vs.Index(i)
|
rv := vs.Index(i)
|
||||||
|
|
|
@ -493,6 +493,12 @@ func TestFindAndCountOneFunc(t *testing.T) {
|
||||||
assert.EqualValues(t, 2, cnt)
|
assert.EqualValues(t, 2, cnt)
|
||||||
|
|
||||||
var results = make([]FindAndCountStruct, 0, 2)
|
var results = make([]FindAndCountStruct, 0, 2)
|
||||||
|
cnt, err = testEngine.Limit(1).FindAndCount(&results)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, len(results))
|
||||||
|
assert.EqualValues(t, 2, cnt)
|
||||||
|
|
||||||
|
results = make([]FindAndCountStruct, 0, 2)
|
||||||
cnt, err = testEngine.FindAndCount(&results)
|
cnt, err = testEngine.FindAndCount(&results)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 2, len(results))
|
assert.EqualValues(t, 2, len(results))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user