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)
|
||||
}
|
||||
|
||||
if _, err := tx.Exec(
|
||||
"INSERT INTO schema_migrations (version, checksum) VALUES (?, ?)",
|
||||
name, checksumHex,
|
||||
); err != nil {
|
||||
var insertSQL string
|
||||
var insertArgs []interface{}
|
||||
insertArgs = append(insertArgs, name)
|
||||
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()
|
||||
return fmt.Errorf("recording migration %s: %w", name, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user