dialect/sql: improve equalfold implementation (#1572)

This commit is contained in:
Benjamin Bourgeais
2021-05-19 21:30:50 +02:00
committed by GitHub
parent 6691e6a28c
commit d114942589
2 changed files with 21 additions and 4 deletions

View File

@@ -1351,9 +1351,18 @@ func (p *Predicate) EqualFold(col, sub string) *Predicate {
return p.Append(func(b *Builder) {
f := &Func{}
f.SetDialect(b.dialect)
f.Lower(col)
b.WriteString(f.String())
b.WriteOp(OpEQ)
switch b.dialect {
case dialect.MySQL:
// We assume the CHARACTER SET is configured to utf8mb4,
// because this how it is defined in dialect/sql/schema.
b.Ident(col).WriteString(" COLLATE utf8mb4_general_ci = ")
case dialect.Postgres:
b.Ident(col).WriteString(" ILIKE ")
default: // SQLite.
f.Lower(col)
b.WriteString(f.String())
b.WriteOp(OpEQ)
}
b.Arg(strings.ToLower(sub))
})
}