package db import ( "database/sql" "fmt" "os" "path/filepath" _ "modernc.org/sqlite" ) func Open(dbPath string) (*sql.DB, error) { dir := filepath.Dir(dbPath) if err := os.MkdirAll(dir, 0700); err != nil { return nil, fmt.Errorf("create db directory: %w", err) } db, err := sql.Open("sqlite", dbPath) if err != nil { return nil, fmt.Errorf("open database: %w", err) } if _, err := db.Exec("PRAGMA journal_mode=WAL"); err != nil { db.Close() return nil, fmt.Errorf("set WAL mode: %w", err) } if _, err := db.Exec("PRAGMA busy_timeout=5000"); err != nil { db.Close() return nil, fmt.Errorf("set busy_timeout: %w", err) } if _, err := db.Exec("PRAGMA foreign_keys=ON"); err != nil { db.Close() return nil, fmt.Errorf("enable foreign keys: %w", err) } return db, nil }