mirror of
https://github.com/garethgeorge/backrest.git
synced 2026-05-05 20:40:37 +00:00
93becf3e32
Release Please / release-please (push) Has been cancelled
Release Preview / call-reusable-release (push) Has been cancelled
Test / test-nix (push) Has been cancelled
Test / test-win (push) Has been cancelled
Update Restic / update-restic-version (push) Has been cancelled
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package kvstore
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
|
|
"github.com/ncruces/go-sqlite3/vfs"
|
|
"github.com/ncruces/go-sqlite3/vfs/memdb"
|
|
)
|
|
|
|
func NewSqliteDbForKvStore(db string) (*sql.DB, error) {
|
|
if err := os.MkdirAll(filepath.Dir(db), 0700); err != nil {
|
|
return nil, fmt.Errorf("create sqlite db directory: %v", err)
|
|
}
|
|
if !vfs.SupportsFileLocking {
|
|
return nil, fmt.Errorf("file locking not supported")
|
|
}
|
|
dbpool, err := sql.Open("sqlite3", db)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("open sqlite pool: %v", err)
|
|
}
|
|
if vfs.SupportsSharedMemory {
|
|
_, err = dbpool.ExecContext(context.Background(), `
|
|
PRAGMA journal_mode = WAL;
|
|
PRAGMA synchronous = NORMAL;
|
|
`)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("run multiline query: %v", err)
|
|
}
|
|
}
|
|
if runtime.GOOS == "darwin" {
|
|
_, err = dbpool.ExecContext(context.Background(), "PRAGMA checkpoint_fullfsync = 1")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("run multiline query: %v", err)
|
|
}
|
|
}
|
|
return dbpool, nil
|
|
}
|
|
|
|
func NewInMemorySqliteDbForKvStore(t testing.TB) *sql.DB {
|
|
dbpool, err := sql.Open("sqlite3", memdb.TestDB(t))
|
|
if err != nil {
|
|
t.Fatalf("failed to open db: %v", err)
|
|
}
|
|
_, err = dbpool.ExecContext(context.Background(), `
|
|
PRAGMA journal_mode = WAL;
|
|
PRAGMA synchronous = NORMAL;
|
|
`)
|
|
if err != nil {
|
|
t.Fatalf("failed to set pragmas: %v", err)
|
|
}
|
|
return dbpool
|
|
}
|