10 "github.com/ncruces/go-sqlite3"
11 "github.com/ncruces/go-sqlite3/driver"
12 _ "github.com/ncruces/go-sqlite3/embed"
14 "github.com/pressly/goose/v3"
17func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
19 return nil, fmt.Errorf("data.dir is not set")
21 dbPath := filepath.Join(dataDir, "crush.db")
23 // Set pragmas for better performance
25 "PRAGMA foreign_keys = ON;",
26 "PRAGMA journal_mode = WAL;",
27 "PRAGMA page_size = 4096;",
28 "PRAGMA cache_size = -8000;",
29 "PRAGMA synchronous = NORMAL;",
30 "PRAGMA secure_delete = ON;",
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)
42 return nil, fmt.Errorf("failed to open database: %w", err)
46 if err = db.PingContext(ctx); err != nil {
48 return nil, fmt.Errorf("failed to connect to database: %w", err)
53 if err := goose.SetDialect("sqlite3"); err != nil {
54 slog.Error("Failed to set dialect", "error", err)
55 return nil, fmt.Errorf("failed to set dialect: %w", err)
58 if err := goose.Up(db, "migrations"); err != nil {
59 slog.Error("Failed to apply migrations", "error", err)
60 return nil, fmt.Errorf("failed to apply migrations: %w", err)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list