From 708863fd33423bb8734ad77b34624c4419f0809f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 14 Feb 2021 16:01:31 +0100 Subject: [PATCH] fix: broken migration on postgres (resolve #127) --- ...06_drop_badges_column_add_sharing_flags.go | 2 +- migrations/20210213_add_has_data_field.go | 25 +++++++++++++++++-- version.txt | 2 +- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/migrations/20210206_drop_badges_column_add_sharing_flags.go b/migrations/20210206_drop_badges_column_add_sharing_flags.go index aa1008a..27f0fc7 100644 --- a/migrations/20210206_drop_badges_column_add_sharing_flags.go +++ b/migrations/20210206_drop_badges_column_add_sharing_flags.go @@ -14,7 +14,7 @@ func init() { migrator := db.Migrator() if !migrator.HasColumn(&models.User{}, "badges_enabled") { - // empty database, nothing to migrate + // empty database or already migrated, nothing to migrate return nil } diff --git a/migrations/20210213_add_has_data_field.go b/migrations/20210213_add_has_data_field.go index 7a83bb2..c4c9a4f 100644 --- a/migrations/20210213_add_has_data_field.go +++ b/migrations/20210213_add_has_data_field.go @@ -1,17 +1,38 @@ package migrations import ( + "github.com/emvi/logbuch" "github.com/muety/wakapi/config" + "github.com/muety/wakapi/models" "gorm.io/gorm" ) func init() { + const name = "20210213-add_has_data_field" f := migrationFunc{ - name: "20210213_add_has_data_field", + name: name, f: func(db *gorm.DB, cfg *config.Config) error { - if err := db.Exec("UPDATE users SET has_data = TRUE WHERE 1").Error; err != nil { + condition := "key = ?" + if cfg.Db.Dialect == config.SQLDialectMysql { + condition = "`key` = ?" + } + lookupResult := db.Where(condition, name).First(&models.KeyStringValue{}) + if lookupResult.Error == nil && lookupResult.RowsAffected > 0 { + logbuch.Info("no need to migrate '%s'", name) + return nil + } + + if err := db.Exec("UPDATE users SET has_data = TRUE WHERE TRUE").Error; err != nil { return err } + + if err := db.Create(&models.KeyStringValue{ + Key: name, + Value: "done", + }).Error; err != nil { + return err + } + return nil }, } diff --git a/version.txt b/version.txt index d437046..3e940eb 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.24.0 \ No newline at end of file +1.24.1 \ No newline at end of file