aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/data/db.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/data/db.go')
-rw-r--r--pkg/data/db.go26
1 files changed, 17 insertions, 9 deletions
diff --git a/pkg/data/db.go b/pkg/data/db.go
index 63e8ff0..6837da1 100644
--- a/pkg/data/db.go
+++ b/pkg/data/db.go
@@ -45,39 +45,45 @@ func BatchQuery[T any](query string, start string, val string, delim string, sto
return b.String(), args
}
-func NewQuery(filename string) *Query {
- query := &Query{NewDB(filename)}
+func NewQuery(filename string, version string) *Query {
+ query := &Query{NewDB(filename, version)}
return query
}
-func NewDB(filename string) *sql.DB {
+func NewDB(filename string, version string) *sql.DB {
connStr := "file:" + filename + "?_fk=true&_journal=WAL"
db, err := sql.Open("sqlite3_regex", connStr)
if err != nil {
panic(err)
}
- if err := createSchema(db); err != nil {
+ var dbVersion string
+ row := db.QueryRow("SELECT key, value FROM Info WHERE key='version'")
+ if err := row.Scan(&dbVersion); err == nil {
+ return db
+ }
+
+ if err := createSchema(db, version); err != nil {
panic(err)
}
return db
}
-func NewMemDB() *sql.DB {
+func NewMemDB(version string) *sql.DB {
db, err := sql.Open("sqlite3_regex", ":memory:?_fk=true")
if err != nil {
panic(err)
}
- if err := createSchema(db); err != nil {
+ if err := createSchema(db, version); err != nil {
panic(err)
}
return db
}
-func createSchema(db *sql.DB) error {
+func createSchema(db *sql.DB, version string) error {
tx, err := db.Begin()
if err != nil {
return err
@@ -276,8 +282,10 @@ func createSchema(db *sql.DB) error {
return err
}
- if _, err = tx.Exec("INSERT OR IGNORE INTO Info (key, value, updated) VALUES (?,?,?)",
- "created", "", time.Now().UTC().Unix(),
+ t := time.Now().UTC().Unix()
+ if _, err = tx.Exec("INSERT OR IGNORE INTO Info (key, value, updated) VALUES (?,?,?), (?,?,?)",
+ "created", "", t,
+ "version", version, t,
); err != nil {
tx.Rollback()
return err