From d3aa4971c7beadc6c573464ef4359775d2844dab Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Wed, 27 Jan 2021 06:47:42 +0800
Subject: [PATCH] Fix bug because of duplicated join (#14454)

* Fix bug because of duplicated join

* Move join into setupsession

* Fix bug

* Fix bug

Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: Lauris BH <lauris@nix.lv>
---
 models/issue.go | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/models/issue.go b/models/issue.go
index 1374f82fbd..a7392633af 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1210,7 +1210,7 @@ func (opts *IssuesOptions) setupSession(sess *xorm.Session) {
 	}
 
 	if opts.IsArchived != util.OptionalBoolNone {
-		sess.Join("INNER", "repository", "issue.repo_id = repository.id").And(builder.Eq{"repository.is_archived": opts.IsArchived.IsTrue()})
+		sess.And(builder.Eq{"repository.is_archived": opts.IsArchived.IsTrue()})
 	}
 
 	if opts.LabelIDs != nil {
@@ -1266,6 +1266,8 @@ func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) {
 	sess := x.NewSession()
 	defer sess.Close()
 
+	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
+
 	opts.setupSession(sess)
 
 	countsSlice := make([]*struct {
@@ -1292,11 +1294,12 @@ func GetRepoIDsForIssuesOptions(opts *IssuesOptions, user *User) ([]int64, error
 	sess := x.NewSession()
 	defer sess.Close()
 
+	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
+
 	opts.setupSession(sess)
 
 	accessCond := accessibleRepositoryCondition(user)
 	if err := sess.Where(accessCond).
-		Join("INNER", "repository", "`issue`.repo_id = `repository`.id").
 		Distinct("issue.repo_id").
 		Table("issue").
 		Find(&repoIDs); err != nil {
@@ -1311,6 +1314,7 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
 	sess := x.NewSession()
 	defer sess.Close()
 
+	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
 	opts.setupSession(sess)
 	sortIssuesSession(sess, opts.SortType, opts.PriorityRepoID)
 
@@ -1338,6 +1342,7 @@ func CountIssues(opts *IssuesOptions) (int64, error) {
 	}, 0, 1)
 
 	sess.Select("COUNT(issue.id) AS count").Table("issue")
+	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
 	opts.setupSession(sess)
 	if err := sess.Find(&countsSlice); err != nil {
 		return 0, fmt.Errorf("Find: %v", err)