Compare commits
1 Commits
v1.1.6
...
entgo/v1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18755155ba |
@@ -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)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
25
entgo/query/select.go
Normal 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
|
||||
}
|
||||
}
|
||||
48
entgo/query/select_test.go
Normal file
48
entgo/query/select_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user