db: fix migration runner to handle existing DB without checksum col

This commit is contained in:
2026-07-19 22:18:38 -04:00
parent 867794d846
commit d8aaaf5ca4
+24 -4
View File
@@ -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)
}