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  }