connect_modernc.go

 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}