Add init ddl

This commit is contained in:
2024-08-24 16:20:01 +02:00
parent 92dbe446e8
commit b799e1bbf7
4 changed files with 71 additions and 2 deletions

56
db.go
View File

@@ -62,6 +62,60 @@ 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{})
var expected = map[string]struct{}{
"price": {},
}
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)
log.Printf("%#v", "Rolling back")
_, err2 := db.writeConn.Exec("ROLLBACK;")
if err2 != nil {
Error.Printf("Error rollingback! %++v", err)
}
return err
}
return nil
}
func (db *DB) Close() error {
err := db.writeConn.Close()
if err != nil {
@@ -74,4 +128,4 @@ func (db *DB) Close() error {
}
return nil
}
}