Skip to content
Snippets Groups Projects
Select Git revision
  • 2fb8420b0ade42f185ebb9ea0e38e25cf2006cfb
  • master default protected
  • v1.23.2
  • v1.23.1
  • v1.23.0
  • v1.22.0
  • v1.21.1
  • v1.21.0
  • v1.20.3
  • v1.20.2
  • v1.20.1
  • v1.20.0
  • v1.19.4
  • v1.19.3
  • v1.19.2
  • v1.19.1
  • v1.19.0
  • v1.18.2
  • v1.18.1
  • v1.18.0
  • v1.17.0
  • v1.16.1
22 results

runnable-gorm.go

  • 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
    }