Compare commits
2 Commits
v1.1.6
...
entgo/v1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50a2e139eb | ||
|
|
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)) {
|
func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, func(s *sql.Selector)) {
|
||||||
if len(orderBys) == 0 {
|
if len(orderBys) == 0 {
|
||||||
return nil, func(s *sql.Selector) {
|
return nil, func(s *sql.Selector) {
|
||||||
@@ -43,11 +51,3 @@ func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, fun
|
|||||||
return QueryCommandToOrderConditions(orderBys)
|
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 (
|
import (
|
||||||
"entgo.io/ent/dialect/sql"
|
"entgo.io/ent/dialect/sql"
|
||||||
|
|
||||||
_ "github.com/go-kratos/kratos/v2/encoding/json"
|
_ "github.com/go-kratos/kratos/v2/encoding/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -10,6 +11,7 @@ func BuildQuerySelector(
|
|||||||
andFilterJsonString, orFilterJsonString string,
|
andFilterJsonString, orFilterJsonString string,
|
||||||
page, pageSize int32, noPaging bool,
|
page, pageSize int32, noPaging bool,
|
||||||
orderBys []string, defaultOrderField string,
|
orderBys []string, defaultOrderField string,
|
||||||
|
selectFields []string,
|
||||||
) (err error, whereSelectors []func(s *sql.Selector), querySelectors []func(s *sql.Selector)) {
|
) (err error, whereSelectors []func(s *sql.Selector), querySelectors []func(s *sql.Selector)) {
|
||||||
err, whereSelectors = BuildFilterSelector(andFilterJsonString, orFilterJsonString)
|
err, whereSelectors = BuildFilterSelector(andFilterJsonString, orFilterJsonString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -24,6 +26,9 @@ func BuildQuerySelector(
|
|||||||
|
|
||||||
pageSelector := BuildPaginationSelector(page, pageSize, noPaging)
|
pageSelector := BuildPaginationSelector(page, pageSize, noPaging)
|
||||||
|
|
||||||
|
var fieldSelector func(s *sql.Selector)
|
||||||
|
err, fieldSelector = BuildFieldSelector(selectFields)
|
||||||
|
|
||||||
if len(whereSelectors) > 0 {
|
if len(whereSelectors) > 0 {
|
||||||
querySelectors = append(querySelectors, whereSelectors...)
|
querySelectors = append(querySelectors, whereSelectors...)
|
||||||
}
|
}
|
||||||
@@ -34,6 +39,9 @@ func BuildQuerySelector(
|
|||||||
if pageSelector != nil {
|
if pageSelector != nil {
|
||||||
querySelectors = append(querySelectors, pageSelector)
|
querySelectors = append(querySelectors, pageSelector)
|
||||||
}
|
}
|
||||||
|
if fieldSelector != nil {
|
||||||
|
querySelectors = append(querySelectors, fieldSelector)
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
29
entgo/query/select.go
Normal file
29
entgo/query/select.go
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
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 {
|
||||||
|
switch {
|
||||||
|
case field == "id_" || field == "_id":
|
||||||
|
field = "id"
|
||||||
|
}
|
||||||
|
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