diff --git a/cli/cli.go b/cli/cli.go index 279e0523..393d9b4e 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -115,6 +115,10 @@ func Parse() { return } + if err := database.IsSchemaUpToDate(db); err != nil { + logger.Fatal(`You must run the SQL migrations, %v`, err) + } + store := storage.NewStorage(db) if flagResetFeedErrors { diff --git a/database/migration.go b/database/migration.go index c9abf0e8..7bff6e21 100644 --- a/database/migration.go +++ b/database/migration.go @@ -17,7 +17,7 @@ const schemaVersion = 28 // Migrate executes database migrations. func Migrate(db *sql.DB) { var currentVersion int - db.QueryRow(`select version from schema_version`).Scan(¤tVersion) + db.QueryRow(`SELECT version FROM schema_version`).Scan(¤tVersion) fmt.Println("Current schema version:", currentVersion) fmt.Println("Latest schema version:", schemaVersion) @@ -43,7 +43,7 @@ func Migrate(db *sql.DB) { logger.Fatal("[Migrate] %v", err) } - if _, err := tx.Exec(`insert into schema_version (version) values($1)`, version); err != nil { + if _, err := tx.Exec(`INSERT INTO schema_version (version) VALUES ($1)`, version); err != nil { tx.Rollback() logger.Fatal("[Migrate] %v", err) } @@ -53,3 +53,13 @@ func Migrate(db *sql.DB) { } } } + +// IsSchemaUpToDate checks if the database schema is up to date. +func IsSchemaUpToDate(db *sql.DB) error { + var currentVersion int + db.QueryRow(`SELECT version FROM schema_version`).Scan(¤tVersion) + if currentVersion != schemaVersion { + return fmt.Errorf(`database schema is not up to date: current=v%d expected=v%d`, currentVersion, schemaVersion) + } + return nil +}