diff --git a/db.go b/db.go index 4549a42..8da24d9 100644 --- a/db.go +++ b/db.go @@ -4,6 +4,7 @@ import ( "database/sql" "fmt" "log" + "os" "time" "github.com/mattn/go-sqlite3" @@ -21,6 +22,22 @@ func (db *DB) Open() error { return fmt.Errorf("database path not set") } + file, err := os.Open(db.path) + if err != nil { + if os.IsNotExist(err) { + log.Printf("Database file does not exist at %s, creating", db.path) + file, err := os.Create(db.path) + if err != nil { + return fmt.Errorf("failed to create database file: %v", err) + } + log.Printf("Database created at %s", db.path) + file.Close() + } else { + return fmt.Errorf("failed to open database file: %v", err) + } + } + file.Close() + sql.Register("spellfixlite", &sqlite3.SQLiteDriver{ Extensions: []string{"spellfix"}, }) @@ -95,6 +112,11 @@ func (db *DB) Init(ddl string) error { _, err = db.writeConn.Exec(ddl) if err != nil { Error.Printf("%++v", err) + log.Printf("%#v", "Rolling back") + _, err2 := db.writeConn.Exec("ROLLBACK;") + if err2 != nil { + Error.Printf("Error rollingback! %++v", err) + } return err } diff --git a/food.ddl b/food.ddl index 24a6e27..b03b3f3 100644 --- a/food.ddl +++ b/food.ddl @@ -1,4 +1,4 @@ -begin transaction; +begin; create table weight ( date datetime default (datetime('now', '+2 hours')), @@ -124,7 +124,6 @@ where not exists ( ); end; --- Spellfix search example with search_results as ( select word, score, f.rowid, f.* from foodfix @@ -134,7 +133,7 @@ with search_results as ( select rowid, food, score, date, description, amount, per100, energy from search_results group by food -order by score asc, date desc +order by score asc, date desc; create index dailyIdx on food(strftime('%Y-%m-%d', date)); create index weeklyIdx on food(strftime('%Y-%W', date)); diff --git a/main.go b/main.go index 191d7ee..de0aacb 100644 --- a/main.go +++ b/main.go @@ -56,7 +56,11 @@ func main() { os.Exit(1) } defer db.Close() - db.Init(foodDDL) + err = db.Init(foodDDL) + if err != nil { + Error.Printf("Error initializing database: %++v", err) + os.Exit(1) + } settingsService = &SettingsService{db: &db} err = settingsService.LoadSettings()