@@ -7,7 +7,6 @@ package migrations
7
7
import (
8
8
"code.gitea.io/gitea/models"
9
9
10
- "xorm.io/core"
11
10
"xorm.io/xorm"
12
11
)
13
12
@@ -43,36 +42,25 @@ func addBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
43
42
return err
44
43
}
45
44
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
+
46
53
// Find latest review of each user in each pull request, and set official field if appropriate
47
54
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 ).
53
59
Find (& reviews ); err != nil {
54
60
return err
55
61
}
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
- }
68
62
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 {
76
64
if err := review .LoadAttributes (); err != nil {
77
65
return err
78
66
}
@@ -85,8 +73,8 @@ ORDER BY review_updated_unix DESC`,
85
73
if _ , err := sess .ID (review .ID ).Cols ("official" ).Update (review ); err != nil {
86
74
return err
87
75
}
88
- usersInArray [review.IssueID ][review.ReviewerID ] = true
89
76
}
77
+
90
78
}
91
79
92
80
return sess .Commit ()
0 commit comments