aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/issues/issue_stats.go97
1 files changed, 49 insertions, 48 deletions
diff --git a/models/issues/issue_stats.go b/models/issues/issue_stats.go
index 6c249c2244..1654e6ce75 100644
--- a/models/issues/issue_stats.go
+++ b/models/issues/issue_stats.go
@@ -116,68 +116,69 @@ func GetIssueStats(opts *IssuesOptions) (*IssueStats, error) {
func getIssueStatsChunk(opts *IssuesOptions, issueIDs []int64) (*IssueStats, error) {
stats := &IssueStats{}
- countSession := func(opts *IssuesOptions, issueIDs []int64) *xorm.Session {
- sess := db.GetEngine(db.DefaultContext).
- Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
- if len(opts.RepoIDs) > 1 {
- sess.In("issue.repo_id", opts.RepoIDs)
- } else if len(opts.RepoIDs) == 1 {
- sess.And("issue.repo_id = ?", opts.RepoIDs[0])
- }
+ sess := db.GetEngine(db.DefaultContext).
+ Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
- if len(issueIDs) > 0 {
- sess.In("issue.id", issueIDs)
- }
+ var err error
+ stats.OpenCount, err = applyIssuesOptions(sess, opts, issueIDs).
+ And("issue.is_closed = ?", false).
+ Count(new(Issue))
+ if err != nil {
+ return stats, err
+ }
+ stats.ClosedCount, err = applyIssuesOptions(sess, opts, issueIDs).
+ And("issue.is_closed = ?", true).
+ Count(new(Issue))
+ return stats, err
+}
- applyLabelsCondition(sess, opts)
+func applyIssuesOptions(sess *xorm.Session, opts *IssuesOptions, issueIDs []int64) *xorm.Session {
+ if len(opts.RepoIDs) > 1 {
+ sess.In("issue.repo_id", opts.RepoIDs)
+ } else if len(opts.RepoIDs) == 1 {
+ sess.And("issue.repo_id = ?", opts.RepoIDs[0])
+ }
- applyMilestoneCondition(sess, opts)
+ if len(issueIDs) > 0 {
+ sess.In("issue.id", issueIDs)
+ }
- applyProjectCondition(sess, opts)
+ applyLabelsCondition(sess, opts)
- if opts.AssigneeID > 0 {
- applyAssigneeCondition(sess, opts.AssigneeID)
- } else if opts.AssigneeID == db.NoConditionID {
- sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_assignees)")
- }
+ applyMilestoneCondition(sess, opts)
- if opts.PosterID > 0 {
- applyPosterCondition(sess, opts.PosterID)
- }
+ applyProjectCondition(sess, opts)
- if opts.MentionedID > 0 {
- applyMentionedCondition(sess, opts.MentionedID)
- }
+ if opts.AssigneeID > 0 {
+ applyAssigneeCondition(sess, opts.AssigneeID)
+ } else if opts.AssigneeID == db.NoConditionID {
+ sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_assignees)")
+ }
- if opts.ReviewRequestedID > 0 {
- applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
- }
+ if opts.PosterID > 0 {
+ applyPosterCondition(sess, opts.PosterID)
+ }
- if opts.ReviewedID > 0 {
- applyReviewedCondition(sess, opts.ReviewedID)
- }
+ if opts.MentionedID > 0 {
+ applyMentionedCondition(sess, opts.MentionedID)
+ }
- switch opts.IsPull {
- case util.OptionalBoolTrue:
- sess.And("issue.is_pull=?", true)
- case util.OptionalBoolFalse:
- sess.And("issue.is_pull=?", false)
- }
+ if opts.ReviewRequestedID > 0 {
+ applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
+ }
- return sess
+ if opts.ReviewedID > 0 {
+ applyReviewedCondition(sess, opts.ReviewedID)
}
- var err error
- stats.OpenCount, err = countSession(opts, issueIDs).
- And("issue.is_closed = ?", false).
- Count(new(Issue))
- if err != nil {
- return stats, err
+ switch opts.IsPull {
+ case util.OptionalBoolTrue:
+ sess.And("issue.is_pull=?", true)
+ case util.OptionalBoolFalse:
+ sess.And("issue.is_pull=?", false)
}
- stats.ClosedCount, err = countSession(opts, issueIDs).
- And("issue.is_closed = ?", true).
- Count(new(Issue))
- return stats, err
+
+ return sess
}
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.