40 lines
712 B
Go

package db
import (
"context"
"database/sql"
"fmt"
"time"
_"embed"
_ "github.com/mattn/go-sqlite3"
)
//go:embed schema.sql
var schema string
func NewDB(ctx context.Context, URI string)(db *sql.DB, err error) {
params := "cache=shared&_foreign_keys=on&_busy_timeout=3000&_journal_mode=WAL"
db, err = sql.Open("sqlite3", fmt.Sprintf("%s?%s", URI, params))
if err != nil {
return nil, fmt.Errorf("connecting %w", err)
}
// test conn
err = db.PingContext(ctx)
if err != nil {
return nil, fmt.Errorf("ping Error %w", err)
}
db.SetConnMaxIdleTime(5*time.Second)
CreateTables(db)
return db, nil
}
func CreateTables(db *sql.DB) {
_, err := db.Exec(schema)
if err != nil {
panic(err)
}
}