Implement DB auto init

This commit is contained in:
2024-08-10 01:03:11 +02:00
parent 35ca7620f4
commit 6d684b34ef
3 changed files with 58 additions and 1 deletions

53
db.go
View File

@@ -3,6 +3,7 @@ package main
import (
"database/sql"
"fmt"
"log"
"time"
_ "github.com/mattn/go-sqlite3"
@@ -44,6 +45,58 @@ func (db *DB) Open() error {
return nil
}
func (db *DB) Init(ddl string) error {
if !db.Ready {
return fmt.Errorf("database not ready")
}
var rows map[string]struct{} = make(map[string]struct{})
// TODO: Maybe make this better one day...
var expected = map[string]struct{}{
"food": {},
"weight": {},
"settings": {},
}
res, err := db.readConn.Query("SELECT name FROM sqlite_master WHERE type='table';")
if err != nil {
Error.Printf("%++v", err)
return err
}
defer res.Close()
for res.Next() {
var name string
err := res.Scan(&name)
if err != nil {
Error.Printf("%++v", err)
return err
}
rows[name] = struct{}{}
}
var needsInit bool
for table := range expected {
if _, ok := rows[table]; !ok {
log.Printf("Table %s not found, initializing", table)
needsInit = true
break;
}
}
if !needsInit {
log.Printf("Database already initialized")
return nil
}
_, err = db.writeConn.Exec(ddl)
if err != nil {
Error.Printf("%++v", err)
return err
}
return nil
}
func (db *DB) Close() error {
err := db.writeConn.Close()
if err != nil {