package database import ( "fmt" "log" ) const current = 1 func (d *DB) mustExec(query string, args ...any) { _, err := d.db.Exec(query, args...) if err != nil { log.Fatalf("Failed to exec %s %s", query, args) } } func (d *DB) version() (int, error) { rows, err := d.db.Query("PRAGMA user_version") if err != nil { return -1, err } defer rows.Close() for rows.Next() { var v int err = rows.Scan(&v) if err != nil { return -1, err } return v, nil } return -1, nil } func (d *DB) setVersion(version int) { d.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.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) } }