From 18755155ba7ba34393a05f8c197f9f942974dd9b Mon Sep 17 00:00:00 2001 From: tx7do Date: Mon, 6 Nov 2023 17:02:55 +0800 Subject: [PATCH] feat: ent select fields. --- entgo/query/order.go | 16 ++++++------- entgo/query/query.go | 8 +++++++ entgo/query/select.go | 25 ++++++++++++++++++++ entgo/query/select_test.go | 48 ++++++++++++++++++++++++++++++++++++++ tag.bat | 2 +- 5 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 entgo/query/select.go create mode 100644 entgo/query/select_test.go diff --git a/entgo/query/order.go b/entgo/query/order.go index baf298a..0468ce3 100644 --- a/entgo/query/order.go +++ b/entgo/query/order.go @@ -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))) - } -} diff --git a/entgo/query/query.go b/entgo/query/query.go index 32246af..11656ac 100644 --- a/entgo/query/query.go +++ b/entgo/query/query.go @@ -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 } diff --git a/entgo/query/select.go b/entgo/query/select.go new file mode 100644 index 0000000..0015776 --- /dev/null +++ b/entgo/query/select.go @@ -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 + } +} diff --git a/entgo/query/select_test.go b/entgo/query/select_test.go new file mode 100644 index 0000000..5a5eba0 --- /dev/null +++ b/entgo/query/select_test.go @@ -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) + }) +} diff --git a/tag.bat b/tag.bat index db7d41c..ed0e0c8 100644 --- a/tag.bat +++ b/tag.bat @@ -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