From 94377a8dea66f70fb4df8af5cb0f3914e87b887b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 2 Oct 2022 11:31:32 +0200 Subject: [PATCH] fix: summary items id type (see #416) --- migrations/20221002_fix_summary_id_types.go | 77 +++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 migrations/20221002_fix_summary_id_types.go diff --git a/migrations/20221002_fix_summary_id_types.go b/migrations/20221002_fix_summary_id_types.go new file mode 100644 index 0000000..b05866d --- /dev/null +++ b/migrations/20221002_fix_summary_id_types.go @@ -0,0 +1,77 @@ +package migrations + +import ( + "github.com/muety/wakapi/config" + "github.com/muety/wakapi/models" + "gorm.io/gorm" + "strings" +) + +// fix for https://github.com/muety/wakapi/issues/416 + +func init() { + const name = "20221002-fix_summary_id_types" + + f := migrationFunc{ + name: name, + f: func(db *gorm.DB, cfg *config.Config) error { + if cfg.Db.Dialect != config.SQLDialectMysql { + return nil + } + + if !db.Migrator().HasTable(&models.Summary{}) || !db.Migrator().HasTable(&models.SummaryItem{}) { + return nil + } + + var currentType string + if err := db. + Table("information_schema.columns"). + Select("data_type"). + Where("table_name = ?", "summary_items"). + Where("column_name = ?", "summary_id"). + Limit(1). + Row().Scan(¤tType); err != nil { + return err + } + + if strings.ToLower(currentType) != "int" { + if db.Migrator().HasConstraint(&models.SummaryItem{}, "fk_summaries_editors") { + if err := db.Migrator().DropConstraint(&models.SummaryItem{}, "fk_summaries_editors"); err != nil { + return err + } + } + if db.Migrator().HasConstraint(&models.SummaryItem{}, "fk_summaries_languages") { + if err := db.Migrator().DropConstraint(&models.SummaryItem{}, "fk_summaries_languages"); err != nil { + return err + } + } + if db.Migrator().HasConstraint(&models.SummaryItem{}, "fk_summaries_machines") { + if err := db.Migrator().DropConstraint(&models.SummaryItem{}, "fk_summaries_machines"); err != nil { + return err + } + } + if db.Migrator().HasConstraint(&models.SummaryItem{}, "fk_summaries_operating_systems") { + if err := db.Migrator().DropConstraint(&models.SummaryItem{}, "fk_summaries_operating_systems"); err != nil { + return err + } + } + if db.Migrator().HasConstraint(&models.SummaryItem{}, "fk_summaries_projects") { + if err := db.Migrator().DropConstraint(&models.SummaryItem{}, "fk_summaries_projects"); err != nil { + return err + } + } + + if err := db.Migrator().AlterColumn(&models.Summary{}, "id"); err != nil { + return err + } + if err := db.Migrator().AlterColumn(&models.SummaryItem{}, "summary_id"); err != nil { + return err + } + } + + return nil + }, + } + + registerPreMigration(f) +}