Skip to content

Commit 9d2b830

Browse files
appleboylunny
authored andcommitted
refactor: small optimize for sql query (#940)
* refactor: small optimize for sql query * fix: get owner name if Searcher is not nil or user star page.
1 parent 837d346 commit 9d2b830

File tree

3 files changed

+30
-32
lines changed

3 files changed

+30
-32
lines changed

models/repo.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,25 +1184,23 @@ func CountUserRepositories(userID int64, private bool) int64 {
11841184
}
11851185

11861186
// Repositories returns all repositories
1187-
func Repositories(opts *SearchRepoOptions) (_ []*Repository, err error) {
1187+
func Repositories(opts *SearchRepoOptions) (_ RepositoryList, err error) {
11881188
if len(opts.OrderBy) == 0 {
11891189
opts.OrderBy = "id ASC"
11901190
}
11911191

1192-
repos := make([]*Repository, 0, opts.PageSize)
1193-
return repos, x.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).OrderBy(opts.OrderBy).Find(&repos)
1194-
}
1192+
repos := make(RepositoryList, 0, opts.PageSize)
11951193

1196-
// RepositoriesWithUsers returns number of repos in given page.
1197-
func RepositoriesWithUsers(opts *SearchRepoOptions) (_ []*Repository, err error) {
1198-
repos, err := Repositories(opts)
1199-
if err != nil {
1200-
return nil, fmt.Errorf("Repositories: %v", err)
1194+
if err = x.
1195+
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
1196+
OrderBy(opts.OrderBy).
1197+
Find(&repos); err != nil {
1198+
return nil, fmt.Errorf("Repo: %v", err)
12011199
}
12021200

1203-
for i := range repos {
1204-
if err = repos[i].GetOwner(); err != nil {
1205-
return nil, err
1201+
if opts.Searcher != nil || opts.Starred {
1202+
if err = repos.loadAttributes(x); err != nil {
1203+
return nil, fmt.Errorf("LoadAttributes: %v", err)
12061204
}
12071205
}
12081206

@@ -1716,7 +1714,7 @@ func GetUserMirrorRepositories(userID int64) ([]*Repository, error) {
17161714
}
17171715

17181716
// GetRecentUpdatedRepositories returns the list of repositories that are recently updated.
1719-
func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos []*Repository, err error) {
1717+
func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList, err error) {
17201718
if len(opts.OrderBy) == 0 {
17211719
opts.OrderBy = "updated_unix DESC"
17221720
}
@@ -1739,9 +1737,19 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos []*Repository,
17391737
}
17401738
}
17411739

1742-
return repos, sess.
1740+
if err = sess.
17431741
OrderBy(opts.OrderBy).
1744-
Find(&repos)
1742+
Find(&repos); err != nil {
1743+
return nil, fmt.Errorf("Repo: %v", err)
1744+
}
1745+
1746+
if opts.Searcher != nil || opts.Starred {
1747+
if err = repos.loadAttributes(x); err != nil {
1748+
return nil, fmt.Errorf("LoadAttributes: %v", err)
1749+
}
1750+
}
1751+
1752+
return repos, nil
17451753
}
17461754

17471755
func getRepositoryCount(e Engine, u *User) (int64, error) {
@@ -1848,7 +1856,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ in
18481856
return nil, 0, fmt.Errorf("Repo: %v", err)
18491857
}
18501858

1851-
if opts.Starred {
1859+
if opts.Searcher != nil || opts.Starred {
18521860
if err = repos.loadAttributes(x); err != nil {
18531861
return nil, 0, fmt.Errorf("LoadAttributes: %v", err)
18541862
}

models/star.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) {
7171
}
7272

7373
// GetStarredRepos returns the repos the user starred.
74-
func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) (repos []*Repository, err error) {
74+
func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) (repos RepositoryList, err error) {
7575
if len(orderBy) == 0 {
7676
orderBy = "updated_unix DESC"
7777
}
@@ -95,10 +95,8 @@ func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string)
9595
return
9696
}
9797

98-
for _, repo := range repos {
99-
if err = repo.GetOwner(); err != nil {
100-
return
101-
}
98+
if err = repos.loadAttributes(x); err != nil {
99+
return
102100
}
103101

104102
return

routers/home.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ package routers
66

77
import (
88
"bytes"
9-
"fmt"
109
"strings"
1110

12-
"github.com/Unknwon/paginater"
13-
1411
"code.gitea.io/gitea/models"
1512
"code.gitea.io/gitea/modules/base"
1613
"code.gitea.io/gitea/modules/context"
1714
"code.gitea.io/gitea/modules/setting"
1815
"code.gitea.io/gitea/routers/user"
16+
17+
"github.com/Unknwon/paginater"
1918
)
2019

2120
const (
@@ -55,7 +54,7 @@ func Home(ctx *context.Context) {
5554
// RepoSearchOptions when calling search repositories
5655
type RepoSearchOptions struct {
5756
Counter func(bool) int64
58-
Ranger func(*models.SearchRepoOptions) ([]*models.Repository, error)
57+
Ranger func(*models.SearchRepoOptions) (models.RepositoryList, error)
5958
Searcher *models.User
6059
Private bool
6160
PageSize int
@@ -132,13 +131,6 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
132131
ctx.Data["Keyword"] = keyword
133132
ctx.Data["Total"] = count
134133
ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5)
135-
136-
for _, repo := range repos {
137-
if err = repo.GetOwner(); err != nil {
138-
ctx.Handle(500, "GetOwner", fmt.Errorf("%d: %v", repo.ID, err))
139-
return
140-
}
141-
}
142134
ctx.Data["Repos"] = repos
143135

144136
ctx.HTML(200, opts.TplName)

0 commit comments

Comments
 (0)