// Copyright 2022 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MITpackage dbimport ( "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 "" }}
// 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 engine
func 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 ""
}
}