This commit is contained in:
+55
-1
@@ -172,7 +172,7 @@ func NewUpdate[T any](orm *simpleorm.ORM, toUpdate T) (Update[T], error) {
|
||||
}
|
||||
|
||||
func (u Update[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
|
||||
dml, err := u.target.GetUpdateDML(u.toUpdate)
|
||||
dml, err := u.target.GetUpdateDML()
|
||||
if err != nil {
|
||||
return []T{}, err
|
||||
}
|
||||
@@ -206,6 +206,60 @@ func (u Update[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
|
||||
return []T{u.toUpdate}, nil
|
||||
}
|
||||
|
||||
type Delete[T any] struct {
|
||||
target schema.Table
|
||||
toDelete []T
|
||||
}
|
||||
|
||||
func NewDelete[T any](orm *simpleorm.ORM, toDelete []T) (Delete[T], error) {
|
||||
table, ok := orm.Cache().Get(reflect.TypeFor[T]().Name())
|
||||
if !ok {
|
||||
return Delete[T]{}, errors.New("Failed to get table from schema cache")
|
||||
}
|
||||
|
||||
return Delete[T]{target: *table, toDelete: toDelete}, nil
|
||||
}
|
||||
|
||||
func (d Delete[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
|
||||
count := len(d.toDelete)
|
||||
dml, err := d.target.GetDeleteDML(count)
|
||||
if err != nil {
|
||||
return []T{}, err
|
||||
}
|
||||
|
||||
var params []any
|
||||
|
||||
for _, del := range d.toDelete {
|
||||
pkCols, err := getPk(del, d.target)
|
||||
if err != nil {
|
||||
return []T{}, err
|
||||
}
|
||||
|
||||
for _, pk := range pkCols {
|
||||
params = append(params, pk)
|
||||
}
|
||||
}
|
||||
|
||||
log.LogInfo("%s [%s]", dml, params)
|
||||
|
||||
stmt, err := conn.Prepare(dml)
|
||||
if err != nil {
|
||||
return []T{}, err
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
result, err := stmt.Exec(params...)
|
||||
if err != nil {
|
||||
return []T{}, err
|
||||
} else {
|
||||
rowsAffected, _ := result.RowsAffected()
|
||||
log.LogInfo("Deleted %s row", rowsAffected)
|
||||
}
|
||||
|
||||
return d.toDelete, nil
|
||||
|
||||
}
|
||||
|
||||
func createSelectResultContainer(t schema.Table) []any {
|
||||
vals := make([]any, t.Type.NumField())
|
||||
for i := range vals {
|
||||
|
||||
Reference in New Issue
Block a user