// Copyright (C) 2021 Marius Schellenberger package db import ( "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) { log := db.log 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.Info("database version", "version", version) for version < currentVersion { v := version + 1 log.Info("running migration", "version", v) err = migrators[v](db, v) if err != nil { return } err = db.store.Set(versionKey, v) if err != nil { return } version = v log.Info("database version", "version", version) } return }