// Migrate database to current version func Migrate(x *xorm.Engine) error { if err := x.Sync(new(Version)); err != nil { return fmt.Errorf("sync: %v", err) } currentVersion := &Version{Id: 1} has, err := x.Get(currentVersion) if err != nil { return fmt.Errorf("get: %v", err) } else if !has { // If the user table does not exist it is a fresh installation and we // can skip all migrations. needsMigration, err := x.IsTableExist("user") if err != nil { return err } if needsMigration { isEmpty, err := x.IsTableEmpty("user") if err != nil { return err } // If the user table is empty it is a fresh installation and we can // skip all migrations. needsMigration = !isEmpty } if !needsMigration { currentVersion.Version = int64(_MIN_DB_VER + len(migrations)) } if _, err = x.InsertOne(currentVersion); err != nil { return fmt.Errorf("insert: %v", err) } } v := currentVersion.Version if _MIN_DB_VER > v { log.Fatal(4, "Gogs no longer supports auto-migration from your previously installed version. Please try to upgrade to a lower version first, then upgrade to current version.") return nil } if int(v-_MIN_DB_VER) > len(migrations) { // User downgraded Gogs. currentVersion.Version = int64(len(migrations) + _MIN_DB_VER) _, err = x.Id(1).Update(currentVersion) return err } for i, m := range migrations[v-_MIN_DB_VER:] { log.Info("Migration: %s", m.Description()) if err = m.Migrate(x); err != nil { return fmt.Errorf("do migrate: %v", err) } currentVersion.Version = v + int64(i) + 1 if _, err = x.Id(1).Update(currentVersion); err != nil { return err } } return nil }
// Migrate database to current version func Migrate(x *xorm.Engine) error { if err := x.Sync(new(Version)); err != nil { return fmt.Errorf("sync: %v", err) } currentVersion := &Version{Id: 1} has, err := x.Get(currentVersion) if err != nil { return fmt.Errorf("get: %v", err) } else if !has { // If the user table does not exist it is a fresh installation and we // can skip all migrations. needsMigration, err := x.IsTableExist("user") if err != nil { return err } if needsMigration { isEmpty, err := x.IsTableEmpty("user") if err != nil { return err } // If the user table is empty it is a fresh installation and we can // skip all migrations. needsMigration = !isEmpty } if !needsMigration { currentVersion.Version = int64(_MIN_DB_VER + len(migrations)) } if _, err = x.InsertOne(currentVersion); err != nil { return fmt.Errorf("insert: %v", err) } } v := currentVersion.Version for i, m := range migrations[v-_MIN_DB_VER:] { log.Info("Migration: %s", m.Description()) if err = m.Migrate(x); err != nil { return fmt.Errorf("do migrate: %v", err) } currentVersion.Version = v + int64(i) + 1 if _, err = x.Id(1).Update(currentVersion); err != nil { return err } } return nil }
func directCreateTable(engine *xorm.Engine, t *testing.T) { err := engine.DropTables(&Userinfo{}, &Userdetail{}, &Numeric{}) if err != nil { t.Error(err) panic(err) } err = engine.Sync(&Userinfo{}, &Userdetail{}, new(Picture), new(Numeric)) if err != nil { t.Error(err) panic(err) } isEmpty, err := engine.IsTableEmpty(&Userinfo{}) if err != nil { t.Error(err) panic(err) } if !isEmpty { err = errors.New("userinfo should empty") t.Error(err) panic(err) } tbName := engine.TableMapper.Obj2Table("Userinfo") isEmpty, err = engine.IsTableEmpty(tbName) if err != nil { t.Error(err) panic(err) } if !isEmpty { err = errors.New("userinfo should empty") t.Error(err) panic(err) } err = engine.DropTables(&Userinfo{}, &Userdetail{}, new(Numeric)) if err != nil { t.Error(err) panic(err) } err = engine.CreateTables(&Userinfo{}, &Userdetail{}, new(Numeric)) if err != nil { t.Error(err) panic(err) } err = engine.CreateIndexes(&Userinfo{}) if err != nil { t.Error(err) panic(err) } err = engine.CreateIndexes(&Userdetail{}) if err != nil { t.Error(err) panic(err) } err = engine.CreateUniques(&Userinfo{}) if err != nil { t.Error(err) panic(err) } err = engine.CreateUniques(&Userdetail{}) if err != nil { t.Error(err) panic(err) } }