Select Git revision
monster.iml
runnable-gorm.go 962 B
package jobqueue
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// DBResult is a result of a db query
type DBResult struct {
RowsAffected int
}
type DBRunnable struct {
Type string
DSN string
Query string
db *gorm.DB // internal for testing
}
func (d *DBRunnable) Run() (RunResult[DBResult], error) {
var db *gorm.DB
var err error
if d.db == nil {
switch d.Type {
case "mysql":
db, err = gorm.Open(mysql.Open(d.DSN), &gorm.Config{})
default:
return RunResult[DBResult]{Status: ResultStatusFailed}, ErrUnsupportedDatabaseType
}
} else {
db = d.db
}
if err != nil {
return RunResult[DBResult]{Status: ResultStatusFailed}, err
}
var result *gorm.DB
result = db.Exec(d.Query)
if result.Error != nil {
return RunResult[DBResult]{Status: ResultStatusFailed}, result.Error
}
return RunResult[DBResult]{
Status: ResultStatusSuccess,
Data: DBResult{
RowsAffected: int(result.RowsAffected),
},
}, nil
}