You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
552 B
30 lines
552 B
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func Open(path string) (*sql.DB, error) {
|
|
dsn := path + "?_journal_mode=WAL&_busy_timeout=5000"
|
|
database, err := sql.Open("sqlite3", dsn)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("open db: %w", err)
|
|
}
|
|
|
|
pragmas := []string{
|
|
"PRAGMA foreign_keys = ON",
|
|
"PRAGMA journal_mode = WAL",
|
|
}
|
|
|
|
for _, p := range pragmas {
|
|
if _, err := database.Exec(p); err != nil {
|
|
database.Close()
|
|
return nil, fmt.Errorf("pragma %s: %w", p, err)
|
|
}
|
|
}
|
|
|
|
return database, nil
|
|
}
|
|
|