diff --git a/models/issues/issue.go b/models/issues/issue.go index 856e9da9807..7679c222633 100644 --- a/models/issues/issue.go +++ b/models/issues/issue.go @@ -55,7 +55,7 @@ var ErrIssueAlreadyChanged = util.NewInvalidArgumentErrorf("the issue is already // Issue represents an issue or pull request of repository. type Issue struct { ID int64 `xorm:"pk autoincr"` - RepoID int64 `xorm:"INDEX UNIQUE(repo_index)"` + RepoID int64 `xorm:"INDEX(repo_closed_pull) UNIQUE(repo_index)"` Repo *repo_model.Repository `xorm:"-"` Index int64 `xorm:"UNIQUE(repo_index)"` // Index in one repository. PosterID int64 `xorm:"INDEX"` @@ -77,9 +77,9 @@ type Issue struct { AssigneeID int64 `xorm:"-"` Assignee *user_model.User `xorm:"-"` isAssigneeLoaded bool `xorm:"-"` - IsClosed bool `xorm:"INDEX"` + IsClosed bool `xorm:"INDEX(repo_closed_pull)"` IsRead bool `xorm:"-"` - IsPull bool `xorm:"INDEX"` // Indicates whether is a pull request or not. + IsPull bool `xorm:"INDEX(repo_closed_pull)"` // Indicates whether is a pull request or not. PullRequest *PullRequest `xorm:"-"` NumComments int diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go index cdd5cb54eeb..c7804e68be5 100644 --- a/models/issues/pull_list.go +++ b/models/issues/pull_list.go @@ -335,8 +335,8 @@ func (prs PullRequestList) LoadReviews(ctx context.Context) (ReviewList, error) "reviewer_team_id": 0, }). GroupBy("issue_id, reviewer_id") - // Get latest review of each reviewer, sorted in order they were made - if err := db.GetEngine(ctx).In("id", subQuery).OrderBy("review.updated_unix ASC").Find(&reviews); err != nil { + // Get latest review of each reviewer, sorted in order they were made. Joined because MySQL scans all reviews for "id IN (subquery)", xorm aliases the subquery "review". + if err := db.GetEngine(ctx).Table("review").Alias("latest").Join("INNER", subQuery, "latest.id = review.id").OrderBy("latest.updated_unix ASC").Find(&reviews); err != nil { return nil, err } @@ -350,7 +350,7 @@ func (prs PullRequestList) LoadReviews(ctx context.Context) (ReviewList, error) "reviewer_team_id": 0, }). GroupBy("issue_id, reviewer_team_id") - if err := db.GetEngine(ctx).In("id", subQueryTeam).OrderBy("review.updated_unix ASC").Find(&teamReviewRequests); err != nil { + if err := db.GetEngine(ctx).Table("review").Alias("latest").Join("INNER", subQueryTeam, "latest.id = review.id").OrderBy("latest.updated_unix ASC").Find(&teamReviewRequests); err != nil { return nil, err } diff --git a/models/organization/team_repo.go b/models/organization/team_repo.go index f41f8fbb0d6..11dc06501bd 100644 --- a/models/organization/team_repo.go +++ b/models/organization/team_repo.go @@ -13,12 +13,12 @@ import ( "xorm.io/builder" ) -// TeamRepo represents an team-repository relation. +// TeamRepo represents an org-team-repository relation. type TeamRepo struct { ID int64 `xorm:"pk autoincr"` OrgID int64 `xorm:"INDEX"` TeamID int64 `xorm:"UNIQUE(s)"` - RepoID int64 `xorm:"UNIQUE(s)"` + RepoID int64 `xorm:"UNIQUE(s) INDEX"` } // HasTeamRepo returns true if given repository belongs to team. diff --git a/models/perm/access/access.go b/models/perm/access/access.go index 6b6698fe28e..ec78846ae33 100644 --- a/models/perm/access/access.go +++ b/models/perm/access/access.go @@ -25,7 +25,7 @@ import ( type Access struct { ID int64 `xorm:"pk autoincr"` UserID int64 `xorm:"UNIQUE(s)"` - RepoID int64 `xorm:"UNIQUE(s)"` + RepoID int64 `xorm:"UNIQUE(s) INDEX"` Mode perm.AccessMode } diff --git a/models/repo/repo.go b/models/repo/repo.go index 55d7d2ed814..bafc9b5d025 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -494,10 +494,9 @@ func (repo *Repository) composeCommonMetas(ctx context.Context) map[string]strin repo.MustOwner(ctx) if repo.Owner.IsOrganization() { teams := make([]string, 0, 5) - _ = db.GetEngine(ctx).Table("team_repo"). + _ = db.GetEngine(ctx).Select("team.lower_name").Table("team_repo"). Join("INNER", "team", "team.id = team_repo.team_id"). Where("team_repo.repo_id = ?", repo.ID). - Select("team.lower_name"). OrderBy("team.lower_name"). Find(&teams) metas["teams"] = "," + strings.Join(teams, ",") + "," diff --git a/services/issue/issue.go b/services/issue/issue.go index 50e373341a5..b537eaee4e2 100644 --- a/services/issue/issue.go +++ b/services/issue/issue.go @@ -290,7 +290,6 @@ func DeleteIssuesByRepoID(ctx context.Context, repoID int64) (attachmentPaths [] issues := make([]*issues_model.Issue, 0, db.DefaultMaxInSize) if err := db.GetEngine(ctx). Where("repo_id = ?", repoID). - OrderBy("id"). Limit(db.DefaultMaxInSize). Find(&issues); err != nil { return nil, err