Compare commits

...

1 Commits

Author SHA1 Message Date
tx7do
18755155ba feat: ent select fields. 2023-11-06 17:02:55 +08:00
5 changed files with 90 additions and 9 deletions

View File

@@ -34,6 +34,14 @@ func QueryCommandToOrderConditions(orderBys []string) (error, func(s *sql.Select
}
}
func BuildOrderSelect(s *sql.Selector, field string, desc bool) {
if desc {
s.OrderBy(sql.Desc(s.C(field)))
} else {
s.OrderBy(sql.Asc(s.C(field)))
}
}
func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, func(s *sql.Selector)) {
if len(orderBys) == 0 {
return nil, func(s *sql.Selector) {
@@ -43,11 +51,3 @@ func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, fun
return QueryCommandToOrderConditions(orderBys)
}
}
func BuildOrderSelect(s *sql.Selector, field string, desc bool) {
if desc {
s.OrderBy(sql.Desc(s.C(field)))
} else {
s.OrderBy(sql.Asc(s.C(field)))
}
}

View File

@@ -2,6 +2,7 @@ package entgo
import (
"entgo.io/ent/dialect/sql"
_ "github.com/go-kratos/kratos/v2/encoding/json"
)
@@ -10,6 +11,7 @@ func BuildQuerySelector(
andFilterJsonString, orFilterJsonString string,
page, pageSize int32, noPaging bool,
orderBys []string, defaultOrderField string,
selectFields []string,
) (err error, whereSelectors []func(s *sql.Selector), querySelectors []func(s *sql.Selector)) {
err, whereSelectors = BuildFilterSelector(andFilterJsonString, orFilterJsonString)
if err != nil {
@@ -24,6 +26,9 @@ func BuildQuerySelector(
pageSelector := BuildPaginationSelector(page, pageSize, noPaging)
var fieldSelector func(s *sql.Selector)
err, fieldSelector = BuildFieldSelector(selectFields)
if len(whereSelectors) > 0 {
querySelectors = append(querySelectors, whereSelectors...)
}
@@ -34,6 +39,9 @@ func BuildQuerySelector(
if pageSelector != nil {
querySelectors = append(querySelectors, pageSelector)
}
if fieldSelector != nil {
querySelectors = append(querySelectors, fieldSelector)
}
return
}

25
entgo/query/select.go Normal file
View File

@@ -0,0 +1,25 @@
package entgo
import (
"entgo.io/ent/dialect/sql"
"github.com/tx7do/go-utils/stringcase"
)
func BuildFieldSelect(s *sql.Selector, fields []string) {
if len(fields) > 0 {
for i, field := range fields {
fields[i] = stringcase.ToSnakeCase(field)
}
s.Select(fields...)
}
}
func BuildFieldSelector(fields []string) (error, func(s *sql.Selector)) {
if len(fields) > 0 {
return nil, func(s *sql.Selector) {
BuildFieldSelect(s, fields)
}
} else {
return nil, nil
}
}

View File

@@ -0,0 +1,48 @@
package entgo
import (
"testing"
"github.com/stretchr/testify/require"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
)
func TestBuildFieldSelect(t *testing.T) {
t.Run("MySQL_2Fields", func(t *testing.T) {
s := sql.Dialect(dialect.MySQL).Select("*").From(sql.Table("users"))
BuildFieldSelect(s, []string{"id", "username"})
query, args := s.Query()
require.Equal(t, "SELECT `id`, `username` FROM `users`", query)
require.Empty(t, args)
})
t.Run("PostgreSQL_2Fields", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("users"))
BuildFieldSelect(s, []string{"id", "username"})
query, args := s.Query()
require.Equal(t, `SELECT "id", "username" FROM "users"`, query)
require.Empty(t, args)
})
t.Run("MySQL_AllFields", func(t *testing.T) {
s := sql.Dialect(dialect.MySQL).Select("*").From(sql.Table("users"))
BuildFieldSelect(s, []string{})
query, args := s.Query()
require.Equal(t, "SELECT * FROM `users`", query)
require.Empty(t, args)
})
t.Run("PostgreSQL_AllFields", func(t *testing.T) {
s := sql.Dialect(dialect.Postgres).Select("*").From(sql.Table("users"))
BuildFieldSelect(s, []string{})
query, args := s.Query()
require.Equal(t, `SELECT * FROM "users"`, query)
require.Empty(t, args)
})
}

View File

@@ -1,6 +1,6 @@
git tag v1.1.6
git tag bank_card/v1.1.0
git tag entgo/v1.1.6
git tag entgo/v1.1.7
git tag geoip/v1.1.0
git push origin --tags