Skip to content

Commit c56e4e2

Browse files
authored
feat: function.go add in method (#48)
1 parent f503347 commit c56e4e2

File tree

3 files changed

+165
-90
lines changed

3 files changed

+165
-90
lines changed

gplus/dao.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func DeleteByIds[T any](ids any, opts ...OptionFunc) *gorm.DB {
102102
func Delete[T any](q *QueryCond[T], opts ...OptionFunc) *gorm.DB {
103103
db := getDb(opts...)
104104
var entity T
105-
resultDb := db.Where(q.QueryBuilder.String(), q.QueryArgs...).Delete(&entity)
105+
resultDb := db.Where(q.queryBuilder.String(), q.queryArgs...).Delete(&entity)
106106
return resultDb
107107
}
108108

@@ -114,7 +114,7 @@ func DeleteByMap[T any](q *QueryCond[T], opts ...OptionFunc) *gorm.DB {
114114
q.Eq(columnName, v)
115115
}
116116
var entity T
117-
resultDb := db.Where(q.QueryBuilder.String(), q.QueryArgs...).Delete(&entity)
117+
resultDb := db.Where(q.queryBuilder.String(), q.queryArgs...).Delete(&entity)
118118
return resultDb
119119
}
120120

@@ -128,7 +128,7 @@ func UpdateById[T any](entity *T, opts ...OptionFunc) *gorm.DB {
128128
// Update 根据 Map 更新
129129
func Update[T any](q *QueryCond[T], opts ...OptionFunc) *gorm.DB {
130130
db := getDb(opts...)
131-
resultDb := db.Model(new(T)).Where(q.QueryBuilder.String(), q.QueryArgs...).Updates(&q.UpdateMap)
131+
resultDb := db.Model(new(T)).Where(q.queryBuilder.String(), q.queryArgs...).Updates(&q.updateMap)
132132
return resultDb
133133
}
134134

@@ -287,27 +287,27 @@ func buildCondition[T any](q *QueryCond[T], opts ...OptionFunc) *gorm.DB {
287287
db := getDb(opts...)
288288
resultDb := db.Model(new(T))
289289
if q != nil {
290-
if len(q.DistinctColumns) > 0 {
291-
resultDb.Distinct(q.DistinctColumns)
290+
if len(q.distinctColumns) > 0 {
291+
resultDb.Distinct(q.distinctColumns)
292292
}
293293

294-
if len(q.SelectColumns) > 0 {
295-
resultDb.Select(q.SelectColumns)
294+
if len(q.selectColumns) > 0 {
295+
resultDb.Select(q.selectColumns)
296296
}
297297

298-
if q.QueryBuilder.Len() > 0 {
298+
if q.queryBuilder.Len() > 0 {
299299

300-
if q.AndBracketBuilder.Len() > 0 {
301-
q.QueryArgs = append(q.QueryArgs, q.AndBracketArgs...)
302-
q.QueryBuilder.WriteString(q.AndBracketBuilder.String())
300+
if q.andBracketBuilder.Len() > 0 {
301+
q.queryArgs = append(q.queryArgs, q.andBracketArgs...)
302+
q.queryBuilder.WriteString(q.andBracketBuilder.String())
303303
}
304304

305-
if q.OrBracketBuilder.Len() > 0 {
306-
q.QueryArgs = append(q.QueryArgs, q.OrBracketArgs...)
307-
q.QueryBuilder.WriteString(q.OrBracketBuilder.String())
305+
if q.orBracketBuilder.Len() > 0 {
306+
q.queryArgs = append(q.queryArgs, q.orBracketArgs...)
307+
q.queryBuilder.WriteString(q.orBracketBuilder.String())
308308
}
309309

310-
resultDb.Where(q.QueryBuilder.String(), q.QueryArgs...)
310+
resultDb.Where(q.queryBuilder.String(), q.queryArgs...)
311311
}
312312

313313
if len(q.ConditionMap) > 0 {
@@ -319,16 +319,16 @@ func buildCondition[T any](q *QueryCond[T], opts ...OptionFunc) *gorm.DB {
319319
resultDb.Where(condMap)
320320
}
321321

322-
if q.OrderBuilder.Len() > 0 {
323-
resultDb.Order(q.OrderBuilder.String())
322+
if q.orderBuilder.Len() > 0 {
323+
resultDb.Order(q.orderBuilder.String())
324324
}
325325

326-
if q.GroupBuilder.Len() > 0 {
327-
resultDb.Group(q.GroupBuilder.String())
326+
if q.groupBuilder.Len() > 0 {
327+
resultDb.Group(q.groupBuilder.String())
328328
}
329329

330-
if q.HavingBuilder.Len() > 0 {
331-
resultDb.Having(q.HavingBuilder.String(), q.HavingArgs...)
330+
if q.havingBuilder.Len() > 0 {
331+
resultDb.Having(q.havingBuilder.String(), q.havingArgs...)
332332
}
333333
}
334334
return resultDb

gplus/function.go

Lines changed: 85 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,102 @@
1717

1818
package gplus
1919

20-
import "github.com/acmestack/gorm-plus/constants"
20+
import (
21+
"github.com/acmestack/gorm-plus/constants"
22+
"strings"
23+
)
2124

22-
func As(columnName any, asName any) string {
23-
return getColumnName(columnName) + " " + constants.As + " " + getColumnName(asName)
25+
type Function struct {
26+
funStr string
2427
}
2528

26-
func SumAs(columnName any, asName any) string {
27-
return buildFunction(constants.SUM, getColumnName(columnName), getColumnName(asName))
29+
func (f *Function) As(asName any) string {
30+
return f.funStr + " " + constants.As + " " + getColumnName(asName)
2831
}
2932

30-
func AvgAs(columnName any, asName any) string {
31-
return buildFunction(constants.AVG, getColumnName(columnName), getColumnName(asName))
33+
func (f *Function) Eq(value int64) (string, int64) {
34+
return buildFunStr(f.funStr, constants.Eq, value)
3235
}
3336

34-
func MaxAs(columnName any, asName any) string {
35-
return buildFunction(constants.MAX, getColumnName(columnName), getColumnName(asName))
37+
func (f *Function) Ne(value int64) (string, int64) {
38+
return buildFunStr(f.funStr, constants.Ne, value)
3639
}
3740

38-
func MinAs(columnName any, asName any) string {
39-
return buildFunction(constants.MIN, getColumnName(columnName), getColumnName(asName))
41+
func (f *Function) Gt(value int64) (string, int64) {
42+
return buildFunStr(f.funStr, constants.Gt, value)
4043
}
4144

42-
func CountAs(columnName any, asName any) string {
43-
return buildFunction(constants.COUNT, getColumnName(columnName), getColumnName(asName))
45+
func (f *Function) Ge(value int64) (string, int64) {
46+
return buildFunStr(f.funStr, constants.Ge, value)
4447
}
4548

46-
func buildFunction(function string, columnNameStr string, asNameStr string) string {
47-
columnNameStr = function + constants.LeftBracket + columnNameStr + constants.RightBracket +
48-
" " + constants.As + " " + asNameStr
49-
return columnNameStr
49+
func (f *Function) Lt(value int64) (string, int64) {
50+
return buildFunStr(f.funStr, constants.Lt, value)
51+
}
52+
53+
func (f *Function) Le(value int64) (string, int64) {
54+
return buildFunStr(f.funStr, constants.Le, value)
55+
}
56+
57+
func (f *Function) In(values ...any) (string, []any) {
58+
// 构建占位符
59+
placeholder := buildPlaceholder(values)
60+
return f.funStr + " " + constants.In + placeholder.String(), values
61+
}
62+
63+
func (f *Function) NotIn(values ...any) (string, []any) {
64+
// 构建占位符
65+
placeholder := buildPlaceholder(values)
66+
return f.funStr + " " + constants.Not + " " + constants.In + placeholder.String(), values
67+
}
68+
69+
func (f *Function) Between(start int64, end int64) (string, int64, int64) {
70+
return f.funStr + " " + constants.Between + " ? and ?", start, end
71+
}
72+
73+
func (f *Function) NotBetween(start int64, end int64) (string, int64, int64) {
74+
return f.funStr + " " + constants.Not + " " + constants.Between + " ? and ?", start, end
75+
}
76+
77+
func Sum(columnName any) *Function {
78+
return &Function{funStr: addBracket(constants.SUM, getColumnName(columnName))}
79+
}
80+
81+
func Avg(columnName any) *Function {
82+
return &Function{funStr: addBracket(constants.AVG, getColumnName(columnName))}
83+
}
84+
85+
func Max(columnName any) *Function {
86+
return &Function{funStr: addBracket(constants.MAX, getColumnName(columnName))}
87+
}
88+
89+
func Min(columnName any) *Function {
90+
return &Function{funStr: addBracket(constants.MIN, getColumnName(columnName))}
91+
}
92+
93+
func Count(columnName any) *Function {
94+
return &Function{funStr: addBracket(constants.COUNT, getColumnName(columnName))}
95+
}
96+
97+
func addBracket(function string, columnNameStr string) string {
98+
return function + constants.LeftBracket + columnNameStr + constants.RightBracket
99+
}
100+
101+
func buildFunStr(funcStr string, typeStr string, value int64) (string, int64) {
102+
return funcStr + " " + typeStr + " ?", value
103+
}
104+
105+
func buildPlaceholder(values []any) strings.Builder {
106+
var placeholder strings.Builder
107+
placeholder.WriteString(constants.LeftBracket)
108+
for i := 0; i < len(values); i++ {
109+
if i == len(values)-1 {
110+
placeholder.WriteString("?")
111+
placeholder.WriteString(constants.RightBracket)
112+
break
113+
}
114+
placeholder.WriteString("?")
115+
placeholder.WriteString(",")
116+
}
117+
return placeholder
50118
}

0 commit comments

Comments
 (0)