Modify milestone search keywords to be case insensitive again (#20513)
Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
parent
2c108d20ba
commit
8e3da0e27f
3 changed files with 27 additions and 11 deletions
23
models/db/common.go
Normal file
23
models/db/common.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package db
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
|
||||
"xorm.io/builder"
|
||||
)
|
||||
|
||||
// BuildCaseInsensitiveLike returns a condition to check if the given value is like the given key case-insensitively.
|
||||
// Handles especially SQLite correctly as UPPER there only transforms ASCII letters.
|
||||
func BuildCaseInsensitiveLike(key, value string) builder.Cond {
|
||||
if setting.Database.UseSQLite3 {
|
||||
return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)}
|
||||
}
|
||||
return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)}
|
||||
}
|
|
@ -27,7 +27,6 @@ import (
|
|||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/references"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
"code.gitea.io/gitea/modules/timeutil"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
|
@ -1903,23 +1902,17 @@ func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen,
|
|||
func SearchIssueIDsByKeyword(ctx context.Context, kw string, repoIDs []int64, limit, start int) (int64, []int64, error) {
|
||||
repoCond := builder.In("repo_id", repoIDs)
|
||||
subQuery := builder.Select("id").From("issue").Where(repoCond)
|
||||
// SQLite's UPPER function only transforms ASCII letters.
|
||||
if setting.Database.UseSQLite3 {
|
||||
kw = util.ToUpperASCII(kw)
|
||||
} else {
|
||||
kw = strings.ToUpper(kw)
|
||||
}
|
||||
cond := builder.And(
|
||||
repoCond,
|
||||
builder.Or(
|
||||
builder.Like{"UPPER(name)", kw},
|
||||
builder.Like{"UPPER(content)", kw},
|
||||
db.BuildCaseInsensitiveLike("name", kw),
|
||||
db.BuildCaseInsensitiveLike("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{"UPPER(content)", kw},
|
||||
db.BuildCaseInsensitiveLike("content", kw),
|
||||
)),
|
||||
),
|
||||
),
|
||||
|
|
|
@ -361,7 +361,7 @@ func (opts GetMilestonesOption) toCond() builder.Cond {
|
|||
}
|
||||
|
||||
if len(opts.Name) != 0 {
|
||||
cond = cond.And(builder.Like{"UPPER(name)", strings.ToUpper(opts.Name)})
|
||||
cond = cond.And(db.BuildCaseInsensitiveLike("name", opts.Name))
|
||||
}
|
||||
|
||||
return cond
|
||||
|
|
Reference in a new issue