b97279a7 by astaxie

update the migration

1 parent 6a78898b
...@@ -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 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!