feat: entgo.

This commit is contained in:
Bobo
2025-02-08 15:31:39 +08:00
parent d1418caf84
commit ce04468424
3 changed files with 98 additions and 9 deletions

View File

@@ -237,7 +237,8 @@ func makeFieldFilter(s *sql.Selector, keys []string, value string) *sql.Predicat
if len(jsonFields) != 2 {
return filterEqual(s, p, field, value)
}
return filterJsonb(s, p, jsonFields[0], jsonFields[1]).EQ("", value)
value = "'" + value + "'"
return filterJsonb(s, p, jsonFields[1], jsonFields[0]).EQ("", value)
}
return filterEqual(s, p, field, value)
@@ -250,7 +251,7 @@ func makeFieldFilter(s *sql.Selector, keys []string, value string) *sql.Predicat
if isJsonFieldKey(field) {
jsonFields := splitJsonFieldKey(field)
if len(jsonFields) == 2 {
field = filterJsonbField(s, op, field)
field = filterJsonbField(s, jsonFields[1], jsonFields[0])
value = "'" + value + "'"
}
}
@@ -284,7 +285,7 @@ func makeFieldFilter(s *sql.Selector, keys []string, value string) *sql.Predicat
if isJsonFieldKey(field) {
jsonFields := splitJsonFieldKey(field)
if len(jsonFields) == 2 {
field = filterJsonbField(s, op2, field)
field = filterJsonbField(s, jsonFields[1], jsonFields[0])
value = "'" + value + "'"
}
}

View File

@@ -7,7 +7,6 @@ import (
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -689,8 +688,97 @@ func TestFilter(t *testing.T) {
}
func TestFilterJsonbField(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("app_profile"))
str := filterJsonbField(s, "daily_email", "preferences")
fmt.Println(str)
assert.Equal(t, str, "\"app_profile\".\"preferences\" ->> 'daily_email'")
t.Run("filterJsonbField", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("app_profile"))
str := filterJsonbField(s, "daily_email", "preferences")
fmt.Println(str)
require.Equal(t, str, "\"app_profile\".\"preferences\" ->> 'daily_email'")
})
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
t.Run("MySQL_FilterEqual", func(t *testing.T) {
s := sql.Dialect(dialect.MySQL).Select("*").From(sql.Table("menus"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title"}, "tom")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM `menus` WHERE JSON_EXTRACT(`menus`.`meta`, '$.title') = ?", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'tom'")
})
t.Run("PostgreSQL_FilterEqual", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("menus"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title"}, "tom")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM \"menus\" WHERE \"menus\".\"meta\" ->> 'title' = $1", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'tom'")
})
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
t.Run("MySQL_FilterNot", func(t *testing.T) {
s := sql.Dialect(dialect.MySQL).Select("*").From(sql.Table("users"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title", "not"}, "tom")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM `users` WHERE NOT JSON_EXTRACT(`users`.`meta`, '$.title') = ?", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'tom'")
})
t.Run("PostgreSQL_FilterNot", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("users"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title", "not"}, "tom")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM \"users\" WHERE NOT \"users\".\"meta\" ->> 'title' = $1", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'tom'")
})
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
t.Run("MySQL_FilterNot_Date", func(t *testing.T) {
s := sql.Dialect(dialect.MySQL).Select("*").From(sql.Table("users"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title", "date", "not"}, "2023-01-01")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM `users` WHERE NOT DATE(JSON_EXTRACT(`users`.`meta`, '$.title')) = ?", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'2023-01-01'")
})
t.Run("PostgreSQL_FilterNot_Date", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("users"))
p := sql.P()
p = makeFieldFilter(s, []string{"meta.title", "date", "not"}, "2023-01-01")
s.Where(p)
query, args := s.Query()
require.Equal(t, "SELECT * FROM \"users\" WHERE NOT EXTRACT('DATE' FROM \"users\".\"meta\" ->> 'title') = $1", query)
require.NotEmpty(t, args)
require.Equal(t, args[0], "'2023-01-01'")
})
}

View File

@@ -3,7 +3,7 @@ git tag v1.1.13
git tag bank_card/v1.1.3
git tag geoip/v1.1.3
git tag entgo/v1.1.21
git tag entgo/v1.1.22
git tag gorm/v1.1.3
git push origin --tags