From 7b7eaf1c29c8fe7ea6f6630b0e585ea85ce3698d Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 17 Dec 2018 09:08:30 +0100 Subject: [PATCH 1/4] Add verbose option to print executed sql statements --- cmd/goose/main.go | 9 +++++++-- goose.go | 18 ++++++++++++++++++ migration_sql.go | 18 ++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/cmd/goose/main.go b/cmd/goose/main.go index a247476..607ef70 100644 --- a/cmd/goose/main.go +++ b/cmd/goose/main.go @@ -10,8 +10,9 @@ import ( ) var ( - flags = flag.NewFlagSet("goose", flag.ExitOnError) - dir = flags.String("dir", ".", "directory with migration files") + flags = flag.NewFlagSet("goose", flag.ExitOnError) + dir = flags.String("dir", ".", "directory with migration files") + verbose = flags.Bool("v", false, "enable verbose mode") ) func main() { @@ -24,6 +25,10 @@ func main() { return } + if *verbose { + goose.SetVerbosity(goose.VerboseOn) + } + switch args[0] { case "create": if err := goose.Run("create", nil, *dir, args[1:]...); err != nil { diff --git a/goose.go b/goose.go index ff4b5e8..710ba80 100644 --- a/goose.go +++ b/goose.go @@ -3,17 +3,35 @@ package goose import ( "database/sql" "fmt" + "regexp" "strconv" "sync" ) +// VerboseLevel verbose level of the goose library +type VerboseLevel int + +const ( + // VerboseOff disable the log of the executed SQL statements + VerboseOff VerboseLevel = iota + 1 + // VerboseOn log the executed SQL statements + VerboseOn +) + var ( duplicateCheckOnce sync.Once minVersion = int64(0) maxVersion = int64((1 << 63) - 1) timestampFormat = "20060102150405" + verbose = VerboseOff + reMatchSQLComments = regexp.MustCompile(`(--.*)|(((\/\*)+?[\w\W]+?(\*\/)+))`) ) +// SetVerbosity defines the goose verbose level +func SetVerbosity(vl VerboseLevel) { + verbose = vl +} + // Run runs a goose command. func Run(command string, db *sql.DB, dir string, args ...string) error { switch command { diff --git a/migration_sql.go b/migration_sql.go index 0f4f48e..3702b0e 100644 --- a/migration_sql.go +++ b/migration_sql.go @@ -153,13 +153,17 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err if useTx { // TRANSACTION. + printInfo("Begin transaction\n") + tx, err := db.Begin() if err != nil { log.Fatal(err) } for _, query := range statements { + printInfo("Executing statement : %s\n", cleanStatement(query)) if _, err = tx.Exec(query); err != nil { + printInfo("Rollback transaction\n") tx.Rollback() return err } @@ -167,21 +171,25 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err if direction { if _, err := tx.Exec(GetDialect().insertVersionSQL(), v, direction); err != nil { + printInfo("Rollback transaction\n") tx.Rollback() return err } } else { if _, err := tx.Exec(GetDialect().deleteVersionSQL(), v); err != nil { + printInfo("Rollback transaction\n") tx.Rollback() return err } } + printInfo("Commit transaction\n") return tx.Commit() } // NO TRANSACTION. for _, query := range statements { + printInfo("Executing statement : %s\n", cleanStatement(query)) if _, err := db.Exec(query); err != nil { return err } @@ -192,3 +200,13 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err return nil } + +func printInfo(s string, args ...interface{}) { + if verbose == VerboseOn { + log.Printf(s, args...) + } +} + +func cleanStatement(s string) string { + return reMatchSQLComments.ReplaceAllString(s, ``) +} From b935f725d39f48a95d4b149de7524c0194487ceb Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 18 Dec 2018 16:08:33 +0100 Subject: [PATCH 2/4] Use VerboseMode as boolean + Display block comments --- goose.go | 18 +++++++++--------- migration_sql.go | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/goose.go b/goose.go index 710ba80..aaca01a 100644 --- a/goose.go +++ b/goose.go @@ -8,14 +8,14 @@ import ( "sync" ) -// VerboseLevel verbose level of the goose library -type VerboseLevel int +// VerboseMode is the goose verbosity +type VerboseMode bool const ( - // VerboseOff disable the log of the executed SQL statements - VerboseOff VerboseLevel = iota + 1 - // VerboseOn log the executed SQL statements - VerboseOn + // VerboseOn is the goose verbose mode + VerboseOn VerboseMode = true + // VerboseOff is the goose silent mode + VerboseOff VerboseMode = false ) var ( @@ -24,11 +24,11 @@ var ( maxVersion = int64((1 << 63) - 1) timestampFormat = "20060102150405" verbose = VerboseOff - reMatchSQLComments = regexp.MustCompile(`(--.*)|(((\/\*)+?[\w\W]+?(\*\/)+))`) + reMatchSQLComments = regexp.MustCompile(`(--.*)`) ) -// SetVerbosity defines the goose verbose level -func SetVerbosity(vl VerboseLevel) { +// SetVerbosity defines the goose verbosity +func SetVerbosity(vl VerboseMode) { verbose = vl } diff --git a/migration_sql.go b/migration_sql.go index 3702b0e..7eb9348 100644 --- a/migration_sql.go +++ b/migration_sql.go @@ -202,7 +202,7 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err } func printInfo(s string, args ...interface{}) { - if verbose == VerboseOn { + if verbose { log.Printf(s, args...) } } From f640a5cb1b69b59ee9ea90959d58dfa238730eba Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 18 Dec 2018 16:13:56 +0100 Subject: [PATCH 3/4] Clarify the verbose expected value --- migration_sql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migration_sql.go b/migration_sql.go index 7eb9348..3702b0e 100644 --- a/migration_sql.go +++ b/migration_sql.go @@ -202,7 +202,7 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err } func printInfo(s string, args ...interface{}) { - if verbose { + if verbose == VerboseOn { log.Printf(s, args...) } } From 0e09297902743ea0052dd0bd1f3ced55ac3e7b6d Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 21 Dec 2018 14:24:46 +0100 Subject: [PATCH 4/4] Remove verbose custom type --- cmd/goose/main.go | 2 +- goose.go | 18 ++++-------------- migration_sql.go | 2 +- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/cmd/goose/main.go b/cmd/goose/main.go index 607ef70..b734eef 100644 --- a/cmd/goose/main.go +++ b/cmd/goose/main.go @@ -26,7 +26,7 @@ func main() { } if *verbose { - goose.SetVerbosity(goose.VerboseOn) + goose.SetVerbose(true) } switch args[0] { diff --git a/goose.go b/goose.go index aaca01a..b83c778 100644 --- a/goose.go +++ b/goose.go @@ -8,28 +8,18 @@ import ( "sync" ) -// VerboseMode is the goose verbosity -type VerboseMode bool - -const ( - // VerboseOn is the goose verbose mode - VerboseOn VerboseMode = true - // VerboseOff is the goose silent mode - VerboseOff VerboseMode = false -) - var ( duplicateCheckOnce sync.Once minVersion = int64(0) maxVersion = int64((1 << 63) - 1) timestampFormat = "20060102150405" - verbose = VerboseOff + verbose = false reMatchSQLComments = regexp.MustCompile(`(--.*)`) ) -// SetVerbosity defines the goose verbosity -func SetVerbosity(vl VerboseMode) { - verbose = vl +// SetVerbose set the goose verbosity mode +func SetVerbose(v bool) { + verbose = v } // Run runs a goose command. diff --git a/migration_sql.go b/migration_sql.go index 3702b0e..7eb9348 100644 --- a/migration_sql.go +++ b/migration_sql.go @@ -202,7 +202,7 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err } func printInfo(s string, args ...interface{}) { - if verbose == VerboseOn { + if verbose { log.Printf(s, args...) } }