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/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/references"
|
"code.gitea.io/gitea/modules/references"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"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) {
|
func SearchIssueIDsByKeyword(ctx context.Context, kw string, repoIDs []int64, limit, start int) (int64, []int64, error) {
|
||||||
repoCond := builder.In("repo_id", repoIDs)
|
repoCond := builder.In("repo_id", repoIDs)
|
||||||
subQuery := builder.Select("id").From("issue").Where(repoCond)
|
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(
|
cond := builder.And(
|
||||||
repoCond,
|
repoCond,
|
||||||
builder.Or(
|
builder.Or(
|
||||||
builder.Like{"UPPER(name)", kw},
|
db.BuildCaseInsensitiveLike("name", kw),
|
||||||
builder.Like{"UPPER(content)", kw},
|
db.BuildCaseInsensitiveLike("content", kw),
|
||||||
builder.In("id", builder.Select("issue_id").
|
builder.In("id", builder.Select("issue_id").
|
||||||
From("comment").
|
From("comment").
|
||||||
Where(builder.And(
|
Where(builder.And(
|
||||||
builder.Eq{"type": CommentTypeComment},
|
builder.Eq{"type": CommentTypeComment},
|
||||||
builder.In("issue_id", subQuery),
|
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 {
|
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
|
return cond
|
||||||
|
|
Reference in a new issue