Skip to content

Commit abec76d

Browse files
tyroneyeh6543delvh
authored and
Sysoev, Vladimir
committed
Modify milestone search keywords to be case insensitive again (go-gitea#20513)
Co-authored-by: 6543 <[email protected]> Co-authored-by: delvh <[email protected]>
1 parent 79325e8 commit abec76d

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

models/db/common.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2022 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package db
6+
7+
import (
8+
"strings"
9+
10+
"code.gitea.io/gitea/modules/setting"
11+
"code.gitea.io/gitea/modules/util"
12+
13+
"xorm.io/builder"
14+
)
15+
16+
// BuildCaseInsensitiveLike returns a condition to check if the given value is like the given key case-insensitively.
17+
// Handles especially SQLite correctly as UPPER there only transforms ASCII letters.
18+
func BuildCaseInsensitiveLike(key, value string) builder.Cond {
19+
if setting.Database.UseSQLite3 {
20+
return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)}
21+
}
22+
return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)}
23+
}

models/issues/issue.go

+3-10
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"code.gitea.io/gitea/modules/git"
2828
"code.gitea.io/gitea/modules/log"
2929
"code.gitea.io/gitea/modules/references"
30-
"code.gitea.io/gitea/modules/setting"
3130
api "code.gitea.io/gitea/modules/structs"
3231
"code.gitea.io/gitea/modules/timeutil"
3332
"code.gitea.io/gitea/modules/util"
@@ -1903,23 +1902,17 @@ func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen,
19031902
func SearchIssueIDsByKeyword(ctx context.Context, kw string, repoIDs []int64, limit, start int) (int64, []int64, error) {
19041903
repoCond := builder.In("repo_id", repoIDs)
19051904
subQuery := builder.Select("id").From("issue").Where(repoCond)
1906-
// SQLite's UPPER function only transforms ASCII letters.
1907-
if setting.Database.UseSQLite3 {
1908-
kw = util.ToUpperASCII(kw)
1909-
} else {
1910-
kw = strings.ToUpper(kw)
1911-
}
19121905
cond := builder.And(
19131906
repoCond,
19141907
builder.Or(
1915-
builder.Like{"UPPER(name)", kw},
1916-
builder.Like{"UPPER(content)", kw},
1908+
db.BuildCaseInsensitiveLike("name", kw),
1909+
db.BuildCaseInsensitiveLike("content", kw),
19171910
builder.In("id", builder.Select("issue_id").
19181911
From("comment").
19191912
Where(builder.And(
19201913
builder.Eq{"type": CommentTypeComment},
19211914
builder.In("issue_id", subQuery),
1922-
builder.Like{"UPPER(content)", kw},
1915+
db.BuildCaseInsensitiveLike("content", kw),
19231916
)),
19241917
),
19251918
),

models/issues/milestone.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ func (opts GetMilestonesOption) toCond() builder.Cond {
361361
}
362362

363363
if len(opts.Name) != 0 {
364-
cond = cond.And(builder.Like{"UPPER(name)", strings.ToUpper(opts.Name)})
364+
cond = cond.And(db.BuildCaseInsensitiveLike("name", opts.Name))
365365
}
366366

367367
return cond

0 commit comments

Comments
 (0)