From a6bac777d913d622e3179d84885a1a034a17da9f Mon Sep 17 00:00:00 2001 From: Sagleft Date: Wed, 22 Sep 2021 22:10:30 +0400 Subject: [PATCH] split sql scripts --- migrate.go | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/migrate.go b/migrate.go index 0c77213..cfa9862 100644 --- a/migrate.go +++ b/migrate.go @@ -4,6 +4,7 @@ import ( "errors" "io/ioutil" "path/filepath" + "strings" ) // NewMigrationHandler - create new migration handler. @@ -95,7 +96,31 @@ func (m *MigrationHandler) runScript(scriptName string) error { return err } - // EXEC SCRIPT + // split script + scriptsQuery := strings.Split(string(fileBytes), ";") + for _, sqlQuery := range scriptsQuery { + // EXEC SCRIPT + err := m.runTx(sqlQuery) + if err != nil { + return err + } + } + + // update version + sqlQuery := "INSERT INTO " + versionsTableName + " SET name=?" + _, err = m.Data.DBDriver.Exec(sqlQuery, scriptName) + if err != nil { + return errors.New("failed to exec query: " + err.Error()) + } + return nil +} + +func (m *MigrationHandler) runTx(sqlQuery string) error { + if sqlQuery == "" { + // skip empty script + return nil + } + // begin tx tx, err := m.Data.DBDriver.Begin() if err != nil { @@ -103,7 +128,7 @@ func (m *MigrationHandler) runScript(scriptName string) error { } // exec query - _, err = tx.Exec(string(fileBytes)) + _, err = tx.Exec(sqlQuery) if err != nil { return errors.New("failed to exec script: " + err.Error()) } @@ -114,13 +139,6 @@ func (m *MigrationHandler) runScript(scriptName string) error { tx.Rollback() return errors.New("failed to commit tx: " + err.Error()) } - - // update version - sqlQuery := "INSERT INTO " + versionsTableName + " SET name=?" - _, err = m.Data.DBDriver.Exec(sqlQuery, scriptName) - if err != nil { - return errors.New("failed to exec query: " + err.Error()) - } return nil }