forked from go-gorm/gen
/
serializer.go
90 lines (73 loc) · 3.09 KB
/
serializer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package field
import (
"context"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"reflect"
"gorm.io/gorm"
)
type ValuerType struct {
Column string
Value schema.SerializerValuerInterface
FucName string
}
func (v ValuerType) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr) {
stmt := db.Statement.Schema
field := stmt.LookUpField(v.Column)
newValue, err := v.Value.Value(context.WithValue(ctx, "func_name", v.FucName), field, reflect.ValueOf(v.Value), v.Value)
db.AddError(err)
return clause.Expr{SQL: "?", Vars: []interface{}{newValue}}
}
// Field2 a standard field struct
type Serializer struct{ expr }
// Eq judge equal
func (field Serializer) Eq(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Eq{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Eq"}}}
}
// Neq judge not equal
func (field Serializer) Neq(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Neq{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Neq"}}}
}
// In ...
func (field Serializer) In(values ...schema.SerializerValuerInterface) Expr {
return expr{e: clause.IN{Column: field.RawExpr(), Values: field.toSlice(values...)}}
}
// Gt ...
func (field Serializer) Gt(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Gt{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Gt"}}}
}
// Gte ...
func (field Serializer) Gte(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Gte{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Gte"}}}
}
// Lt ...
func (field Serializer) Lt(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Lt{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Lt"}}}
}
// Lte ...
func (field Serializer) Lte(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Lte{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Lte"}}}
}
// Like ...
func (field Serializer) Like(value schema.SerializerValuerInterface) Expr {
return expr{e: clause.Like{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Like"}}}
}
// Value ...
func (field Serializer) Value(value schema.SerializerValuerInterface) AssignExpr {
return field.value(ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Value"})
}
// Sum ...
func (field Serializer) Sum() Field {
return Field{field.sum()}
}
// IfNull ...
func (field Serializer) IfNull(value schema.SerializerValuerInterface) Expr {
return field.ifNull(ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "IfNull"})
}
func (field Serializer) toSlice(values ...schema.SerializerValuerInterface) []interface{} {
slice := make([]interface{}, len(values))
for i, v := range values {
slice[i] = ValuerType{Column: field.ColumnName().String(), Value: v, FucName: "In"}
}
return slice
}