github.com/aacfactory/fns-contrib/databases/sql@v1.2.84/dac/delete.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 Delete[T Table](ctx context.Context, entry T) (v T, ok bool, err error) { 12 entries := []T{entry} 13 _, query, arguments, buildErr := specifications.BuildDelete[T](ctx, entries) 14 if buildErr != nil { 15 err = errors.Warning("sql: delete failed").WithCause(buildErr) 16 return 17 } 18 19 result, execErr := sql.Execute(ctx, query, arguments...) 20 if execErr != nil { 21 err = errors.Warning("sql: delete failed").WithCause(execErr) 22 return 23 } 24 25 if ok = result.RowsAffected == 1; ok { 26 verErr := specifications.TrySetupAuditVersion[T](ctx, entries) 27 if verErr != nil { 28 err = errors.Warning("sql: delete failed").WithCause(verErr) 29 return 30 } 31 v = entry 32 } 33 return 34 } 35 36 func DeleteByCondition[T Table](ctx context.Context, cond conditions.Condition) (affected int64, err error) { 37 _, query, arguments, buildErr := specifications.BuildDeleteByCondition[T](ctx, specifications.Condition{Condition: cond}) 38 if buildErr != nil { 39 err = errors.Warning("sql: delete by condition failed").WithCause(buildErr) 40 return 41 } 42 43 result, execErr := sql.Execute(ctx, query, arguments...) 44 if execErr != nil { 45 err = errors.Warning("sql: delete by condition failed").WithCause(execErr) 46 return 47 } 48 49 affected = result.RowsAffected 50 return 51 }