diff --git a/models/forgejo_migrations/v31.go b/models/forgejo_migrations/v31.go index 3f31cd2e92..fdcab21b1a 100644 --- a/models/forgejo_migrations/v31.go +++ b/models/forgejo_migrations/v31.go @@ -10,16 +10,45 @@ import ( func SetTopicsAsEmptySlice(x *xorm.Engine) error { var err error - if x.Dialect().URI().DBType == schemas.POSTGRES { + switch x.Dialect().URI().DBType { + case schemas.MYSQL: + _, err = x.Exec("UPDATE `repository` SET topics = '[]' WHERE topics IS NULL OR topics = 'null'") + case schemas.SQLITE: + _, err = x.Exec("UPDATE `repository` SET topics = '[]' WHERE topics IS NULL OR topics = 'null'") + case schemas.POSTGRES: _, err = x.Exec("UPDATE `repository` SET topics = '[]' WHERE topics IS NULL OR topics::text = 'null'") - } else { - _, err = x.Exec("UPDATE `repository` SET topics = '[]' WHERE topics IS NULL") } if err != nil { return err } + if x.Dialect().URI().DBType == schemas.SQLITE { + sessMigration := x.NewSession() + defer sessMigration.Close() + if err := sessMigration.Begin(); err != nil { + return err + } + _, err = sessMigration.Exec("ALTER TABLE `repository` RENAME COLUMN `topics` TO `topics_backup`") + if err != nil { + return err + } + _, err = sessMigration.Exec("ALTER TABLE `repository` ADD COLUMN `topics` TEXT NOT NULL DEFAULT '[]'") + if err != nil { + return err + } + _, err = sessMigration.Exec("UPDATE `repository` SET `topics` = `topics_backup`") + if err != nil { + return err + } + _, err = sessMigration.Exec("ALTER TABLE `repository` DROP COLUMN `topics_backup`") + if err != nil { + return err + } + + return sessMigration.Commit() + } + type Repository struct { ID int64 `xorm:"pk autoincr"` Topics []string `xorm:"TEXT JSON NOT NULL"`