35 lines
655 B
Go
35 lines
655 B
Go
package storage
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"strings"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
var pragmas = map[string]string{
|
|
`journal_mode`: `wal`,
|
|
`synchronous`: `normal`,
|
|
`busy_timeout`: `30000`,
|
|
}
|
|
|
|
func buildSqliteDsn(path string, pragmas map[string]string) string {
|
|
pragmastrs := make([]string, len(pragmas))
|
|
i := 0
|
|
for k, v := range pragmas {
|
|
pragmastrs[i] = (fmt.Sprintf(`pragma=%s(%s)`, k, v))
|
|
i++
|
|
}
|
|
return path + "?" + "mode=rwc&" + strings.Join(pragmastrs, "&")
|
|
}
|
|
|
|
func Open(path string) (*sql.DB, error) {
|
|
dsn := buildSqliteDsn(path, pragmas)
|
|
db, err := sql.Open("sqlite", dsn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return db, nil
|
|
}
|