package database import ( "fmt" "log" ) func (d *DB) version() (int, error) { var version int err := d.db.Get(&version, "PRAGMA user_version") if err != nil { return -1, err } return version, nil } func (d *DB) setVersion(version int) { d.db.MustExec(fmt.Sprintf("PRAGMA user_version = %d", version)) } func (d *DB) migrate() { version, err := d.version() if err != nil { log.Fatalf("failed to get version %s", err) return } switch version { case 0: d.db.MustExec(` CREATE TABLE todos ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, completed INTEGER NOT NULL ); `) d.setVersion(1) fallthrough case 1: // Not falling through default: log.Fatalf("Unknown version %d", version) } }