You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.0 KiB

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)
}
}