diff options
author | Lunny Xiao | 2023-02-24 21:17:09 +0800 |
---|---|---|
committer | GitHub | 2023-02-24 21:17:09 +0800 |
commit | a8c4f8cebcc52a1c96fe481fc654598c4ef49fec (patch) | |
tree | 1ed7291f1043036996e3188881a9900ab7275653 /models | |
parent | 91fa0eb9d7b8c1bb5afac9d68161cf95ae0a02f8 (diff) |
Fix db.Find bug (#23115)
Caused by #20821
Fix #23110
Diffstat (limited to 'models')
-rw-r--r-- | models/db/list.go (renamed from models/db/list_options.go) | 4 | ||||
-rw-r--r-- | models/db/list_test.go | 48 |
2 files changed, 50 insertions, 2 deletions
diff --git a/models/db/list_options.go b/models/db/list.go index 2456f90f3..9fb4d0741 100644 --- a/models/db/list_options.go +++ b/models/db/list.go @@ -134,7 +134,7 @@ func Find[T any](ctx context.Context, opts FindOptions, objects *[]T) error { if !opts.IsListAll() { sess.Limit(opts.GetSkipTake()) } - return sess.Find(&objects) + return sess.Find(objects) } // Count represents a common count function which accept an options interface @@ -148,5 +148,5 @@ func FindAndCount[T any](ctx context.Context, opts FindOptions, objects *[]T) (i if !opts.IsListAll() { sess.Limit(opts.GetSkipTake()) } - return sess.FindAndCount(&objects) + return sess.FindAndCount(objects) } diff --git a/models/db/list_test.go b/models/db/list_test.go new file mode 100644 index 000000000..ffef1e494 --- /dev/null +++ b/models/db/list_test.go @@ -0,0 +1,48 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package db_test + +import ( + "testing" + + "code.gitea.io/gitea/models/db" + repo_model "code.gitea.io/gitea/models/repo" + "code.gitea.io/gitea/models/unittest" + + "github.com/stretchr/testify/assert" + "xorm.io/builder" +) + +type mockListOptions struct { + db.ListOptions +} + +func (opts *mockListOptions) IsListAll() bool { + return true +} + +func (opts *mockListOptions) ToConds() builder.Cond { + return builder.NewCond() +} + +func TestFind(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + xe := unittest.GetXORMEngine() + assert.NoError(t, xe.Sync(&repo_model.RepoUnit{})) + + opts := mockListOptions{} + var repoUnits []repo_model.RepoUnit + err := db.Find(db.DefaultContext, &opts, &repoUnits) + assert.NoError(t, err) + assert.EqualValues(t, 83, len(repoUnits)) + + cnt, err := db.Count(db.DefaultContext, &opts, new(repo_model.RepoUnit)) + assert.NoError(t, err) + assert.EqualValues(t, 83, cnt) + + repoUnits = make([]repo_model.RepoUnit, 0, 10) + newCnt, err := db.FindAndCount(db.DefaultContext, &opts, &repoUnits) + assert.NoError(t, err) + assert.EqualValues(t, cnt, newCnt) +} |