53 lines · 1.5 KB · Go
RawDownload
// Copyright 2022 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package db import (	"strings" 	"forgejo.org/modules/setting"	"forgejo.org/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.Type.IsSQLite3() {		return builder.Like{"UPPER(" + key + ")", util.ToUpperASCII(value)}	}	return builder.Like{"UPPER(" + key + ")", strings.ToUpper(value)}} // BuildCaseInsensitiveIn returns a condition to check if the given value is in the given values case-insensitively.// Handles especially SQLite correctly as UPPER there only transforms ASCII letters.func BuildCaseInsensitiveIn(key string, values []string) builder.Cond {	uppers := make([]string, 0, len(values))	if setting.Database.Type.IsSQLite3() {		for _, value := range values {			uppers = append(uppers, util.ToUpperASCII(value))		}	} else {		for _, value := range values {			uppers = append(uppers, strings.ToUpper(value))		}	} 	return builder.In("UPPER("+key+")", uppers)} // BuilderDialect returns the xorm.Builder dialect of the enginefunc BuilderDialect() string {	switch {	case setting.Database.Type.IsMySQL():		return builder.MYSQL	case setting.Database.Type.IsSQLite3():		return builder.SQLITE	case setting.Database.Type.IsPostgreSQL():		return builder.POSTGRES	default:		return ""	}}