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
9 "github.com/ncruces/go-sqlite3"
10 "github.com/ncruces/go-sqlite3/driver"
11 _ "github.com/ncruces/go-sqlite3/embed"
12)
13
14func openDB(dbPath string) (*sql.DB, error) {
15 db, err := driver.Open(dbPath, func(c *sqlite3.Conn) error {
16 // Set pragmas for better performance via _pragma query params.
17 // Format: PRAGMA name = value;
18 for name, value := range pragmas {
19 if err := c.Exec(fmt.Sprintf("PRAGMA %s = %s;", name, value)); err != nil {
20 return fmt.Errorf("failed to set pragma %q: %w", name, err)
21 }
22 }
23 return nil
24 })
25 if err != nil {
26 return nil, fmt.Errorf("failed to open database: %w", err)
27 }
28
29 return db, nil
30}