Skip to content

Commit b76b9d4

Browse files
committed
feat: add having
1 parent fce92be commit b76b9d4

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

gormplus/mapper.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func DeleteByIds[T any](ids ...any) *gorm.DB {
4545

4646
func Delete[T any](q *Query[T]) *gorm.DB {
4747
var entity T
48-
resultDb := GormDb.Where(q.QueryBuilder.String(), q.Args...).Delete(&entity)
48+
resultDb := GormDb.Where(q.QueryBuilder.String(), q.QueryArgs...).Delete(&entity)
4949
return resultDb
5050
}
5151

@@ -57,7 +57,7 @@ func UpdateById[T any](id any, entity *T) *gorm.DB {
5757
}
5858

5959
func Update[T any](q *Query[T], entity *T) *gorm.DB {
60-
resultDb := GormDb.Where(q.QueryBuilder.String(), q.Args...).Updates(entity)
60+
resultDb := GormDb.Where(q.QueryBuilder.String(), q.QueryArgs...).Updates(entity)
6161
return resultDb
6262
}
6363

@@ -75,23 +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.Args...).First(&entity)
78+
resultDb := GormDb.Select(q.Columns).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.Args...).
84+
resultDb := GormDb.Select(q.Columns).Where(q.QueryBuilder.String(), q.QueryArgs...).
8585
Order(q.OrderBuilder.String())
86+
8687
if q.GroupBuilder.Len() > 0 {
8788
resultDb.Group(q.GroupBuilder.String())
8889
}
90+
91+
if q.HavingBuilder.Len() > 0 {
92+
resultDb.Having(q.HavingBuilder.String(), q.HavingArgs...)
93+
}
94+
8995
resultDb.Find(&results)
9096
return resultDb, results
9197
}
9298

9399
func SelectCount[T any](q *Query[T]) (*gorm.DB, int64) {
94100
var count int64
95-
resultDb := GormDb.Model(new(T)).Where(q.QueryBuilder.String(), q.Args...).Count(&count)
101+
resultDb := GormDb.Model(new(T)).Where(q.QueryBuilder.String(), q.QueryArgs...).Count(&count)
96102
return resultDb, count
97103
}

gormplus/mapper_test.go

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

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

gormplus/query.go

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

99
type Query[T any] struct {
10-
Columns []string
11-
OrderBuilder strings.Builder
12-
GroupBuilder strings.Builder
13-
QueryBuilder strings.Builder
14-
Args []any
15-
LastCond string
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
1618
}
1719

1820
func (q *Query[T]) Eq(column string, val any) *Query[T] {
@@ -113,6 +115,12 @@ func (q *Query[T]) Group(columns ...string) *Query[T] {
113115
return q
114116
}
115117

118+
func (q *Query[T]) Having(having string, args ...any) *Query[T] {
119+
q.HavingBuilder.WriteString(having)
120+
q.HavingArgs = append(q.HavingArgs, args)
121+
return q
122+
}
123+
116124
func (q *Query[T]) addCond(column string, val any, condType string) {
117125
if q.LastCond != constants.And && q.LastCond != constants.Or && q.QueryBuilder.Len() > 0 {
118126
q.QueryBuilder.WriteString(constants.And)
@@ -122,7 +130,7 @@ func (q *Query[T]) addCond(column string, val any, condType string) {
122130
q.QueryBuilder.WriteString(cond)
123131
q.QueryBuilder.WriteString(" ")
124132
q.LastCond = ""
125-
q.Args = append(q.Args, val)
133+
q.QueryArgs = append(q.QueryArgs, val)
126134
}
127135

128136
func (q *Query[T]) buildOrder(orderType string, columns ...string) {

0 commit comments

Comments
 (0)