diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-02-21 13:01:28 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-21 13:01:28 +0800 |
commit | 477ef462510d69a8a31e008fb6e64059dc6cc148 (patch) | |
tree | 2c7884ad454e6301d71e6f5ed3fc2247a190dedc /models/issue.go | |
parent | 0751153613bfd2e39cf28e83bbe04b76641d222f (diff) | |
download | gitea-477ef462510d69a8a31e008fb6e64059dc6cc148.tar.gz gitea-477ef462510d69a8a31e008fb6e64059dc6cc148.zip |
Add more tests and docs for issue indexer, add db indexer type for searching from database (#6144)
* add more tests and docs for issue indexer, add db indexer type for searching from database
* fix typo
* fix typo
* fix lint
* improve docs
Diffstat (limited to 'models/issue.go')
-rw-r--r-- | models/issue.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/models/issue.go b/models/issue.go index 8de26c2b15..503ff32b8e 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1684,6 +1684,40 @@ func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen return openResult, closedResult } +// SearchIssueIDsByKeyword search issues on database +func SearchIssueIDsByKeyword(kw string, repoID int64, limit, start int) (int64, []int64, error) { + var repoCond = builder.Eq{"repo_id": repoID} + var subQuery = builder.Select("id").From("issue").Where(repoCond) + var cond = builder.And( + repoCond, + builder.Or( + builder.Like{"name", kw}, + builder.Like{"content", kw}, + builder.In("id", builder.Select("issue_id"). + From("comment"). + Where(builder.And( + builder.Eq{"type": CommentTypeComment}, + builder.In("issue_id", subQuery), + builder.Like{"content", kw}, + )), + ), + ), + ) + + var ids = make([]int64, 0, limit) + err := x.Distinct("id").Table("issue").Where(cond).Limit(limit, start).Find(&ids) + if err != nil { + return 0, nil, err + } + + total, err := x.Distinct("id").Table("issue").Where(cond).Count() + if err != nil { + return 0, nil, err + } + + return total, ids, nil +} + func updateIssue(e Engine, issue *Issue) error { _, err := e.ID(issue.ID).AllCols().Update(issue) if err != nil { |