From 0a9660a6eeece467e94b395fdc0c8ad96d29e133 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 16 May 2026 15:40:00 +0300 Subject: Migrate stale sets schema for podcasts --- internal/repository/schema.go | 10 +++++++--- 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 } @@ -223,6 +223,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: ` 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) } }) } -- cgit v1.2.3