mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 15:20:54 +00:00
update the migration
This commit is contained in:
parent
6a78898bb1
commit
b97279a74f
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user