update the migration
Showing
1 changed file
with
28 additions
and
6 deletions
| ... | @@ -12,6 +12,7 @@ package migration | ... | @@ -12,6 +12,7 @@ package migration |
| 12 | import ( | 12 | import ( |
| 13 | "errors" | 13 | "errors" |
| 14 | "sort" | 14 | "sort" |
| 15 | "strings" | ||
| 15 | "time" | 16 | "time" |
| 16 | 17 | ||
| 17 | "github.com/astaxie/beego" | 18 | "github.com/astaxie/beego" |
| ... | @@ -25,7 +26,7 @@ const M_DATE_FORMAT = "20060102_150405" | ... | @@ -25,7 +26,7 @@ const M_DATE_FORMAT = "20060102_150405" |
| 25 | type Migrationer interface { | 26 | type Migrationer interface { |
| 26 | Up() | 27 | Up() |
| 27 | Down() | 28 | Down() |
| 28 | Exec() error | 29 | Exec(name, status string) error |
| 29 | GetCreated() int64 | 30 | GetCreated() int64 |
| 30 | } | 31 | } |
| 31 | 32 | ||
| ... | @@ -57,7 +58,7 @@ func (m *Migration) Sql(sql string) { | ... | @@ -57,7 +58,7 @@ func (m *Migration) Sql(sql string) { |
| 57 | } | 58 | } |
| 58 | 59 | ||
| 59 | // execute the sql already add in the sql | 60 | // execute the sql already add in the sql |
| 60 | func (m *Migration) Exec() error { | 61 | func (m *Migration) Exec(name, status string) error { |
| 61 | o := orm.NewOrm() | 62 | o := orm.NewOrm() |
| 62 | for _, s := range m.sqls { | 63 | for _, s := range m.sqls { |
| 63 | beego.Info("exec sql:", s) | 64 | beego.Info("exec sql:", s) |
| ... | @@ -67,7 +68,28 @@ func (m *Migration) Exec() error { | ... | @@ -67,7 +68,28 @@ func (m *Migration) Exec() error { |
| 67 | return err | 68 | return err |
| 68 | } | 69 | } |
| 69 | } | 70 | } |
| 70 | return nil | 71 | return m.addOrUpdateRecord(name, status) |
| 72 | } | ||
| 73 | |||
| 74 | func (m *Migration) addOrUpdateRecord(status, name string) error { | ||
| 75 | o := orm.NewOrm() | ||
| 76 | if status == "down" { | ||
| 77 | status = "rollback" | ||
| 78 | p, err := o.Raw("update migrations set status = ?,rollback_statements = ? where name = ?").Prepare() | ||
| 79 | if err != nil { | ||
| 80 | return nil | ||
| 81 | } | ||
| 82 | _, err = p.Exec(status, strings.Join(m.sqls, "; "), name) | ||
| 83 | return err | ||
| 84 | } else { | ||
| 85 | status = "update" | ||
| 86 | p, err := o.Raw("insert into migrations(`name`,`created_at`,`statements`,`status`) values(?,?,?,?)").Prepare() | ||
| 87 | if err != nil { | ||
| 88 | return err | ||
| 89 | } | ||
| 90 | _, err = p.Exec(name, m.GetCreated(), strings.Join(m.sqls, "; "), status) | ||
| 91 | return err | ||
| 92 | } | ||
| 71 | } | 93 | } |
| 72 | 94 | ||
| 73 | // get the unixtime from the Created | 95 | // get the unixtime from the Created |
| ... | @@ -96,7 +118,7 @@ func Upgrade(lasttime int64) error { | ... | @@ -96,7 +118,7 @@ func Upgrade(lasttime int64) error { |
| 96 | if v.created > lasttime { | 118 | if v.created > lasttime { |
| 97 | beego.Info("start upgrade", v.name) | 119 | beego.Info("start upgrade", v.name) |
| 98 | v.m.Up() | 120 | v.m.Up() |
| 99 | err := v.m.Exec() | 121 | err := v.m.Exec(v.name, "up") |
| 100 | if err != nil { | 122 | if err != nil { |
| 101 | return err | 123 | return err |
| 102 | } | 124 | } |
| ... | @@ -113,7 +135,7 @@ func Rollback(name string) error { | ... | @@ -113,7 +135,7 @@ func Rollback(name string) error { |
| 113 | if v, ok := migrationMap[name]; ok { | 135 | if v, ok := migrationMap[name]; ok { |
| 114 | beego.Info("start rollback") | 136 | beego.Info("start rollback") |
| 115 | v.Down() | 137 | v.Down() |
| 116 | err := v.Exec() | 138 | err := v.Exec(name, "down") |
| 117 | if err != nil { | 139 | if err != nil { |
| 118 | return err | 140 | return err |
| 119 | } | 141 | } |
| ... | @@ -131,7 +153,7 @@ func Reset() error { | ... | @@ -131,7 +153,7 @@ func Reset() error { |
| 131 | for k, v := range migrationMap { | 153 | for k, v := range migrationMap { |
| 132 | beego.Info("start reset:", k) | 154 | beego.Info("start reset:", k) |
| 133 | v.Down() | 155 | v.Down() |
| 134 | err := v.Exec() | 156 | err := v.Exec(k, "down") |
| 135 | if err != nil { | 157 | if err != nil { |
| 136 | return err | 158 | return err |
| 137 | } | 159 | } | ... | ... |
-
Please register or sign in to post a comment