dialect/sql: add HasPrefixFold and HasSuffixFold predicates (#4233)

* FieldHasPrefixFold and HasPrefixFold predicates

* FieldHasSuffixFold and HasSuffixFold predicates

* Review feedback - per dialect SQL generation.
This commit is contained in:
Mohsin Hijazee
2024-10-09 15:32:48 +02:00
committed by GitHub
parent 9627017062
commit d1dab301c6
4 changed files with 180 additions and 22 deletions

View File

@@ -336,6 +336,24 @@ func TestFieldHasPrefix(t *testing.T) {
})
}
func TestFieldHasPrefixFold(t *testing.T) {
p := FieldHasPrefixFold("name", "a8m")
t.Run("MySQL", func(t *testing.T) {
s := Dialect(dialect.MySQL).Select("*").From(Table("users"))
p(s)
query, args := s.Query()
require.Equal(t, "SELECT * FROM `users` WHERE `users`.`name` COLLATE utf8mb4_general_ci LIKE ?", query)
require.Equal(t, []any{"a8m%"}, args)
})
t.Run("PostgreSQL", func(t *testing.T) {
s := Dialect(dialect.Postgres).Select("*").From(Table("users"))
p(s)
query, args := s.Query()
require.Equal(t, `SELECT * FROM "users" WHERE "users"."name" ILIKE $1`, query)
require.Equal(t, []any{"a8m%"}, args)
})
}
func TestFieldHasSuffix(t *testing.T) {
p := FieldHasSuffix("name", "a8m")
t.Run("MySQL", func(t *testing.T) {
@@ -354,6 +372,24 @@ func TestFieldHasSuffix(t *testing.T) {
})
}
func TestFieldHasSuffixFold(t *testing.T) {
p := FieldHasSuffixFold("name", "a8m")
t.Run("MySQL", func(t *testing.T) {
s := Dialect(dialect.MySQL).Select("*").From(Table("users"))
p(s)
query, args := s.Query()
require.Equal(t, "SELECT * FROM `users` WHERE `users`.`name` COLLATE utf8mb4_general_ci LIKE ?", query)
require.Equal(t, []any{"%a8m"}, args)
})
t.Run("PostgreSQL", func(t *testing.T) {
s := Dialect(dialect.Postgres).Select("*").From(Table("users"))
p(s)
query, args := s.Query()
require.Equal(t, `SELECT * FROM "users" WHERE "users"."name" ILIKE $1`, query)
require.Equal(t, []any{"%a8m"}, args)
})
}
func TestFieldContains(t *testing.T) {
p := FieldContains("name", "a8m")
t.Run("MySQL", func(t *testing.T) {