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) }