Skip to content

Commit 8afcf90

Browse files
migration
1 parent 148e1d6 commit 8afcf90

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

models/migrations/v110.go

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package migrations
77
import (
88
"code.gitea.io/gitea/models"
99

10-
"xorm.io/core"
1110
"xorm.io/xorm"
1211
)
1312

@@ -43,36 +42,25 @@ func addBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
4342
return err
4443
}
4544

45+
var pageSize int64 = 20
46+
totallPRs, err := x.Count(new(models.PullRequest))
47+
if err != nil {
48+
return err
49+
}
50+
var totalPages int64
51+
totalPages = totallPRs / pageSize
52+
4653
// Find latest review of each user in each pull request, and set official field if appropriate
4754
reviews := []*models.Review{}
48-
if x.Dialect().DBType() == core.MSSQL {
49-
if err := x.SQL(`SELECT *, max(review.updated_unix) as review_updated_unix FROM review WHERE (review.type = ? OR review.type = ?)
50-
GROUP BY review.id, review.issue_id, review.reviewer_id, review.type, ) as review
51-
ORDER BY review_updated_unix DESC`,
52-
models.ReviewTypeApprove, models.ReviewTypeReject).
55+
var page int64
56+
for page = 0; page <= totalPages; page++ {
57+
if err := sess.Sql("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id > ? AND issue_id <= ? AND type in (?, ?) GROUP BY issue_id, reviewer_id)",
58+
page*pageSize, (page+1)*pageSize, models.ReviewTypeApprove, models.ReviewTypeReject).
5359
Find(&reviews); err != nil {
5460
return err
5561
}
56-
} else {
57-
if err := x.Select("review.*, max(review.updated_unix) as review_updated_unix").
58-
Table("review").
59-
Join("INNER", "`user`", "review.reviewer_id = `user`.id").
60-
Where("(review.type = ? OR review.type = ?)",
61-
models.ReviewTypeApprove, models.ReviewTypeReject).
62-
GroupBy("review.issue_id, review.reviewer_id, review.type").
63-
OrderBy("review_updated_unix DESC").
64-
Find(&reviews); err != nil {
65-
return err
66-
}
67-
}
6862

69-
// We need to group our results by user id _and_ review type, otherwise the query fails when using postgresql.
70-
usersInArray := make(map[int64]map[int64]bool)
71-
for _, review := range reviews {
72-
if usersInArray[review.IssueID] == nil {
73-
usersInArray[review.IssueID] = make(map[int64]bool)
74-
}
75-
if !usersInArray[review.IssueID][review.ReviewerID] {
63+
for _, review := range reviews {
7664
if err := review.LoadAttributes(); err != nil {
7765
return err
7866
}
@@ -85,8 +73,8 @@ ORDER BY review_updated_unix DESC`,
8573
if _, err := sess.ID(review.ID).Cols("official").Update(review); err != nil {
8674
return err
8775
}
88-
usersInArray[review.IssueID][review.ReviewerID] = true
8976
}
77+
9078
}
9179

9280
return sess.Commit()

0 commit comments

Comments
 (0)