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
					
				| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue