Skip to content

Commit 78b4167

Browse files
committed
feat: add set update column helper
1 parent 75fa74e commit 78b4167

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

module_sqlagent.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ func InsertModelBuilder(into string, model interface{}, ignoreColumns ...string)
4747
return defaultAgent.InsertModelBuilder(into, model, ignoreColumns...)
4848
}
4949

50+
func SetUpdateColumns(updateBuilder sq.UpdateBuilder, model interface{}, ignoreColumns ...string) sq.UpdateBuilder {
51+
return defaultAgent.SetUpdateColumns(updateBuilder, model, ignoreColumns...)
52+
}
53+
5054
// ExecContext exec sql built by sq.InsertBuilder/sq.UpdateBuilder/sq.DeleteBuilder and return result.
5155
// builder: sq.InsertBuilder, sq.UpdateBuilder or sq.DeleteBuilder
5256
func ExecContext(ctx context.Context, builder sq.Sqlizer) (sql.Result, error) {

sqlagent.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,23 @@ func (a *SqlAgent) InsertModelBuilder(into string, model interface{}, ignoreColu
119119
return builder
120120
}
121121

122+
func (a *SqlAgent) SetUpdateColumns(updateBuilder sq.UpdateBuilder, model interface{}, ignoreColumns ...string) sq.UpdateBuilder {
123+
fieldMap := a.db.Mapper.TypeMap(reflect.TypeOf(model))
124+
valueMap := a.db.Mapper.FieldMap(reflect.ValueOf(model).Elem())
125+
clauses := make(map[string]interface{})
126+
127+
for _, v := range fieldMap.Index {
128+
name := v.Name
129+
if isIgnoreFields(name, ignoreColumns) {
130+
continue
131+
}
132+
if data, ok := valueMap[name]; ok {
133+
clauses[name] = data.Interface()
134+
}
135+
}
136+
return updateBuilder.SetMap(clauses)
137+
}
138+
122139
// ExecContext exec sql built by sq.InsertBuilder/sq.UpdateBuilder/sq.DeleteBuilder and return result.
123140
// builder: sq.InsertBuilder, sq.UpdateBuilder or sq.DeleteBuilder
124141
func (a *SqlAgent) ExecContext(ctx context.Context, builder sq.Sqlizer) (sql.Result, error) {

0 commit comments

Comments
 (0)