1
0
mirror of https://github.com/astaxie/beego.git synced 2024-06-13 09:23:32 +00:00

update the migration

This commit is contained in:
astaxie 2014-08-12 15:49:30 +08:00
parent 6a78898bb1
commit b97279a74f

View File

@ -12,6 +12,7 @@ package migration
import ( import (
"errors" "errors"
"sort" "sort"
"strings"
"time" "time"
"github.com/astaxie/beego" "github.com/astaxie/beego"
@ -25,7 +26,7 @@ const M_DATE_FORMAT = "20060102_150405"
type Migrationer interface { type Migrationer interface {
Up() Up()
Down() Down()
Exec() error Exec(name, status string) error
GetCreated() int64 GetCreated() int64
} }
@ -57,7 +58,7 @@ func (m *Migration) Sql(sql string) {
} }
// execute the sql already add in the sql // execute the sql already add in the sql
func (m *Migration) Exec() error { func (m *Migration) Exec(name, status string) error {
o := orm.NewOrm() o := orm.NewOrm()
for _, s := range m.sqls { for _, s := range m.sqls {
beego.Info("exec sql:", s) beego.Info("exec sql:", s)
@ -67,7 +68,28 @@ func (m *Migration) Exec() error {
return err return err
} }
} }
return nil return m.addOrUpdateRecord(name, status)
}
func (m *Migration) addOrUpdateRecord(status, name string) error {
o := orm.NewOrm()
if status == "down" {
status = "rollback"
p, err := o.Raw("update migrations set status = ?,rollback_statements = ? where name = ?").Prepare()
if err != nil {
return nil
}
_, err = p.Exec(status, strings.Join(m.sqls, "; "), name)
return err
} else {
status = "update"
p, err := o.Raw("insert into migrations(`name``created_at``statements``status`) values(?,?,?,?)").Prepare()
if err != nil {
return err
}
_, err = p.Exec(name, m.GetCreated(), strings.Join(m.sqls, "; "), status)
return err
}
} }
// get the unixtime from the Created // get the unixtime from the Created
@ -96,7 +118,7 @@ func Upgrade(lasttime int64) error {
if v.created > lasttime { if v.created > lasttime {
beego.Info("start upgrade", v.name) beego.Info("start upgrade", v.name)
v.m.Up() v.m.Up()
err := v.m.Exec() err := v.m.Exec(v.name, "up")
if err != nil { if err != nil {
return err return err
} }
@ -113,7 +135,7 @@ func Rollback(name string) error {
if v, ok := migrationMap[name]; ok { if v, ok := migrationMap[name]; ok {
beego.Info("start rollback") beego.Info("start rollback")
v.Down() v.Down()
err := v.Exec() err := v.Exec(name, "down")
if err != nil { if err != nil {
return err return err
} }
@ -131,7 +153,7 @@ func Reset() error {
for k, v := range migrationMap { for k, v := range migrationMap {
beego.Info("start reset:", k) beego.Info("start reset:", k)
v.Down() v.Down()
err := v.Exec() err := v.Exec(k, "down")
if err != nil { if err != nil {
return err return err
} }