Skip to content

Commit 9c5fce4

Browse files
committed
This commit will reduce join star, repo_topic, topic tables on repo search, so that fix extra columns problem on mssql
1 parent 25c49cf commit 9c5fce4

File tree

1 file changed

+8
-34
lines changed

1 file changed

+8
-34
lines changed

models/repo_list.go

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,9 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err
173173
cond = cond.And(builder.Eq{"is_private": false})
174174
}
175175

176-
var starred bool
177176
if opts.OwnerID > 0 {
178177
if opts.Starred {
179-
starred = true
180-
cond = builder.Eq{"star.uid": opts.OwnerID}
178+
cond = cond.And(builder.In("id", builder.Select("repo_id").From("star").Where(builder.Eq{"uid": opts.OwnerID})))
181179
} else {
182180
var accessCond = builder.NewCond()
183181
if opts.Collaborate != util.OptionalBoolTrue {
@@ -207,11 +205,13 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err
207205
var keywordCond = builder.NewCond()
208206
// separate keyword
209207
for _, v := range strings.Split(opts.Keyword, ",") {
210-
if opts.TopicOnly {
211-
keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(v)})
212-
} else {
208+
subQuery := builder.Select("repo_topic.repo_id").From("repo_topic").
209+
Join("INNER", "topic", "topic.id = repo_topic.topic_id").
210+
Where(builder.Like{"topic.name", strings.ToLower(v)}).
211+
GroupBy("repo_topic.repo_id")
212+
keywordCond = keywordCond.Or(builder.In("id", subQuery))
213+
if !opts.TopicOnly {
213214
keywordCond = keywordCond.Or(builder.Like{"lower_name", strings.ToLower(v)})
214-
keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(v)})
215215
}
216216
}
217217
cond = cond.And(keywordCond)
@@ -232,15 +232,6 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err
232232
sess := x.NewSession()
233233
defer sess.Close()
234234

235-
if starred {
236-
sess.Join("INNER", "star", "star.repo_id = repository.id")
237-
}
238-
239-
if opts.Keyword != "" {
240-
sess.Join("LEFT", "repo_topic", "repo_topic.repo_id = repository.id")
241-
sess.Join("LEFT", "topic", "repo_topic.topic_id = topic.id")
242-
}
243-
244235
count, err := sess.
245236
Where(cond).
246237
Count(new(Repository))
@@ -249,27 +240,10 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err
249240
return nil, 0, fmt.Errorf("Count: %v", err)
250241
}
251242

252-
// Set again after reset by Count()
253-
if starred {
254-
sess.Join("INNER", "star", "star.repo_id = repository.id")
255-
}
256-
257-
if opts.Keyword != "" {
258-
sess.Join("LEFT", "repo_topic", "repo_topic.repo_id = repository.id")
259-
sess.Join("LEFT", "topic", "repo_topic.topic_id = topic.id")
260-
}
261-
262-
if opts.Keyword != "" {
263-
sess.Select("repository.*")
264-
sess.GroupBy("repository.id")
265-
sess.OrderBy("repository." + opts.OrderBy.String())
266-
} else {
267-
sess.OrderBy(opts.OrderBy.String())
268-
}
269-
270243
repos := make(RepositoryList, 0, opts.PageSize)
271244
if err = sess.
272245
Where(cond).
246+
OrderBy(opts.OrderBy.String()).
273247
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
274248
Find(&repos); err != nil {
275249
return nil, 0, fmt.Errorf("Repo: %v", err)

0 commit comments

Comments
 (0)