1//go:build (darwin && (amd64 || arm64)) || (freebsd && (amd64 || arm64)) || (linux && (386 || amd64 || arm || arm64 || loong64 || ppc64le || riscv64 || s390x)) || (windows && (386 || amd64 || arm64))
2
3package db
4
5import (
6 "database/sql"
7 "fmt"
8 "net/url"
9
10 _ "modernc.org/sqlite"
11)
12
13func openDB(dbPath string) (*sql.DB, error) {
14 // Set pragmas for better performance via _pragma query params.
15 // Format: _pragma=name(value)
16 params := url.Values{}
17 for name, value := range pragmas {
18 params.Add("_pragma", fmt.Sprintf("%s(%s)", name, value))
19 }
20
21 dsn := fmt.Sprintf("file:%s?%s", dbPath, params.Encode())
22 db, err := sql.Open("sqlite", dsn)
23 if err != nil {
24 return nil, fmt.Errorf("failed to open database: %w", err)
25 }
26
27 return db, nil
28}