refactor(be): move sql migration to separate file

This commit is contained in:
Denis Gukov 2022-01-23 20:36:32 +05:00
parent 0bc9aab31a
commit ae0a471c8d
2 changed files with 57 additions and 32 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/ansible-semaphore/semaphore/db" "github.com/ansible-semaphore/semaphore/db"
"github.com/ansible-semaphore/semaphore/db/sql/migrations"
"github.com/go-gorp/gorp/v3" "github.com/go-gorp/gorp/v3"
"regexp" "regexp"
"strings" "strings"
@ -63,17 +64,18 @@ func (d *SqlDb) prepareMigration(query string) string {
func (d *SqlDb) IsMigrationApplied(migration db.Migration) (bool, error) { func (d *SqlDb) IsMigrationApplied(migration db.Migration) (bool, error) {
exists, err := d.sql.SelectInt(d.prepareQuery("select count(1) as ex from migrations where migration=?"), migration.Version) exists, err := d.sql.SelectInt(d.prepareQuery("select count(1) as ex from migrations where migration=?"), migration.Version)
if err != nil { if err == nil {
fmt.Println("Creating migrations table") return exists > 0, nil
query := d.prepareMigration(initialSQL)
if _, err = d.exec(query); err != nil {
panic(err)
}
return d.IsMigrationApplied(migration)
} }
return exists > 0, nil fmt.Println("Creating migrations table")
query := d.prepareMigration(initialSQL)
_, err = d.exec(query)
if err != nil {
panic(err)
}
return d.IsMigrationApplied(migration)
} }
// ApplyMigration runs executes a database migration // ApplyMigration runs executes a database migration
@ -83,8 +85,8 @@ func (d *SqlDb) ApplyMigration(migration db.Migration) error {
return err return err
} }
query := getVersionSQL(getVersionPath(migration)) queries := getVersionSQL(getVersionPath(migration))
for i, query := range query { for i, query := range queries {
fmt.Printf("\r [%d/%d]", i+1, len(query)) fmt.Printf("\r [%d/%d]", i+1, len(query))
if len(query) == 0 { if len(query) == 0 {
@ -101,34 +103,19 @@ func (d *SqlDb) ApplyMigration(migration db.Migration) error {
} }
} }
if _, err := tx.Exec(d.prepareQuery("insert into migrations(migration, upgraded_date) values (?, ?)"), migration.Version, time.Now()); err != nil { _, err = tx.Exec(d.prepareQuery("insert into migrations(migration, upgraded_date) values (?, ?)"), migration.Version, time.Now())
if err != nil {
handleRollbackError(tx.Rollback()) handleRollbackError(tx.Rollback())
return err return err
} }
switch migration.Version { switch migration.Version {
case "2.8.26": case "2.8.26":
rows, err2 := d.sql.Query("SELECT id, git_url FROM project__repository") err = migrations.Migration_2_8_26{Sql: d.sql}.Apply()
if err2 == nil { }
defer rows.Close()
for rows.Next() {
var id, url string
err3 := rows.Scan(&id, &url) if err != nil {
if err3 != nil { return err
continue
}
branch := "master"
parts := strings.Split(url, "#")
if len(parts) > 1 {
url, branch = parts[0], parts[1]
}
_, _ = d.sql.Exec("UPDATE project__repository "+
"SET git_url = ?, git_branch = ? "+
"WHERE id = ?", url, branch, id)
}
}
} }
fmt.Println() fmt.Println()

View File

@ -0,0 +1,38 @@
package migrations
import (
"github.com/go-gorp/gorp/v3"
"strings"
)
type Migration_2_8_26 struct {
Sql *gorp.DbMap
}
func (m Migration_2_8_26) Apply() error {
rows, err := m.Sql.Query("SELECT id, git_url FROM project__repository")
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var id, url string
err3 := rows.Scan(&id, &url)
if err3 != nil {
continue
}
branch := "master"
parts := strings.Split(url, "#")
if len(parts) > 1 {
url, branch = parts[0], parts[1]
}
_, _ = m.Sql.Exec("UPDATE project__repository "+
"SET git_url = ?, git_branch = ? "+
"WHERE id = ?", url, branch, id)
}
return nil
}