@@ -7,7 +7,8 @@ import (
77 "log/slog"
88 "path/filepath"
99
10− _ "github.com/ncruces/go-sqlite3/driver"
10+ "github.com/ncruces/go-sqlite3"
11+ "github.com/ncruces/go-sqlite3/driver"
1112 _ "github.com/ncruces/go-sqlite3/embed"
1213
1314 "github.com/pressly/goose/v3"
@@ -18,17 +19,6 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
1819 return nil, fmt.Errorf("data.dir is not set")
1920 }
2021 dbPath := filepath.Join(dataDir, "crush.db")
21− // Open the SQLite database
22− db, err := sql.Open("sqlite3", dbPath)
23− if err != nil {
24− return nil, fmt.Errorf("failed to open database: %w", err)
25− }
26−
27− // Verify connection
28− if err = db.PingContext(ctx); err != nil {
29− db.Close()
30− return nil, fmt.Errorf("failed to connect to database: %w", err)
31− }
3222
3323 // Set pragmas for better performance
3424 pragmas := []string{
@@ -37,14 +27,25 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
3727 "PRAGMA page_size = 4096;",
3828 "PRAGMA cache_size = -8000;",
3929 "PRAGMA synchronous = NORMAL;",
30+ "PRAGMA secure_delete = ON;",
4031 }
4132
42− for _, pragma := range pragmas {
43− if _, err = db.ExecContext(ctx, pragma); err != nil {
44− slog.Error("Failed to set pragma", pragma, err)
45− } else {
46− slog.Debug("Set pragma", "pragma", pragma)
33+ db, err := driver.Open(dbPath, func(c *sqlite3.Conn) error {
34+ for _, pragma := range pragmas {
35+ if err := c.Exec(pragma); err != nil {
36+ return fmt.Errorf("failed to set pragma `%s`: %w", pragma, err)
37+ }
4738 }
39+ return nil
40+ })
41+ if err != nil {
42+ return nil, fmt.Errorf("failed to open database: %w", err)
43+ }
44+
45+ // Verify connection
46+ if err = db.PingContext(ctx); err != nil {
47+ db.Close()
48+ return nil, fmt.Errorf("failed to connect to database: %w", err)
4849 }
4950
5051 goose.SetBaseFS(FS)
@@ -58,5 +59,6 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
5859 slog.Error("Failed to apply migrations", "error", err)
5960 return nil, fmt.Errorf("failed to apply migrations: %w", err)
6061 }
62+
6163 return db, nil
6264}