1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-22 09:10:55 +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 (
"errors"
"sort"
"strings"
"time"
"github.com/astaxie/beego"
@ -25,7 +26,7 @@ const M_DATE_FORMAT = "20060102_150405"
type Migrationer interface {
Up()
Down()
Exec() error
Exec(name, status string) error
GetCreated() int64
}
@ -57,7 +58,7 @@ func (m *Migration) Sql(sql string) {
}
// execute the sql already add in the sql
func (m *Migration) Exec() error {
func (m *Migration) Exec(name, status string) error {
o := orm.NewOrm()
for _, s := range m.sqls {
beego.Info("exec sql:", s)
@ -67,8 +68,29 @@ func (m *Migration) Exec() error {
return err
}
}
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
func (m *Migration) GetCreated() int64 {
@ -96,7 +118,7 @@ func Upgrade(lasttime int64) error {
if v.created > lasttime {
beego.Info("start upgrade", v.name)
v.m.Up()
err := v.m.Exec()
err := v.m.Exec(v.name, "up")
if err != nil {
return err
}
@ -113,7 +135,7 @@ func Rollback(name string) error {
if v, ok := migrationMap[name]; ok {
beego.Info("start rollback")
v.Down()
err := v.Exec()
err := v.Exec(name, "down")
if err != nil {
return err
}
@ -131,7 +153,7 @@ func Reset() error {
for k, v := range migrationMap {
beego.Info("start reset:", k)
v.Down()
err := v.Exec()
err := v.Exec(k, "down")
if err != nil {
return err
}