diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-09-06 10:11:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-06 10:11:08 +0800 |
commit | 519e59b5778571ace3f681b81a21b92a38ede890 (patch) | |
tree | 373a2021f3adcf8b2c44e6f28282733e00909d88 /internal/db/backup.go | |
parent | 771d3673f5dc1ba96ed9bf2ebe22c7f3066ec31d (diff) |
db: migrate to GORM v2 (#6309)
Diffstat (limited to 'internal/db/backup.go')
-rw-r--r-- | internal/db/backup.go | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/internal/db/backup.go b/internal/db/backup.go index a02d70d6..985b3c0f 100644 --- a/internal/db/backup.go +++ b/internal/db/backup.go @@ -8,10 +8,12 @@ import ( "path/filepath" "reflect" "strings" + "sync" - "github.com/jinzhu/gorm" jsoniter "github.com/json-iterator/go" "github.com/pkg/errors" + "gorm.io/gorm" + "gorm.io/gorm/schema" log "unknwon.dev/clog/v2" "xorm.io/core" "xorm.io/xorm" @@ -153,17 +155,21 @@ func ImportDatabase(db *gorm.DB, dirPath string, verbose bool) error { } func importTable(db *gorm.DB, table interface{}, r io.Reader) error { - err := db.DropTableIfExists(table).Error + err := db.Migrator().DropTable(table) if err != nil { return errors.Wrap(err, "drop table") } - err = db.AutoMigrate(table).Error + err = db.Migrator().AutoMigrate(table) if err != nil { return errors.Wrap(err, "auto migrate") } - rawTableName := db.NewScope(table).TableName() + s, err := schema.Parse(table, &sync.Map{}, db.NamingStrategy) + if err != nil { + return errors.Wrap(err, "parse schema") + } + rawTableName := s.Table skipResetIDSeq := map[string]bool{ "lfs_object": true, } @@ -235,21 +241,26 @@ func importLegacyTables(dirPath string, verbose bool) error { return fmt.Errorf("insert strcut: %v", err) } - meta := make(map[string]interface{}) + var meta struct { + ID int64 + CreatedUnix int64 + DeadlineUnix int64 + ClosedDateUnix int64 + } if err = jsoniter.Unmarshal(scanner.Bytes(), &meta); err != nil { log.Error("Failed to unmarshal to map: %v", err) } // Reset created_unix back to the date save in archive because Insert method updates its value if isInsertProcessor && !skipInsertProcessors[rawTableName] { - if _, err = x.Exec("UPDATE `"+rawTableName+"` SET created_unix=? WHERE id=?", meta["CreatedUnix"], meta["ID"]); err != nil { - log.Error("Failed to reset 'created_unix': %v", err) + if _, err = x.Exec("UPDATE `"+rawTableName+"` SET created_unix=? WHERE id=?", meta.CreatedUnix, meta.ID); err != nil { + log.Error("Failed to reset '%s.created_unix': %v", rawTableName, err) } } switch rawTableName { case "milestone": - if _, err = x.Exec("UPDATE `"+rawTableName+"` SET deadline_unix=?, closed_date_unix=? WHERE id=?", meta["DeadlineUnix"], meta["ClosedDateUnix"], meta["ID"]); err != nil { + if _, err = x.Exec("UPDATE `"+rawTableName+"` SET deadline_unix=?, closed_date_unix=? WHERE id=?", meta.DeadlineUnix, meta.ClosedDateUnix, meta.ID); err != nil { log.Error("Failed to reset 'milestone.deadline_unix', 'milestone.closed_date_unix': %v", err) } } |