From 49bb64fdd13b71da2815a77ecb9426dfa2976466 Mon Sep 17 00:00:00 2001 From: Rachel Chen Date: Sat, 1 Feb 2025 17:49:45 -0800 Subject: [PATCH] kv/sqlite3: workaround for modernc/sqlite3 not building on illumos --- kv/sqlite3/kv.go | 14 +++++++++----- kv/sqlite3/sqlite_illumos.go | 14 ++++++++++++++ kv/sqlite3/sqlite_purego.go | 16 ++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 kv/sqlite3/sqlite_illumos.go create mode 100644 kv/sqlite3/sqlite_purego.go diff --git a/kv/sqlite3/kv.go b/kv/sqlite3/kv.go index 9f21f5b..e0973b5 100644 --- a/kv/sqlite3/kv.go +++ b/kv/sqlite3/kv.go @@ -1,7 +1,6 @@ package sqlite3 import ( - "fmt" "os" "path/filepath" "runtime" @@ -9,7 +8,6 @@ import ( "go.miragespace.co/specter/spec/chord" - "github.com/glebarez/sqlite" "go.uber.org/zap" "gorm.io/gorm" "moul.io/zapgorm2" @@ -48,10 +46,16 @@ func New(cfg Config) (*SqliteKV, error) { if err := os.MkdirAll(dbDir, 0750); err != nil { return nil, err } - dsn := fmt.Sprintf("file:%s?_pragma=journal_mode(WAL)&_pragma=foreign_keys(1)&_pragma=busy_timeout(5000)&_pragma=synchronous(1)&_pragma=page_size(4096)&_txlock=immediate", filepath.Join(dbDir, "db")) + dbPath := filepath.Join(dbDir, "db") - readDb := sqlite.Open(dsn) - writeDb := sqlite.Open(dsn) + readDb, err := openSQLite(dbPath) + if err != nil { + return nil, err + } + writeDb, err := openSQLite(dbPath) + if err != nil { + return nil, err + } logger := zapgorm2.New(cfg.Logger) logger.IgnoreRecordNotFoundError = true diff --git a/kv/sqlite3/sqlite_illumos.go b/kv/sqlite3/sqlite_illumos.go new file mode 100644 index 0000000..b8cae5c --- /dev/null +++ b/kv/sqlite3/sqlite_illumos.go @@ -0,0 +1,14 @@ +//go:build illumos + +package sqlite3 + +import ( + "errors" + + "gorm.io/gorm" +) + +// FIXME: Introduce support for SQLite3 via mattn/go-sqlite3 +func openSQLite(_ string) (gorm.Dialector, error) { + return nil, errors.ErrUnsupported +} diff --git a/kv/sqlite3/sqlite_purego.go b/kv/sqlite3/sqlite_purego.go new file mode 100644 index 0000000..b95a9e3 --- /dev/null +++ b/kv/sqlite3/sqlite_purego.go @@ -0,0 +1,16 @@ +//go:build !illumos + +package sqlite3 + +import ( + "fmt" + + "github.com/glebarez/sqlite" + "gorm.io/gorm" +) + +func openSQLite(dbpath string) (gorm.Dialector, error) { + dsn := fmt.Sprintf("file:%s?_pragma=journal_mode(WAL)&_pragma=foreign_keys(1)&_pragma=busy_timeout(5000)&_pragma=synchronous(1)&_pragma=page_size(4096)&_txlock=immediate", dbpath) + db := sqlite.Open(dsn) + return db, nil +}