From 8079e9b86be3efa66cd0d93df4ece3741b6cd35c Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Mon, 14 Aug 2023 18:21:52 +0800 Subject: [PATCH 1/6] fix --- modules/indexer/issues/dboptions.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index 6a41afadd7077..39f49ebdee230 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -12,6 +12,7 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp searchOpt := &SearchOptions{ Keyword: keyword, RepoIDs: opts.RepoIDs, + ProjectID: &opts.ProjectID, AllPublic: false, IsPull: opts.IsPull, IsClosed: opts.IsClosed, From 90faea09e6f49d76e88ad5b99db3a2b8fed3f530 Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Mon, 14 Aug 2023 20:47:03 +0800 Subject: [PATCH 2/6] fix --- modules/indexer/issues/dboptions.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index 39f49ebdee230..1e82cf809dbe7 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -12,12 +12,15 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp searchOpt := &SearchOptions{ Keyword: keyword, RepoIDs: opts.RepoIDs, - ProjectID: &opts.ProjectID, AllPublic: false, IsPull: opts.IsPull, IsClosed: opts.IsClosed, } + if opts.ProjectID > 0 { + searchOpt.ProjectID = &opts.ProjectID + } + if len(opts.LabelIDs) == 1 && opts.LabelIDs[0] == 0 { searchOpt.NoLabelOnly = true } else { From 08e19fdad29fcc71840cdc11ba2c7ccf20ad77be Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Tue, 15 Aug 2023 11:55:50 +0800 Subject: [PATCH 3/6] add applyProjectCondition function --- models/issues/issue_search.go | 18 ++++++++++++------ models/issues/issue_stats.go | 5 +---- modules/indexer/issues/dboptions.go | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go index 281339044b801..f62129524298b 100644 --- a/models/issues/issue_search.go +++ b/models/issues/issue_search.go @@ -168,6 +168,17 @@ func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Sess return sess } +func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { + if opts.ProjectID > 0 { // specific project + sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). + And("project_issue.project_id=?", opts.ProjectID) + } + if opts.ProjectID == db.NoConditionID { // show those that are in no project + sess.And(builder.NotIn("issue.id", builder.Select("issue_id").From("project_issue").And(builder.Neq{"project_id": 0}))) + } + return sess +} + func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { if len(opts.RepoIDs) == 1 { opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]} @@ -226,12 +237,7 @@ func applyConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session { sess.And(builder.Lte{"issue.updated_unix": opts.UpdatedBeforeUnix}) } - if opts.ProjectID > 0 { - sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). - And("project_issue.project_id=?", opts.ProjectID) - } else if opts.ProjectID == db.NoConditionID { // show those that are in no project - sess.And(builder.NotIn("issue.id", builder.Select("issue_id").From("project_issue"))) - } + applyProjectCondition(sess, opts) if opts.ProjectBoardID != 0 { if opts.ProjectBoardID > 0 { diff --git a/models/issues/issue_stats.go b/models/issues/issue_stats.go index d86123a824d6d..6c249c2244160 100644 --- a/models/issues/issue_stats.go +++ b/models/issues/issue_stats.go @@ -133,10 +133,7 @@ func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, err applyMilestoneCondition(sess, opts) - if opts.ProjectID > 0 { - sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). - And("project_issue.project_id=?", opts.ProjectID) - } + applyProjectCondition(sess, opts) if opts.AssigneeID > 0 { applyAssigneeCondition(sess, opts.AssigneeID) diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index 1e82cf809dbe7..d0ef1c96b4487 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -17,7 +17,7 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp IsClosed: opts.IsClosed, } - if opts.ProjectID > 0 { + if opts.ProjectID != 0 { searchOpt.ProjectID = &opts.ProjectID } From c55eeeff85f3a45a28c516b4a6ae06d0a3289745 Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Tue, 15 Aug 2023 13:10:34 +0800 Subject: [PATCH 4/6] simplify searchOpt --- modules/indexer/issues/dboptions.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index d0ef1c96b4487..4ca8ffc1cd1f5 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -13,14 +13,11 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp Keyword: keyword, RepoIDs: opts.RepoIDs, AllPublic: false, + ProjectID: &opts.ProjectID, IsPull: opts.IsPull, IsClosed: opts.IsClosed, } - if opts.ProjectID != 0 { - searchOpt.ProjectID = &opts.ProjectID - } - if len(opts.LabelIDs) == 1 && opts.LabelIDs[0] == 0 { searchOpt.NoLabelOnly = true } else { From 30ec62ff00ad074bd2526d3c0f36f3b2fe33bba9 Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Tue, 15 Aug 2023 13:34:37 +0800 Subject: [PATCH 5/6] Revert "simplify searchOpt" This reverts commit c55eeeff85f3a45a28c516b4a6ae06d0a3289745. --- modules/indexer/issues/dboptions.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index 4ca8ffc1cd1f5..d0ef1c96b4487 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -13,11 +13,14 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp Keyword: keyword, RepoIDs: opts.RepoIDs, AllPublic: false, - ProjectID: &opts.ProjectID, IsPull: opts.IsPull, IsClosed: opts.IsClosed, } + if opts.ProjectID != 0 { + searchOpt.ProjectID = &opts.ProjectID + } + if len(opts.LabelIDs) == 1 && opts.LabelIDs[0] == 0 { searchOpt.NoLabelOnly = true } else { From 6d7605949bcff12c583f8a26ccdccfa25c36bed3 Mon Sep 17 00:00:00 2001 From: CaiCandong <1290147055@qq.com> Date: Tue, 15 Aug 2023 20:43:35 +0800 Subject: [PATCH 6/6] refactor applyProjectCondition --- models/issues/issue_search.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go index f62129524298b..3640351a4d467 100644 --- a/models/issues/issue_search.go +++ b/models/issues/issue_search.go @@ -172,10 +172,11 @@ func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Sessio if opts.ProjectID > 0 { // specific project sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). And("project_issue.project_id=?", opts.ProjectID) - } - if opts.ProjectID == db.NoConditionID { // show those that are in no project + } else if opts.ProjectID == db.NoConditionID { // show those that are in no project sess.And(builder.NotIn("issue.id", builder.Select("issue_id").From("project_issue").And(builder.Neq{"project_id": 0}))) } + // opts.ProjectID == 0 means all projects, + // do not need to apply any condition return sess }