mirror of https://git.sr.ht/~statianzo/todogo
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
65 lines
1.0 KiB
2 years ago
|
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)
|
||
|
}
|
||
|
}
|