diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-16 15:40:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-16 15:40:00 +0300 |
| commit | 0a9660a6eeece467e94b395fdc0c8ad96d29e133 (patch) | |
| tree | dbe204b113112150798845d098bf60c220041da3 /internal | |
| parent | df224eff77d9387539d5e190f357f2d80ca63731 (diff) | |
Migrate stale sets schema for podcasts
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/repository/schema.go | 10 | ||||
| -rw-r--r-- | internal/repository/sqlite_test.go | 35 |
2 files changed, 38 insertions, 7 deletions
diff --git a/internal/repository/schema.go b/internal/repository/schema.go index 8833e3f..a07f4ed 100644 --- a/internal/repository/schema.go +++ b/internal/repository/schema.go @@ -207,12 +207,12 @@ func initializeSchema(db *sql.DB) error { if err := execSchema(db, "tables", tablesSchema); err != nil { return err } - if err := execSchema(db, "indexes", indexesSchema); err != nil { - return err - } if err := runMigrations(db); err != nil { return fmt.Errorf("apply migrations: %w", err) } + if err := execSchema(db, "indexes", indexesSchema); err != nil { + return err + } return nil } @@ -224,6 +224,10 @@ type migration struct { var migrations = []migration{ { + name: "add_sets_is_podcast", + sql: `ALTER TABLE sets ADD COLUMN is_podcast INTEGER NOT NULL DEFAULT 0;`, + }, + { name: "add_podcast_feed_backoff_columns", sql: ` ALTER TABLE podcast_feeds ADD COLUMN consecutive_failures INTEGER NOT NULL DEFAULT 0; diff --git a/internal/repository/sqlite_test.go b/internal/repository/sqlite_test.go index eaf142f..706f911 100644 --- a/internal/repository/sqlite_test.go +++ b/internal/repository/sqlite_test.go @@ -1168,7 +1168,7 @@ func TestSQLite_SchemaInitialization(t *testing.T) { } }) - t.Run("stale pre-podcast sets schema is not upgraded", func(t *testing.T) { + t.Run("stale pre-podcast sets schema is upgraded", func(t *testing.T) { db, err := sql.Open("sqlite", ":memory:") if err != nil { t.Fatalf("open: %v", err) @@ -1187,9 +1187,36 @@ CREATE TABLE sets ( t.Fatalf("create stale schema: %v", err) } - _, err = New(db) - if err == nil { - t.Fatal("expected stale schema initialization to fail") + s, err := New(db) + if err != nil { + t.Fatalf("initialize stale schema: %v", err) + } + defer s.Close() + + var isPodcastColumn int + rows, err := s.db.Query(`PRAGMA table_info(sets)`) + if err != nil { + t.Fatalf("table info: %v", err) + } + defer rows.Close() + for rows.Next() { + var cid int + var name, typ string + var notNull int + var defaultValue sql.NullString + var pk int + if err := rows.Scan(&cid, &name, &typ, ¬Null, &defaultValue, &pk); err != nil { + t.Fatalf("scan column: %v", err) + } + if name == "is_podcast" { + isPodcastColumn++ + } + } + if err := rows.Err(); err != nil { + t.Fatalf("rows: %v", err) + } + if isPodcastColumn != 1 { + t.Fatalf("expected one is_podcast column, got %d", isPodcastColumn) } }) } |
