// Copyright (C) 2019 Marius Schellenberger package db import ( "git.giftfish.de/ston1th/docstore/pkg/log" "git.giftfish.de/ston1th/docstore/pkg/store" ) const ( versionKey = "version/version" currentVersion = 2 ) type migrator func(*DB, int) error var migrators = []migrator{ func(_ *DB, _ int) error { return nil }, func(_ *DB, _ int) error { // dummy placeholder return nil }, func(db *DB, _ int) (err error) { err = db.addDefaultTags() if err != nil { return } return db.RetagAll() }, } func (db *DB) runMigrations() (err error) { var version int err = db.store.Get(versionKey, &version) if err == store.ErrKeyNotFound { err = db.store.Set(versionKey, currentVersion) if err != nil { return } err = db.store.Get(versionKey, &version) if err != nil { return } } log.Printf("db: database version %d", version) for version < currentVersion { v := version + 1 log.Printf("db: running migration version %d", v) err = migrators[v](db, v) if err != nil { return } err = db.store.Set(versionKey, v) if err != nil { return } version = v log.Printf("db: database version %d", version) } return }