47 lines
892 B
Go
47 lines
892 B
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// getDB opens a DB object and returns a usable DB instance
|
|
func getDB(path string) (*sql.DB, error) {
|
|
var fillDB bool
|
|
_, err := os.Stat(path)
|
|
if err != nil {
|
|
fmt.Println("Database does not exist, creating and applying schema")
|
|
fillDB = true
|
|
} else {
|
|
fillDB = false
|
|
}
|
|
|
|
db, err := sql.Open("sqlite3", path)
|
|
if err != nil {
|
|
fmt.Println("Could not open database")
|
|
panic(err)
|
|
}
|
|
|
|
if fillDB {
|
|
file, err := ioutil.ReadFile("./schema.sql")
|
|
if err != nil {
|
|
fmt.Println("database empty, but cold not read schema file")
|
|
panic(err)
|
|
}
|
|
requests := strings.Split(string(file), ";")
|
|
|
|
for _, request := range requests {
|
|
_, err := db.Exec(request)
|
|
if err != nil {
|
|
fmt.Println("Could not execute:", request)
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
return db, nil
|
|
}
|