(db *datastore)
| 89 | } |
| 90 | |
| 91 | func Migrate(db *datastore) error { |
| 92 | var version int |
| 93 | var err error |
| 94 | if db.tableExists("appmigrations") { |
| 95 | err = db.QueryRow("SELECT MAX(version) FROM appmigrations").Scan(&version) |
| 96 | if err != nil { |
| 97 | return err |
| 98 | } |
| 99 | } else { |
| 100 | log.Info("Initializing appmigrations table...") |
| 101 | version = 0 |
| 102 | _, err = db.Exec(`CREATE TABLE appmigrations ( |
| 103 | version ` + db.typeInt() + ` NOT NULL, |
| 104 | migrated ` + db.typeDateTime() + ` NOT NULL, |
| 105 | result ` + db.typeText() + ` NOT NULL |
| 106 | ) ` + db.engine() + `;`) |
| 107 | if err != nil { |
| 108 | return err |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | if len(migrations[version:]) > 0 { |
| 113 | for i, m := range migrations[version:] { |
| 114 | curVer := version + i + 1 |
| 115 | log.Info("Migrating to V%d: %s", curVer, m.Description()) |
| 116 | err = m.Migrate(db) |
| 117 | if err != nil { |
| 118 | return err |
| 119 | } |
| 120 | |
| 121 | // Update migrations table |
| 122 | _, err = db.Exec("INSERT INTO appmigrations (version, migrated, result) VALUES (?, "+db.now()+", ?)", curVer, "") |
| 123 | if err != nil { |
| 124 | return err |
| 125 | } |
| 126 | } |
| 127 | } else { |
| 128 | log.Info("Database up-to-date. No migrations to run.") |
| 129 | } |
| 130 | |
| 131 | return nil |
| 132 | } |
| 133 | |
| 134 | func (db *datastore) tableExists(t string) bool { |
| 135 | var dummy string |
no test coverage detected