summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-16 15:40:00 +0300
committerPaul Buetow <paul@buetow.org>2026-05-16 15:40:00 +0300
commit0a9660a6eeece467e94b395fdc0c8ad96d29e133 (patch)
treedbe204b113112150798845d098bf60c220041da3 /internal
parentdf224eff77d9387539d5e190f357f2d80ca63731 (diff)
Migrate stale sets schema for podcasts
Diffstat (limited to 'internal')
-rw-r--r--internal/repository/schema.go10
-rw-r--r--internal/repository/sqlite_test.go35
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, &notNull, &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)
}
})
}