From 5cd6f8c9d0be16a22652729bcf576e5241bc5db7 Mon Sep 17 00:00:00 2001 From: Vojtech Vitek Date: Wed, 6 Mar 2019 01:20:06 -0500 Subject: [PATCH] Make this all work --- README.md | 2 +- cmd/goose/driver_mysql.go | 29 ++++++++++--------- cmd/goose/driver_no_mysql.go | 4 +-- .../{driver_psql.go => driver_postgres.go} | 2 +- .../{driver_sqlite.go => driver_sqlite3.go} | 2 +- cmd/goose/main.go | 2 +- goose_test.go | 10 +++---- 7 files changed, 27 insertions(+), 24 deletions(-) rename cmd/goose/{driver_psql.go => driver_postgres.go} (68%) rename cmd/goose/{driver_sqlite.go => driver_sqlite3.go} (72%) diff --git a/README.md b/README.md index 0333aae..c802843 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ This will install the `goose` binary to your `$GOPATH/bin` directory. For a lite version of the binary without DB connection dependent commands, use the exclusive build tags: - $ go build -tags='no_mysql no_sqlite no_psql' -i -o goose ./cmd/goose + $ go build -tags='no_postgres no_mysql no_sqlite3' -i -o goose ./cmd/goose # Usage diff --git a/cmd/goose/driver_mysql.go b/cmd/goose/driver_mysql.go index d5071f8..3fa0126 100644 --- a/cmd/goose/driver_mysql.go +++ b/cmd/goose/driver_mysql.go @@ -1,4 +1,4 @@ -// +build mysql +// +build !no_mysql package main @@ -15,19 +15,22 @@ import ( // the parameter `parseTime` set to true. This allows internal goose logic // to assume that DATETIME/DATE/TIMESTAMP can be scanned into the time.Time // type. -func normalizeDBString(str string) string { - var err error - str, err = normalizeMySQLDSN(dns string) - if err != nil { - log.Fatalf("failed to normalize MySQL connection string: %v", err) +func normalizeDBString(driver string, str string) string { + if driver == "mysql" { + var err error + str, err = normalizeMySQLDSN(str) + if err != nil { + log.Fatalf("failed to normalize MySQL connection string: %v", err) + } } + return str } -func normalizeMySQLDSN(dns string) (string, error) { - config, err := mysql.ParseDSN(dsn) - if err != nil { - return "", err - } - config.ParseTime = true - return config.FormatDSN(), nil +func normalizeMySQLDSN(dsn string) (string, error) { + config, err := mysql.ParseDSN(dsn) + if err != nil { + return "", err + } + config.ParseTime = true + return config.FormatDSN(), nil } diff --git a/cmd/goose/driver_no_mysql.go b/cmd/goose/driver_no_mysql.go index 2ed6346..a18ccff 100644 --- a/cmd/goose/driver_no_mysql.go +++ b/cmd/goose/driver_no_mysql.go @@ -1,4 +1,4 @@ -// +build !mysql +// +build no_mysql package main @@ -7,6 +7,6 @@ import ( _ "github.com/ziutek/mymysql/godrv" ) -func normalizeDBString(str string) string { +func normalizeDBString(driver string, str string) string { return str } diff --git a/cmd/goose/driver_psql.go b/cmd/goose/driver_postgres.go similarity index 68% rename from cmd/goose/driver_psql.go rename to cmd/goose/driver_postgres.go index 1a8e50e..d8f5745 100644 --- a/cmd/goose/driver_psql.go +++ b/cmd/goose/driver_postgres.go @@ -1,4 +1,4 @@ -// +build !no_pq +// +build !no_postgres package main diff --git a/cmd/goose/driver_sqlite.go b/cmd/goose/driver_sqlite3.go similarity index 72% rename from cmd/goose/driver_sqlite.go rename to cmd/goose/driver_sqlite3.go index a790a19..37a4eee 100644 --- a/cmd/goose/driver_sqlite.go +++ b/cmd/goose/driver_sqlite3.go @@ -1,4 +1,4 @@ -// +build !no_sqlite +// +build !no_sqlite3 package main diff --git a/cmd/goose/main.go b/cmd/goose/main.go index 48f07bd..f6e6707 100644 --- a/cmd/goose/main.go +++ b/cmd/goose/main.go @@ -55,7 +55,7 @@ func main() { driver, dbstring, command := args[0], args[1], args[2] - db, err := goose.OpenDBWithDriver(driver, normalizeDBString(dbstring)) + db, err := goose.OpenDBWithDriver(driver, normalizeDBString(driver, dbstring)) if err != nil { log.Fatalf("-dbstring=%q: %v\n", dbstring, err) } diff --git a/goose_test.go b/goose_test.go index e219aa6..b453880 100644 --- a/goose_test.go +++ b/goose_test.go @@ -47,20 +47,20 @@ func TestLiteBinary(t *testing.T) { t.Fatal(err) } - defer os.RemoveAll(dir) // clean up - defer os.Remove("./bin/light-goose") // clean up + defer os.RemoveAll(dir) // clean up + defer os.Remove("./bin/lite-goose") // clean up // this has to be done outside of the loop // since go only supports space separated tags list. - cmd := exec.Command("go", "build", "-tags='no_mysql no_sqlite no_psql'", "-o", "./bin/light-goose", "./cmd/goose") + cmd := exec.Command("go", "build", "-tags='no_postgres no_mysql no_sqlite3'", "-o", "./bin/lite-goose", "./cmd/goose") out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("%s:\n%v\n\n%s", err, cmd, out) } commands := []string{ - fmt.Sprintf("./bin/light-goose -dir=%s create user_indices sql", dir), - fmt.Sprintf("./bin/light-goose -dir=%s fix", dir), + fmt.Sprintf("./bin/lite-goose -dir=%s create user_indices sql", dir), + fmt.Sprintf("./bin/lite-goose -dir=%s fix", dir), } for _, cmd := range commands {