]> source.dussan.org Git - gitea.git/commitdiff
Modify milestone search keywords to be case insensitive again (#20513)
authorTyrone Yeh <siryeh@gmail.com>
Thu, 28 Jul 2022 16:58:04 +0000 (00:58 +0800)
committerGitHub <noreply@github.com>
Thu, 28 Jul 2022 16:58:04 +0000 (18:58 +0200)
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: delvh <dev.lh@web.de>
models/db/common.go [new file with mode: 0644]
models/issues/issue.go
models/issues/milestone.go

diff --git a/models/db/common.go b/models/db/common.go
new file mode 100644 (file)
index 0000000..1a59a8b
--- /dev/null
@@ -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)}
+}
index 064f0d22abd015632c56fae73892dbca9514910f..5bdb60f7c08c5ce4afd1795c75a66a4f377d1384 100644 (file)
@@ -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),
                                )),
                        ),
                ),
index c49799f391dc3a26b29334ae061a27935b63ee55..1021938b205ae08e48941740256442b173e703eb 100644 (file)
@@ -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