Skip to content

Commit 33d203d

Browse files
committed
refactor: refactor SelectList
1 parent b76b9d4 commit 33d203d

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

gormplus/mapper.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,29 @@ func SelectByIds[T any](ids ...any) (*gorm.DB, []T) {
7575

7676
func SelectOne[T any](q *Query[T]) (*gorm.DB, T) {
7777
var entity T
78-
resultDb := GormDb.Select(q.Columns).Where(q.QueryBuilder.String(), q.QueryArgs...).First(&entity)
78+
resultDb := GormDb.Select(q.SelectColumns).Where(q.QueryBuilder.String(), q.QueryArgs...).First(&entity)
7979
return resultDb, entity
8080
}
8181

8282
func SelectList[T any](q *Query[T]) (*gorm.DB, []T) {
8383
var results []T
84-
resultDb := GormDb.Select(q.Columns).Where(q.QueryBuilder.String(), q.QueryArgs...).
85-
Order(q.OrderBuilder.String())
84+
resultDb := GormDb.Model(new(T))
85+
86+
if len(q.DistinctColumns) > 0 {
87+
resultDb.Distinct(q.DistinctColumns)
88+
}
89+
90+
if len(q.SelectColumns) > 0 {
91+
resultDb.Select(q.SelectColumns)
92+
}
93+
94+
if q.QueryBuilder.Len() > 0 {
95+
resultDb.Where(q.QueryBuilder.String(), q.QueryArgs...)
96+
}
97+
98+
if q.OrderBuilder.Len() > 0 {
99+
resultDb.Order(q.OrderBuilder.String())
100+
}
86101

87102
if q.GroupBuilder.Len() > 0 {
88103
resultDb.Group(q.GroupBuilder.String())

gormplus/mapper_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ func TestSelectOne(t *testing.T) {
117117

118118
func TestSelectList(t *testing.T) {
119119
q := Query[Test1]{}
120-
q.Group("price", "code").Having("count(*) > ?", 1)
121120
db, result := SelectList(&q)
122121
fmt.Println(db.RowsAffected)
123122
for _, v := range result {

gormplus/query.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import (
77
)
88

99
type Query[T any] struct {
10-
Columns []string
11-
QueryBuilder strings.Builder
12-
QueryArgs []any
13-
OrderBuilder strings.Builder
14-
GroupBuilder strings.Builder
15-
HavingBuilder strings.Builder
16-
HavingArgs []any
17-
LastCond string
10+
SelectColumns []string
11+
DistinctColumns []string
12+
QueryBuilder strings.Builder
13+
QueryArgs []any
14+
OrderBuilder strings.Builder
15+
GroupBuilder strings.Builder
16+
HavingBuilder strings.Builder
17+
HavingArgs []any
18+
LastCond string
1819
}
1920

2021
func (q *Query[T]) Eq(column string, val any) *Query[T] {
@@ -76,6 +77,11 @@ func (q *Query[T]) In(column string, val ...any) *Query[T] {
7677
return q
7778
}
7879

80+
func (q *Query[T]) Distinct(column ...string) *Query[T] {
81+
q.DistinctColumns = column
82+
return q
83+
}
84+
7985
func (q *Query[T]) And() *Query[T] {
8086
q.QueryBuilder.WriteString(constants.And)
8187
q.QueryBuilder.WriteString(" ")
@@ -91,7 +97,7 @@ func (q *Query[T]) Or() *Query[T] {
9197
}
9298

9399
func (q *Query[T]) Select(columns ...string) *Query[T] {
94-
q.Columns = append(q.Columns, columns...)
100+
q.SelectColumns = append(q.SelectColumns, columns...)
95101
return q
96102
}
97103

0 commit comments

Comments
 (0)