diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2022-10-25 20:47:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-25 14:47:46 +0200 |
commit | 5e8e3ecbeb71ea924ed9662251af2897285b8220 (patch) | |
tree | 7e75b1d76fc496c117ee2e8f6712804822320e64 /models/repo/repo.go | |
parent | 29c00eb1ed13fbcd2a5e493d075c2bbd0e2a26f7 (diff) | |
download | gitea-5e8e3ecbeb71ea924ed9662251af2897285b8220.tar.gz gitea-5e8e3ecbeb71ea924ed9662251af2897285b8220.zip |
Fix issues count bug (#21557)
fix #19349 , #19505
Co-authored-by: delvh <dev.lh@web.de>
Diffstat (limited to 'models/repo/repo.go')
-rw-r--r-- | models/repo/repo.go | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/models/repo/repo.go b/models/repo/repo.go index 848138c824..77e0367a5a 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -765,35 +765,30 @@ func CountRepositories(ctx context.Context, opts CountRepositoryOptions) (int64, return count, nil } -// StatsCorrectNumClosed update repository's issue related numbers -func StatsCorrectNumClosed(ctx context.Context, id int64, isPull bool, field string) error { - _, err := db.Exec(ctx, "UPDATE `repository` SET "+field+"=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=? AND is_pull=?) WHERE id=?", id, true, isPull, id) - return err -} - -// UpdateRepoIssueNumbers update repository issue numbers +// UpdateRepoIssueNumbers updates one of a repositories amount of (open|closed) (issues|PRs) with the current count func UpdateRepoIssueNumbers(ctx context.Context, repoID int64, isPull, isClosed bool) error { - e := db.GetEngine(ctx) + field := "num_" + if isClosed { + field += "closed_" + } if isPull { - if _, err := e.ID(repoID).Decr("num_pulls").Update(new(Repository)); err != nil { - return err - } - if isClosed { - if _, err := e.ID(repoID).Decr("num_closed_pulls").Update(new(Repository)); err != nil { - return err - } - } + field += "pulls" } else { - if _, err := e.ID(repoID).Decr("num_issues").Update(new(Repository)); err != nil { - return err - } - if isClosed { - if _, err := e.ID(repoID).Decr("num_closed_issues").Update(new(Repository)); err != nil { - return err - } - } + field += "issues" } - return nil + + subQuery := builder.Select("count(*)"). + From("issue").Where(builder.Eq{ + "repo_id": repoID, + "is_pull": isPull, + }.And(builder.If(isClosed, builder.Eq{"is_closed": isClosed}))) + + // builder.Update(cond) will generate SQL like UPDATE ... SET cond + query := builder.Update(builder.Eq{field: subQuery}). + From("repository"). + Where(builder.Eq{"id": repoID}) + _, err := db.Exec(ctx, query) + return err } // CountNullArchivedRepository counts the number of repositories with is_archived is null |