diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go index 3640351a4d..5d40b44704 100644 --- a/models/issues/issue_search.go +++ b/models/issues/issue_search.go @@ -358,12 +358,21 @@ func applyMentionedCondition(sess *xorm.Session, mentionedID int64) *xorm.Sessio } func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64) *xorm.Session { - return sess.Join("INNER", []string{"review", "r"}, "issue.id = r.issue_id"). - And("issue.poster_id <> ?", reviewRequestedID). - And("r.type = ?", ReviewTypeRequest). - And("r.reviewer_id = ? and r.id in (select max(id) from review where issue_id = r.issue_id and reviewer_id = r.reviewer_id and type in (?, ?, ?))"+ - " or r.reviewer_team_id in (select team_id from team_user where uid = ?)", - reviewRequestedID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest, reviewRequestedID) + existInTeamQuery := builder.Select("team_user.team_id"). + From("team_user"). + Where(builder.Eq{"team_user.uid": reviewRequestedID}) + + subQuery := builder.Select("review.issue_id"). + From("review"). + Where(builder.And( + builder.In("review.type", []ReviewType{ReviewTypeRequest, ReviewTypeReject, ReviewTypeApprove}), + builder.Or( + builder.Eq{"review.reviewer_id": reviewRequestedID}, + builder.In("review.reviewer_team_id", existInTeamQuery), + ), + )) + return sess.Where("issue.poster_id <> ?", reviewRequestedID). + And(builder.In("issue.id", subQuery)) } func applyReviewedCondition(sess *xorm.Session, reviewedID int64) *xorm.Session {