diff options
Diffstat (limited to 'storage/migration.go')
-rw-r--r-- | storage/migration.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/storage/migration.go b/storage/migration.go new file mode 100644 index 0000000..a41e812 --- /dev/null +++ b/storage/migration.go @@ -0,0 +1,53 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package storage + +import ( + "fmt" + "github.com/miniflux/miniflux2/sql" + "log" + "strconv" +) + +const schemaVersion = 1 + +func (s *Storage) Migrate() { + var currentVersion int + s.db.QueryRow(`select version from schema_version`).Scan(¤tVersion) + + fmt.Println("Current schema version:", currentVersion) + fmt.Println("Latest schema version:", schemaVersion) + + for version := currentVersion + 1; version <= schemaVersion; version++ { + fmt.Println("Migrating to version:", version) + + tx, err := s.db.Begin() + if err != nil { + log.Fatalln(err) + } + + rawSQL := sql.SqlMap["schema_version_"+strconv.Itoa(version)] + // fmt.Println(rawSQL) + _, err = tx.Exec(rawSQL) + if err != nil { + tx.Rollback() + log.Fatalln(err) + } + + if _, err := tx.Exec(`delete from schema_version`); err != nil { + tx.Rollback() + log.Fatalln(err) + } + + if _, err := tx.Exec(`insert into schema_version (version) values($1)`, version); err != nil { + tx.Rollback() + log.Fatalln(err) + } + + if err := tx.Commit(); err != nil { + log.Fatalln(err) + } + } +} |