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  }