From aee3b4ead3ec4bc203c906e9d3fe39e73ae79c9d Mon Sep 17 00:00:00 2001 From: Tyrone Yeh Date: Thu, 28 Jul 2022 09:30:52 +0800 Subject: [PATCH 1/5] Modify for #18437 --- models/issues/milestone.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models/issues/milestone.go b/models/issues/milestone.go index c49799f391dc3..4197fb9120baa 100644 --- a/models/issues/milestone.go +++ b/models/issues/milestone.go @@ -15,6 +15,7 @@ import ( "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" "xorm.io/builder" ) @@ -361,7 +362,11 @@ func (opts GetMilestonesOption) toCond() builder.Cond { } if len(opts.Name) != 0 { - cond = cond.And(builder.Like{"UPPER(name)", strings.ToUpper(opts.Name)}) + if setting.Database.UseSQLite3 { + cond = cond.And(builder.Like{"UPPER(name)", util.ToUpperASCII(opts.Name)}) + } else { + cond = cond.And(builder.Like{"UPPER(name)", strings.ToUpper(opts.Name)}) + } } return cond From dcc98d71e689fbded954ebb3107daac0fed269f6 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 28 Jul 2022 17:45:40 +0200 Subject: [PATCH 2/5] refactor --- models/db/common.go | 23 +++++++++++++++++++++++ models/issues/issue.go | 13 +++---------- models/issues/milestone.go | 7 +------ 3 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 models/db/common.go diff --git a/models/db/common.go b/models/db/common.go new file mode 100644 index 0000000000000..a3ad223d2f600 --- /dev/null +++ b/models/db/common.go @@ -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" +) + +func BuildLikeUpper(key, value string) builder.Cond { + if setting.Database.UseSQLite3 { + // SQLite's UPPER function only transforms ASCII letters. + return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)} + } else { + return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)} + } +} diff --git a/models/issues/issue.go b/models/issues/issue.go index 064f0d22abd01..2f1992360efd5 100644 --- a/models/issues/issue.go +++ b/models/issues/issue.go @@ -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.BuildLikeUpper("name", kw), + db.BuildLikeUpper("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.BuildLikeUpper("content", kw), )), ), ), diff --git a/models/issues/milestone.go b/models/issues/milestone.go index 4197fb9120baa..e9fadf7169e77 100644 --- a/models/issues/milestone.go +++ b/models/issues/milestone.go @@ -15,7 +15,6 @@ import ( "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" "xorm.io/builder" ) @@ -362,11 +361,7 @@ func (opts GetMilestonesOption) toCond() builder.Cond { } if len(opts.Name) != 0 { - if setting.Database.UseSQLite3 { - cond = cond.And(builder.Like{"UPPER(name)", util.ToUpperASCII(opts.Name)}) - } else { - cond = cond.And(builder.Like{"UPPER(name)", strings.ToUpper(opts.Name)}) - } + cond = cond.And(db.BuildLikeUpper("name", opts.Name)) } return cond From 008a68ef200378248f04408157a7b6a9398d250d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 28 Jul 2022 17:59:41 +0200 Subject: [PATCH 3/5] Update models/db/common.go Co-authored-by: delvh --- models/db/common.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/db/common.go b/models/db/common.go index a3ad223d2f600..1140bcc019ac2 100644 --- a/models/db/common.go +++ b/models/db/common.go @@ -13,9 +13,10 @@ import ( "xorm.io/builder" ) +// BuildLikeUpper 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 BuildLikeUpper(key, value string) builder.Cond { if setting.Database.UseSQLite3 { - // SQLite's UPPER function only transforms ASCII letters. return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)} } else { return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)} From 062fdc1ff2127917d514444edeb7350e3d152d0c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 28 Jul 2022 18:01:22 +0200 Subject: [PATCH 4/5] rename --- models/db/common.go | 4 ++-- models/issues/issue.go | 6 +++--- models/issues/milestone.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/models/db/common.go b/models/db/common.go index 1140bcc019ac2..411362298cc47 100644 --- a/models/db/common.go +++ b/models/db/common.go @@ -13,9 +13,9 @@ import ( "xorm.io/builder" ) -// BuildLikeUpper returns a condition to check if the given value is like the given key case-insensitively. +// 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 BuildLikeUpper(key, value string) builder.Cond { +func BuildCaseInsensitiveLike(key, value string) builder.Cond { if setting.Database.UseSQLite3 { return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)} } else { diff --git a/models/issues/issue.go b/models/issues/issue.go index 2f1992360efd5..5bdb60f7c08c5 100644 --- a/models/issues/issue.go +++ b/models/issues/issue.go @@ -1905,14 +1905,14 @@ func SearchIssueIDsByKeyword(ctx context.Context, kw string, repoIDs []int64, li cond := builder.And( repoCond, builder.Or( - db.BuildLikeUpper("name", kw), - db.BuildLikeUpper("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), - db.BuildLikeUpper("content", kw), + db.BuildCaseInsensitiveLike("content", kw), )), ), ), diff --git a/models/issues/milestone.go b/models/issues/milestone.go index e9fadf7169e77..1021938b205ae 100644 --- a/models/issues/milestone.go +++ b/models/issues/milestone.go @@ -361,7 +361,7 @@ func (opts GetMilestonesOption) toCond() builder.Cond { } if len(opts.Name) != 0 { - cond = cond.And(db.BuildLikeUpper("name", opts.Name)) + cond = cond.And(db.BuildCaseInsensitiveLike("name", opts.Name)) } return cond From f1a56cc64e0ec11193fb2dc8683b132eeddefb24 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 28 Jul 2022 18:03:03 +0200 Subject: [PATCH 5/5] fix lint --- models/db/common.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/models/db/common.go b/models/db/common.go index 411362298cc47..1a59a8b5c697f 100644 --- a/models/db/common.go +++ b/models/db/common.go @@ -18,7 +18,6 @@ import ( func BuildCaseInsensitiveLike(key, value string) builder.Cond { if setting.Database.UseSQLite3 { return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)} - } else { - return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)} } + return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)} }