db: fix migration runner to handle existing DB without checksum col
This commit is contained in:
+24
-4
@@ -96,10 +96,30 @@ func (db *DB) runMigrationsInternal(mfs embedFS, migrationsRoot string) error {
|
|||||||
return fmt.Errorf("applying migration %s: %w", name, err)
|
return fmt.Errorf("applying migration %s: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := tx.Exec(
|
var insertSQL string
|
||||||
"INSERT INTO schema_migrations (version, checksum) VALUES (?, ?)",
|
var insertArgs []interface{}
|
||||||
name, checksumHex,
|
insertArgs = append(insertArgs, name)
|
||||||
); err != nil {
|
hasChecksum := false
|
||||||
|
rows, _ := tx.Query("PRAGMA table_info(schema_migrations)")
|
||||||
|
if rows != nil {
|
||||||
|
for rows.Next() {
|
||||||
|
var cid int
|
||||||
|
var cname string
|
||||||
|
rows.Scan(&cid, &cname, new(string), new(int), new(interface{}), new(int))
|
||||||
|
if cname == "checksum" {
|
||||||
|
hasChecksum = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rows.Close()
|
||||||
|
}
|
||||||
|
if hasChecksum {
|
||||||
|
insertSQL = "INSERT INTO schema_migrations (version, checksum) VALUES (?, ?)"
|
||||||
|
insertArgs = append(insertArgs, checksumHex)
|
||||||
|
} else {
|
||||||
|
insertSQL = "INSERT INTO schema_migrations (version) VALUES (?)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := tx.Exec(insertSQL, insertArgs...); err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return fmt.Errorf("recording migration %s: %w", name, err)
|
return fmt.Errorf("recording migration %s: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user