From d8aaaf5ca40e440baacd77de7364073d8a875203 Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Sun, 19 Jul 2026 22:18:38 -0400 Subject: [PATCH] db: fix migration runner to handle existing DB without checksum col --- internal/db/db.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index ff1bda1..d30b952 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -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) }