github.com/aacfactory/fns-contrib/databases/sql@v1.2.84/dac/update.go (about) 1 package dac 2 3 import ( 4 "github.com/aacfactory/errors" 5 "github.com/aacfactory/fns-contrib/databases/sql" 6 "github.com/aacfactory/fns-contrib/databases/sql/dac/conditions" 7 "github.com/aacfactory/fns-contrib/databases/sql/dac/specifications" 8 "github.com/aacfactory/fns/context" 9 ) 10 11 func Update[T Table](ctx context.Context, entry T) (v T, ok bool, err error) { 12 entries := []T{entry} 13 _, query, arguments, buildErr := specifications.BuildUpdate[T](ctx, entries) 14 if buildErr != nil { 15 err = errors.Warning("sql: update failed").WithCause(buildErr) 16 return 17 } 18 result, execErr := sql.Execute(ctx, query, arguments...) 19 if execErr != nil { 20 err = errors.Warning("sql: update failed").WithCause(execErr) 21 return 22 } 23 if ok = result.RowsAffected == 1; ok { 24 verErr := specifications.TrySetupAuditVersion[T](ctx, entries) 25 if verErr != nil { 26 err = errors.Warning("sql: update failed").WithCause(verErr) 27 return 28 } 29 v = entries[0] 30 } 31 return 32 } 33 34 func Field(name string, value any) FieldValues { 35 return FieldValues{{name, value}} 36 } 37 38 type FieldValues []specifications.FieldValue 39 40 func (fields FieldValues) Field(name string, value any) FieldValues { 41 return append(fields, specifications.FieldValue{ 42 Name: name, Value: value, 43 }) 44 } 45 46 func UpdateFields[T Table](ctx context.Context, fields FieldValues, cond conditions.Condition) (affected int64, err error) { 47 _, query, arguments, buildErr := specifications.BuildUpdateFields[T](ctx, fields, specifications.Condition{Condition: cond}) 48 if buildErr != nil { 49 err = errors.Warning("sql: update fields failed").WithCause(buildErr) 50 return 51 } 52 result, execErr := sql.Execute(ctx, query, arguments...) 53 if execErr != nil { 54 err = errors.Warning("sql: update fields failed").WithCause(execErr) 55 return 56 } 57 affected = result.RowsAffected 58 return 59 }